我正在尝试向OpenGL glsl着色器发送一个布尔值。
目前我在着色器中有这个:
uniform bool foo;
我用它来设置它:
glUniform1i(glGetUniformLocation(shader, "foo"), true);
似乎没有glUniform1b
,所以我将其设置为整数。这似乎工作正常。
这种方法有问题吗?它是可移植的,还是可以打破其他显卡/驱动程序?我目前正在使用OpenGL 4.3。
答案 0 :(得分:26)
§4.1基本类型 OpenGL着色语言支持以下基本数据类型,分组如下:
bool
条件类型,取值为true或falsebvec2
双组件布尔矢量bvec3
三分量布尔矢量bvec4
四分量布尔矢量
...
§4.1.2布尔值为了使代码的条件执行更容易表达,支持类型bool。不期望硬件直接支持这种类型的变量。 (...)
关于设置:
§2.2.1(...)当使用与该状态的实际类型不同的参数类型指定状态值时,数据转换是 执行如下:
- 当内部状态的类型为布尔值时,零整数或浮点值将转换为
FALSE
,非零值将转换为TRUE
。
答案 1 :(得分:0)
glsl bool
的大小是 32 位,与 int
相同,所以是的,您可以这样设置。
不,它不会在其他用于 OpenGL 的显卡/驱动程序上中断。