我想使用以下代码使用片段着色器渲染无符号整数纹理:
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编程指南 编写,如果我想在着色器中接收整数,那么我应该使用整数采样器类型,整数内部格式,以及整数外部格式和类型。以下为GL_R8UI
内部格式,GL_RED_INTEGER
为外部格式,GL_UNSIGNED_BYTE
为数据类型。我还在着色器中使用usampler2D
。但是当程序开始渲染文件时,总会得到错误 隐式转换来自" int"到" uint" 。似乎纹理数据存储为int,而无符号采样器无法转换它。但我确实使用GL_R8UI
作为内部格式,因此纹理数据应该存储为无符号。为什么unsigned sampler只能获得signed int?我该如何解决这个问题?
答案 0 :(得分:0)
纹理函数调用不正确,其次纹理函数返回需要在着色器中处理的浮点值,方法是将RGBA分量除以255.0(当使用GL_R8UI时)并返回并分割颜色输出。
uniform usampler2D tex;
out uvec3 OutColor;
void main(void){
uvec3 vec_tex;
vec_tex = texture(tex, TexCoordOut)
OutColor = vec3(float(vec_tex.r)/255, float(vec_tex.g)/255, float(vec_tex.b)/255)
}