OpenGL bool制服?

Jan*_*egg 31 c++ opengl shader boolean

我正在尝试向OpenGL glsl着色器发送一个布尔值.

目前我在着色器中有这个:

uniform bool foo;
Run Code Online (Sandbox Code Playgroud)

我用它来设置它:

glUniform1i(glGetUniformLocation(shader, "foo"), true);
Run Code Online (Sandbox Code Playgroud)

似乎没有glUniform1b,所以我将其设置为整数.这似乎工作正常.

这种方法有什么问题吗?它是便携式的,还是可以打破其他显卡/驱动程序?我目前正在使用OpenGL 4.3.

Bar*_*icz 30

§4.1基本类型 OpenGL着色语言支持以下基本数据类型,分组如下:

  • bool 条件类型,取值为true或false
  • bvec2 双组分布尔向量
  • bvec3 三分量布尔向量
  • bvec4 四分量布尔矢量

...

§4.1.2布尔值为了使代码的条件执行更容易表达,支持类型bool.不期望硬件直接支持这种类型的变量.(......)

至于设定:

§2.2.1(...)当使用与该状态的实际类型不同的参数类型指定状态值时,数据转换按如下方式执行:

  • 当内部状态的类型为布尔值时,将零整数或浮点值转换为FALSE非零值,并将非零值转换为TRUE.

  • 谢谢。4.1 意味着我可以在我的 glsl 着色器中使用 bool。4.1.2 并没有真正帮助我。仍然没有回答的是我是否可以使用 glUniform1i 设置布尔统一... (3认同)
  • @JanRüegg 也添加了引用 (2认同)