如何从GLSL程序获取uvec4输出

时间:2012-02-07 22:27:20

标签: c++ opengl glsl

我试图用uvec4输出编写一个GLSL着色器,但它没有工作。

这个简单的程序导致黑色,当我期待白色...

我是否需要在c ++端做一些事情来接收uvec4数据?

smooth out uvec4 Result;

void main(void)
{
   Result = uvec4(255, 255, 255, 255);
}

1 个答案:

答案 0 :(得分:3)

uvec4是无符号整数类型。您只能将无符号整数值写入 具有无符号整数texture format的纹理。 警告:不要将规范化纹理格式与整数格式混淆。 GL_RGBA8 不是无符号整数纹理格式。它是无符号的规范化纹理格式。如果你想写实际的整数,那么你应该写GL_RGBA8UI

但是,如果我可以阅读您的意图,您可能希望uvec4(255, 255, 255, 255)为白色。你不能这样做。如果要渲染到屏幕,则必须使用正确的浮点颜色值。这些将转换为适当的输出值。如果输出图像的格式为GL_RGBA8,则范围[0,1]上的浮点值将转换为[0,255]进行存储。

因此,您应该写入vec4并在[0,1]范围内写入值。不要试图打击它;现在接受它并继续前进。