我试图用uvec4输出编写一个GLSL着色器,但它没有工作。
这个简单的程序导致黑色,当我期待白色...
我是否需要在c ++端做一些事情来接收uvec4数据?
smooth out uvec4 Result;
void main(void)
{
Result = uvec4(255, 255, 255, 255);
}
答案 0 :(得分:3)
uvec4
是无符号整数类型。您只能将无符号整数值写入 具有无符号整数texture format的纹理。 警告:不要将规范化纹理格式与整数格式混淆。 GL_RGBA8
不是无符号整数纹理格式。它是无符号的规范化纹理格式。如果你想写实际的整数,那么你应该写GL_RGBA8UI
。
但是,如果我可以阅读您的意图,您可能希望uvec4(255, 255, 255, 255)
为白色。你不能这样做。如果要渲染到屏幕,则必须使用正确的浮点颜色值。这些将转换为适当的输出值。如果输出图像的格式为GL_RGBA8
,则范围[0,1]上的浮点值将转换为[0,255]进行存储。
因此,您应该写入vec4
并在[0,1]范围内写入值。不要试图打击它;现在接受它并继续前进。