在使用GeForce GT 650M在OSX 10.9.4上的Fragment Shader中读取无符号整数纹理时遇到问题。
我正在使用OpenGL 3.2核心配置文件。
GL_VESION
报告为:4.1 NVIDIA-8.26.26 310.40.45f01
GL_SHADING_LANGUAGE_VERSION
报告为:4.10
以下是我在C ++中设置的相关部分:
// ..
GLuint texID;
glGenTextures(1, &texID);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texID);
// data is a void* arg
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32UI, 1024, 2, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, data);
// programID is a GLuint arg
GLint const uniID = getUniformID(programID, "my_texture")
glUniform1i(uniID, 0);
// ..
以下是我的片段着色器代码中的相关部分:
#version 150 core
// ..
uniform usampler2D my_texture;
// ..
void main()
{
ivec2 texSize = textureSize(my_texture, 0);
uint pixelVal = texelFetch(my_texture, ivec2(0, 0), 0).r;
// ..
}
texSize
是ivec2(1,1)
,即使我指定了1024x2
纹理。
pixelVal
是垃圾邮件。
我没有gl错误(在从上面删除每个OGL API调用后glGetError
调用)。
使用整数纹理和使用RGBA无符号整数纹理时,我得到相同的结果。
当我将纹理更改为浮动纹理时,事情按预期工作。
texSize
是ivec2(1024,2)
pixelVal
是正确的浮点值
当我在Windows 7(带有GLEW提供的扩展的ATI Radeon HD 5450)上运行相同的无符号整数纹理代码时,我在片段着色器中得到了预期的结果:
texSize
是ivec2(1024,2)
pixelVal
是正确的uint值
任何人都可以了解OSX上整数纹理出了什么问题? 也许我的NVIDIA显卡存在错误。搜索没有透露任何报道的案例......
答案 0 :(得分:1)
此次通话存在问题:
glUniform1i(uniID, GL_TEXTURE0);
需要为采样器均匀设置的值是纹理单元的索引,而不是相应的枚举。要从纹理单元0进行采样,需要:
glUniform1i(uniID, 0);