GLSL 中的(无符号)字节
(unsigned) byte in GLSL
我的一些顶点属性是单个无符号字节,我在我的 GLSL 片段着色器中需要它们,不是为了任何 "real" 计算,而是为了比较它们(如果你愿意的话,比如枚举)。我没有在 GLSL 中找到任何无符号字节甚至字节数据类型,那么有没有办法将它用作输入?如果不是(目前看来是)GL_UNSIGNED_BYTE 的目的是什么?
GLSL 不处理大小类型(好吧,不处理小于 32 位的大小类型)。它只有 signed/unsigned 个整数、浮点数、双精度数、布尔值和 vectors/matrices 个。如果将无符号字节作为整数顶点属性传递给顶点着色器,则它可以将其读取为 uint
类型,其大小为 32 位。传递整数属性需要使用glVertexAttribIPointer/IFormat
(注意"I")。
然后顶点着色器可以将此值作为 uint
类型传递给片段着色器(但只能使用 flat
插值限定符)。当然,三角形的每个片段都会得到相同的值。
我的一些顶点属性是单个无符号字节,我在我的 GLSL 片段着色器中需要它们,不是为了任何 "real" 计算,而是为了比较它们(如果你愿意的话,比如枚举)。我没有在 GLSL 中找到任何无符号字节甚至字节数据类型,那么有没有办法将它用作输入?如果不是(目前看来是)GL_UNSIGNED_BYTE 的目的是什么?
GLSL 不处理大小类型(好吧,不处理小于 32 位的大小类型)。它只有 signed/unsigned 个整数、浮点数、双精度数、布尔值和 vectors/matrices 个。如果将无符号字节作为整数顶点属性传递给顶点着色器,则它可以将其读取为 uint
类型,其大小为 32 位。传递整数属性需要使用glVertexAttribIPointer/IFormat
(注意"I")。
然后顶点着色器可以将此值作为 uint
类型传递给片段着色器(但只能使用 flat
插值限定符)。当然,三角形的每个片段都会得到相同的值。