在我的着色器中,我有一个
bvec4
制服,定义如下:
uniform bvec4 Flags;
从我的代码中设置此值的正确方法是什么?
我最初以为我会用
glUniform1i(location, bits)
设置它,但这不起作用。
来自OpenGL规范第2.2.1节:
当内部状态类型为布尔值时,零整数或浮点值将转换为 FALSE,非零值将转换为 TRUE
因此,您可以使用
glUniform4iv
并向其传递 4 个整数的缓冲区,其中 bits[I]
占据 ints[I]
。如果为零,这些值将转换为 false
,否则转换为 true
。
同样,您可以使用
glUniform3iv
设置 bvec3
,使用 glUniform2iv
设置 bvec2
,使用 glUniform1iv
或 glUniform1i
设置 bool
。
这是一个使用 LWJGL 3 的 Java 示例:
GL20.glUniform4iv(location, new int[]{bits & 0b1, bits & 0b10, bits & 0b100, bits & 0b1000});
您可能应该创建一个
int[]
或 IntBuffer
一次并重复使用它。