片段着色器输出值

时间:2012-01-14 17:29:02

标签: opengl shader fragment-shader

我正在使用我的alpha通道作为8位整数索引,用于与混合无关的内容,因此我想仔细控制位值。特别是,我需要来自一个具有特定alpha值的FBO渲染纹理的所有像素,以匹配着色器中具有相同alpha值的所有像素。经验告诉我在比较浮点值时要小心......

使用浮点vec4设置颜色值可能不会引起我的问​​题,我的理解是即使是半精度16位浮​​点数也能够区分所有8位整数(0-255)值。但我更喜欢在片段着色器中执行整数运算,所以我确定值。

我是否可能通过在片段着色器中执行整数运算来降低性能?

输出如何缩放?我在某处读到,将整数向量作为片段的颜色输出发送是有效的。但它是如何缩放的?如果我发送一个整数为0-255的uvec4,它会适当缩放吗?我想让它直接将整数值写入像素格式,对于整数格式我不希望它做任何缩放。也许对于RGBA8,以高于255的int值发送它会将其钳位到255,并将负钳位钳位到零,依此类推。

由于我无法通过打印出颜色值来调试这个问题,这个问题变得很困难,除非我抓住渲染的图像并仔细检查它们。如果某些东西不匹配,也许我可以画出鲜艳的颜色。

Here是我在此主题中找到的相关主题。它让我比以前更加困惑。

1 个答案:

答案 0 :(得分:1)

我建议不使用颜色附件的alpha通道,而是使用显式整数格式的附加渲染目标。至少从OpenGL-3.1(我看过的最老的规范,这个答案)开始提供。请参阅OpenGL函数glBindFragDataLocation,该函数绑定片段着色器out变量。在你的情况下int out $VARIABLENAME。要输入到下一个状态,请使用整数采样器。我将向您推荐OpenGL-3.1和GLSL-1.30的规范。