在我的着色器中,我有一个bvec4制服定义如下:
bvec4
uniform bvec4 Flags;
从我的代码中设置这个的正确方法是什么?我最初假设我将使用glUniform1i(location, bits)设置它,但这不起作用。
glUniform1i(location, bits)
kq0g1dla1#
来自OpenGL specification第2.2.1节:当内部状态的类型为boolean时,零整数或浮点值转换为TRUE,非零值转换为TRUE因此,您可以使用glUniform4iv并传递给它一个由4个整数组成的缓冲区,其中bits[I]占用ints[I]。如果值为零,将转换为false,否则将转换为true。类似地,可以使用glUniform3iv设置bvec3,使用glUniform2iv设置bvec2,使用glUniform1iv或glUniform1i设置bool。下面是一个使用LWJGL 3的Java示例:
glUniform4iv
bits[I]
ints[I]
false
true
glUniform3iv
bvec3
glUniform2iv
bvec2
glUniform1iv
glUniform1i
bool
GL20.glUniform4iv(location, new int[]{bits & 0b1, bits & 0b10, bits & 0b100, bits & 0b1000});
您可能应该创建一个int[]或IntBuffer,然后重用它。
int[]
IntBuffer
1条答案
按热度按时间kq0g1dla1#
来自OpenGL specification第2.2.1节:
当内部状态的类型为boolean时,零整数或浮点值转换为TRUE,非零值转换为TRUE
因此,您可以使用
glUniform4iv
并传递给它一个由4个整数组成的缓冲区,其中bits[I]
占用ints[I]
。如果值为零,将转换为false
,否则将转换为true
。类似地,可以使用
glUniform3iv
设置bvec3
,使用glUniform2iv
设置bvec2
,使用glUniform1iv
或glUniform1i
设置bool
。下面是一个使用LWJGL 3的Java示例:
您可能应该创建一个
int[]
或IntBuffer
,然后重用它。