【发布时间】:2021-02-04 00:06:40
【问题描述】:
我用这个调用创建了一个纹理:
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA8, w, h, 0,GL_RGBA, GL_UNSIGNED_BYTE, 0);
我用深灰色渲染纹理:
glColor3ub(42, 42, 42);
glBegin()...
现在我使用自定义着色器将此纹理渲染到后台缓冲区。在片段中,我像这样访问纹理:
#version 130
#extension GL_EXT_gpu_shader4 : require
uniform usampler2D text_in;
并使用以下方法获取数据:
uvec4 f0 = texture(text_in, gl_TexCoord[0].st);
我希望f0[0] 中的值是42u,但它是1042852009u,恰好是
float x = 42/255.0f;
unsigned i = *reinterpret_cast<int*>(&x);
我做错了什么?我想使用整数纹理,以便在片段着色器中可以将像素值与精确的整数值进行比较。我知道渲染到纹理效果很好,因为如果我在没有自定义着色器的情况下将纹理渲染到后台缓冲区,我会得到预期的 42 灰色。
【问题讨论】:
标签: c++ opengl glsl fragment-shader render-to-texture