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

问题描述 投票:0回答:1

在我的着色器中,我有一个

bvec4
制服,定义如下:

uniform bvec4 Flags;

从我的代码中设置此值的正确方法是什么?

我最初以为我会用

glUniform1i(location, bits)
设置它,但这不起作用。

opengl glsl
1个回答
0
投票

来自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
一次并重复使用它。

© www.soinside.com 2019 - 2024. All rights reserved.