При использовании текстуры 1x1 все в порядке:
Код: Выделить всё
unsigned char x1[1] = {255};
unsigned char x2[4] = {255, 0, 0, 255};
GLuint textureIDText = loadTextureFromData(1, 1, x1);

Когда я пробую текстуру 2x2, она показывает совершенно неожиданный результат:
Код: Выделить всё
unsigned char x1[1] = {255};
unsigned char x2[4] = {255, 0, 0, 255};
GLuint textureIDText = loadTextureFromData(2, 2, x2);

Когда я анимирую текстуру во время в цикле рендеринга происходит та же самая история.
Текстура 1x1 анимируется нормально:
Код: Выделить всё
flushData(textureIDText, 1, 1, x1);
Код: Выделить всё
flushData(textureIDText, 2, 2, x2);
Код: Выделить всё
unsigned int loadTextureFromData(int width, int height, void* pTextureData)
{
unsigned int textureID = 0;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pTextureData);
glGenerateMipmap(GL_TEXTURE_2D);
return textureID;
}
Код: Выделить всё
void flushData(unsigned int textureID, int width, int height, void* pTextureData)
{
glBindTexture(GL_TEXTURE_2D, textureID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pTextureData);
glGenerateMipmap(GL_TEXTURE_2D);
}
Код: Выделить всё
#define _USE_MATH_DEFINES
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
template class scope_guard
{
Deleter t;
public:
scope_guard(Deleter _t) :t(_t) {}
~scope_guard() { t(); }
};
const char* vertexShaderSource = R"glsl(#version 330 core
layout(location = 0) in vec3 aPos;
layout(location = 2) in vec2 aTexCoord;
out vec2 TexCoord;
void main()
{
gl_Position = vec4(aPos, 1.0);
TexCoord = aTexCoord;
})glsl";
const char* fragmentShaderSource = R"glsl(#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D ourTexture;
void main()
{
FragColor = vec4(texture(ourTexture, TexCoord).r, texture(ourTexture, TexCoord).r, texture(ourTexture, TexCoord).r, 1);
})glsl";
unsigned int loadTextureFromData(int width, int height, void* pTextureData)
{
unsigned int textureID = 0;
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
/////////////////////////////////////
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pTextureData);
glGenerateMipmap(GL_TEXTURE_2D);
return textureID;
}
void flushData(unsigned int textureID, int width, int height, void* pTextureData)
{
glBindTexture(GL_TEXTURE_2D, textureID);
//glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, i_width, i_height, 0, i_Type, GL_UNSIGNED_BYTE, i_TextureData);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, pTextureData);
glGenerateMipmap(GL_TEXTURE_2D);
}
GLFWwindow* appInit() {
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79789061/manually-generated-texture-shows-unexpected-results-opengl[/url]