R32I sampler2D始终返回0

时间:2015-06-17 11:42:38

标签: c++ opengl

我有一个(默认的顶点和)片段着色器,它应该调整纹理大小并按照亮度校正的特定因子缩放它们的颜色。

结果呈现为GL_UNSIGNED_INT_8_8_8_8帧缓冲区。

#version 330

uniform sampler2D tex;
uniform vec2 screenSize;
uniform float scale;

layout(location = 0) out vec4 color;

void main()
{
    vec2 coord = gl_FragCoord.xy / screenSize;
    color = texture(tex, coord);
    color *= scale;
    color.a = 1;
}

当我将R32I纹理绑定到tex时,红色通道中texture调用的输出始终为0,尽管纹理中没有0数据。 我通过apitrace检查了正确的纹理绑定到tex并且它包含的值高达约200。 规范化此值应该从9.3e-8得出texture()的输出, 而scale = 9.67e7

glGetError和调试回调都没有错误消息(除了性能警告之外)。

我做错了什么?是否禁止将整数纹理绑定到(非整数)采样器?

1 个答案:

答案 0 :(得分:5)

由于您使用的是整数格式,因此您必须使用isampler2D代替您的采样器。

  

因此对于采样器,浮点采样器以"采样器"开头。有符号整数采样器以" isampler"开头,无符号整数采样器以" usampler"开头。如果您尝试从采样器中读取纹理的图像格式与采样器的基本格式(例如,带有GL_R8I的usampler2D或带有GL_R8UI的sampler1D)匹配,则所有读取都将生成未定义的值。

(资料来源:www.opengl.org