纹理似乎正在读取未初始化的内存
texture appears to be reading off uninitialized memory
我创建了这样的纹理:
GLuint tex;
unsigned char data[12] = {255, 255, 255,
255, 255, 255,
255, 255, 255,
255, 255, 255};
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
我得到它的位置:
GLuint texloc = glGetUniformLocation(program, "tex_map");
然后在我的绘图循环中我有:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
glUniform1i(texloc, 0);
然后在我的片段着色器中我有:
out vec3 color;
uniform sampler2D tex_map;
void main()
{
.
.
color = texture(tex_map, vec2(-0.1, -0.5));
}
有时当我 运行 程序时,我正在绘制的对象变成随机的非白色,通常是红色。我以为我已经使用 GL_CLAMP_TO_EDGE
处理了越界的情况。是什么导致了这种行为?
编辑:当 vec2(_, _)
内的两个值都在 0-1...
范围内时,也会发生此行为
尝试添加
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
默认对齐方式为 4 个字节,但您的 data
数组假设包装紧密。
我创建了这样的纹理:
GLuint tex;
unsigned char data[12] = {255, 255, 255,
255, 255, 255,
255, 255, 255,
255, 255, 255};
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
我得到它的位置:
GLuint texloc = glGetUniformLocation(program, "tex_map");
然后在我的绘图循环中我有:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
glUniform1i(texloc, 0);
然后在我的片段着色器中我有:
out vec3 color;
uniform sampler2D tex_map;
void main()
{
.
.
color = texture(tex_map, vec2(-0.1, -0.5));
}
有时当我 运行 程序时,我正在绘制的对象变成随机的非白色,通常是红色。我以为我已经使用 GL_CLAMP_TO_EDGE
处理了越界的情况。是什么导致了这种行为?
编辑:当 vec2(_, _)
内的两个值都在 0-1...
尝试添加
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
默认对齐方式为 4 个字节,但您的 data
数组假设包装紧密。