R32I sampler2D始终返回0

Nob*_*ody 2 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;
}
Run Code Online (Sandbox Code Playgroud)

当我将R32I纹理绑定到tex时texture,尽管纹理中包含非0数据,但红色通道中调用的输出始终为0。我通过apitrace检查是否绑定了正确的纹理,tex并且该纹理包含最多可达200​​的值。对该值进行规范化应提供9.3e-8from texture(),while 的输出scale = 9.67e7

无论glGetError是来自调试回调还是来自调试回调,都没有错误消息(性能警告除外)。

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

BDL*_*BDL 5

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

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

(来源:www.opengl.org