Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 片段着色器输出值_Opengl_Shader_Fragment Shader - Fatal编程技术网

Opengl 片段着色器输出值

Opengl 片段着色器输出值,opengl,shader,fragment-shader,Opengl,Shader,Fragment Shader,我使用alpha通道作为与混合无关的8位整数索引,因此我希望仔细控制位值。特别是,我需要一个FBO渲染纹理中具有特定alpha值的所有像素与着色器中具有相同alpha值的所有像素匹配。经验告诉我在比较浮点值是否相等时要小心 虽然使用浮点vec4设置颜色值可能不会引起问题,但我的理解是,即使是半精度16位浮点也能够区分所有8位整数(0-255)值。但是我更喜欢在片段着色器中执行整数操作,因此我确定这些值 在片段着色器中执行整数运算可能会导致性能下降吗 输出是如何缩放的?我在某处读到,将整数向量作为

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

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

在片段着色器中执行整数运算可能会导致性能下降吗

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

这个问题之所以困难,是因为我无法通过打印颜色值进行调试,除非我抓取渲染图像并仔细检查它们。如果有些东西不相配,也许我可以画一个明亮的颜色


是我在这个主题上找到的一条相关线索。它比以前更让我困惑。

我建议不要使用颜色附件的alpha通道,而是使用一个带有显式整数格式的额外渲染目标。这至少可以从OpenGL-3.1开始使用(对于这个答案,这是我看过的最古老的规范)。请参见OpenGL函数
glBindFragDataLocation
,该函数将碎片着色器
绑定到
变量。在您的例子中,a
int out$VARIABLENAME
。对于下一个状态的输入,使用整数采样器。有关详细信息,请参阅OpenGL-3.1和GLSL-1.30规范。

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

注意,此线程来自2004年。从那时起,GPU领域进行了大量的开发。也就是说,现在支持整数(图像)缓冲区和按位操作。所以你在使用这些的时候是清楚的。啊,我没有注意到。谢谢,这肯定是一个非常古老的讨论。。。那我该怎么办?我可以在管道中一直使用整数吗?还是在设置最终片段颜色之前,我仍然需要转换为浮点?我特别感兴趣的是将FBO颜色缓冲区上的alpha通道设置为我在颜色属性中使用无符号字节指定的特定整数值。从那时起,GPU领域进行了大量的开发。也就是说,现在支持整数(图像)缓冲区和按位操作。所以你在使用这些的时候是清楚的。啊,我没有注意到。谢谢,这肯定是一个非常古老的讨论。。。那我该怎么办?我可以在管道中一直使用整数吗?还是在设置最终片段颜色之前,我仍然需要转换为浮点?我特别感兴趣的是将FBO颜色缓冲区上的alpha通道设置为我在颜色属性中使用无符号字节指定的特定整数值。你认为这会在OpenGL 2.0/2.1硬件上失败吗?(唯一能做3.0+的硬件是Sandy Bridge HD2/3000和Nvidia/AMD最近三代左右的产品)@StevenLu:由于整数运算只在OpenGL-3中引入,我想说你在OpenGL-2硬件上运气不好。好的。让我们看看这在浮点相等性检查中的效果如何。您认为这会在OpenGL 2.0/2.1硬件上失败吗?(唯一能做3.0+的硬件是Sandy Bridge HD2/3000和Nvidia/AMD最近三代左右的产品)@StevenLu:由于整数运算只在OpenGL-3中引入,我想说你在OpenGL-2硬件上运气不好。好的。让我们看看这与浮点相等性检查的效果如何。