【发布时间】:2017-08-02 03:31:36
【问题描述】:
我的一些顶点属性是单个无符号字节,我在我的 GLSL 片段着色器中需要它们,不是用于任何“真实”计算,而是用于比较它们(如果你愿意的话,就像枚举)。我在 GLSL 中没有找到任何无符号字节甚至字节数据类型,那么有没有办法将它用作输入?如果不是(目前看来是)GL_UNSIGNED_BYTE 的目的是什么?
【问题讨论】:
标签: opengl types glsl byte unsigned
我的一些顶点属性是单个无符号字节,我在我的 GLSL 片段着色器中需要它们,不是用于任何“真实”计算,而是用于比较它们(如果你愿意的话,就像枚举)。我在 GLSL 中没有找到任何无符号字节甚至字节数据类型,那么有没有办法将它用作输入?如果不是(目前看来是)GL_UNSIGNED_BYTE 的目的是什么?
【问题讨论】:
标签: opengl types glsl byte unsigned
GLSL 不处理大小类型(嗯,不是小于 32 位的大小类型)。它只有有符号/无符号整数、浮点数、双精度数、布尔值和它们的向量/矩阵。如果将无符号字节作为整数顶点属性传递给顶点着色器,则它可以将其读取为 uint 类型,大小为 32 位。传递整数属性需要使用glVertexAttribIPointer/IFormat(注意“I”)。
然后顶点着色器可以将该值作为uint 类型传递给片段着色器(但只能使用flat 插值限定符)。当然,三角形的每个片段都会得到相同的值。
【讨论】: