1
我想用渲染无符号整数纹理片段着色器下面的代码:采样无符号整数的纹理数据
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8UI, width, height, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, data);
和部分片段着色器代码:
#version 330
uniform usampler2D tex;
void main(void){
vec3 vec_tex;
vec_tex = (texture(tex), TexCoordOut).r
}
它是写在OpenGL编程指南,如果我想在着色器中接收整数,那么我应该使用整数采样器类型,整数内部格式和整数外部格式a nd类型。这里是我们的GL_R8UI
作为内部格式,GL_RED_INTEGER
作为外部格式,GL_UNSIGNED_BYTE
作为数据类型。我也在着色器中使用usampler2D
。但是当程序开始渲染文件时,总是会将错误从“int”隐式转换为“uint”。看起来纹理数据存储为int,而无符号采样器无法转换。但我确实使用GL_R8UI
作为内部格式,所以纹理数据应该作为无符号存储。为什么无符号采样器只能得到int的签名?我怎么解决这个问题?
你知道'vec3'是浮点数,对不对?如果你想存储从'usampler2D'获取的结果,你应该使用'uvec3'。即使这样,如果这是字面上的着色器,它应该会产生比这更严重的错误。 '纹理(...)'需要纹理坐标,'TexCoordOut'甚至没有定义。 –