OSX上的OpenGL整数纹理(NVIDIA GeForce GT 650M)

时间:2014-07-16 10:45:40

标签: macos opengl glsl

在使用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;

    // ..
}

texSizeivec2(1,1),即使我指定了1024x2纹理。

pixelVal是垃圾邮件。

我没有gl错误(在从上面删除每个OGL API调用后glGetError调用)。

使用整数纹理和使用RGBA无符号整数纹理时,我得到相同的结果。


当我将纹理更改为浮动纹理时,事情按预期工作。

texSizeivec2(1024,2)

pixelVal是正确的浮点值


当我在Windows 7(带有GLEW提供的扩展的ATI Radeon HD 5450)上运行相同的无符号整数纹理代码时,我在片段着色器中得到了预期的结果:

texSizeivec2(1024,2)

pixelVal是正确的uint值


任何人都可以了解OSX上整数纹理出了什么问题? 也许我的NVIDIA显卡存在错误。搜索没有透露任何报道的案例......

1 个答案:

答案 0 :(得分:1)

此次通话存在问题:

glUniform1i(uniID, GL_TEXTURE0);

需要为采样器均匀设置的值是纹理单元的索引,而不是相应的枚举。要从纹理单元0进行采样,需要:

glUniform1i(uniID, 0);