1

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

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

在片段着色器中执行整数操作是否可能会导致性能下降?

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

这个问题很困难,因为除非我抓取渲染的图像并仔细检查它们,否则我无法通过打印出颜色值来进行调试。如果有些东西不匹配,也许我可以画出鲜艳的颜色。

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

4

1 回答 1

1

我建议不要使用颜色附件的 alpha 通道,而是使用具有显式整数格式的附加渲染目标。这至少从 OpenGL-3.1 开始可用(我看过的最古老的规范,对于这个答案)。glBindFragDataLocation请参阅绑定片段着色器out变量的 OpenGL 函数。在你的情况下一个int out $VARIABLENAME. 对于进入下一个状态的输入,请使用整数采样器。有关详细信息,请参阅 OpenGL-3.1 和 GLSL-1.30 的规范。

于 2012-01-14T18:30:37.337 回答