在OpenGL中设置bool vec uniform的正确方法是什么?

ipakzgxi  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(113)

在我的着色器中,我有一个bvec4制服定义如下:

uniform bvec4 Flags;

从我的代码中设置这个的正确方法是什么?
我最初假设我将使用glUniform1i(location, bits)设置它,但这不起作用。

kq0g1dla

kq0g1dla1#

来自OpenGL specification第2.2.1节:
当内部状态的类型为boolean时,零整数或浮点值转换为TRUE,非零值转换为TRUE
因此,您可以使用glUniform4iv并传递给它一个由4个整数组成的缓冲区,其中bits[I]占用ints[I]。如果值为零,将转换为false,否则将转换为true
类似地,可以使用glUniform3iv设置bvec3,使用glUniform2iv设置bvec2,使用glUniform1ivglUniform1i设置bool
下面是一个使用LWJGL 3的Java示例:

GL20.glUniform4iv(location, new int[]{bits & 0b1, bits & 0b10, bits & 0b100, bits & 0b1000});

您可能应该创建一个int[]IntBuffer,然后重用它。

相关问题