GLSL的imageLoad()始终返回0吗?

时间:2018-09-17 20:00:11

标签: opengl glsl

我创建了一个纹理,并用一些数据填充了它:

glBindTexture(GL_TEXTURE_2D, head_pointer_image);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32UI, width, height, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, data);

然后将其绑定到0:

glBindImageTexture(0, head_pointer_image, 0, GL_FALSE, 0, GL_READ_WRITE, GL_R32UI); 
glUniform1ui(0, 0); // Not sure if necessary 

如果我使用glGetTexImage()检查数据,则会得到正确的值,但是如果尝试在着色器中读取数据,则只会得到零。

layout(binding = 0, r32ui) coherent uniform uimage2D head_pointer_image;

uint value = imageLoad(head_pointer_image, ivec2(gl_FragCoord.xy)).r;

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我已经获得外部帮助,问题在于我的纹理不完整,原因是默认的缩小过滤为GL_NEAREST_MIPMAP_LINEAR,这需要完整的mipmap链,而且我只有基本级别的图像。

将GL_TEXTURE_MIN_FILTER设置为GL_LINEAR修复了我的问题。