OpenGL bool制服?

时间:2015-11-13 10:06:19

标签: c++ opengl boolean shader

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

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

uniform bool foo;

我用它来设置它:

glUniform1i(glGetUniformLocation(shader, "foo"), true);

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

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

2 个答案:

答案 0 :(得分:26)

  

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

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

...

  

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

关于设置:

  

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

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

答案 1 :(得分:0)

glsl bool 的大小是 32 位,与 int 相同,所以是的,您可以这样设置。

不,它不会在其他用于 OpenGL 的显卡/驱动程序上中断。