OpenGL布尔统一

OpenGL bool uniform?

本文关键字:布尔统 OpenGL      更新时间:2023-10-16

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

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

uniform bool foo;

我用这个来设置它:

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

似乎没有glUniform1b,所以我将其设置为整数。这似乎很有效。

这种方法有问题吗?它是便携式的,还是可能在其他显卡/驱动程序上坏掉我现在正在使用OpenGL 4.3。

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

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

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

关于设置:

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

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

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

不,它不会破坏OpenGL的其他图形卡/驱动程序。