Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL布尔制服?_C++_Opengl_Boolean_Shader - Fatal编程技术网

C++ OpenGL布尔制服?

C++ OpenGL布尔制服?,c++,opengl,boolean,shader,C++,Opengl,Boolean,Shader,我正在尝试向OpenGL glsl着色器发送布尔值 目前我在着色器中有以下内容: uniform bool foo; 我用这个来设置它: glUniform1i(glGetUniformLocation(shader, "foo"), true); 似乎没有一个glUniform1b,所以我将它设置为一个整数。这似乎很有效 这种方法有什么问题吗?它是可移植的,还是会在其他图形卡/驱动程序上损坏?目前我正在使用OpenGL 4.3 §4.1基本类型 OpenGL着色语言支持以下基本数据类型,分

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

目前我在着色器中有以下内容:

uniform bool foo;
我用这个来设置它:

glUniform1i(glGetUniformLocation(shader, "foo"), true);
似乎没有一个
glUniform1b
,所以我将它设置为一个整数。这似乎很有效

这种方法有什么问题吗?它是可移植的,还是会在其他图形卡/驱动程序上损坏?目前我正在使用OpenGL 4.3

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

  • bool
    一种条件类型,取值为真或假
  • bvec2
    双分量布尔向量
  • bvec3
    三分量布尔向量
  • bvec4
    四分量布尔向量

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

关于设置:

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

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

据我所知,它与4字节对齐有关(布尔值为1字节,因此无论哪种方式,最后都会添加3个额外的填充字节),因此使用布尔值是没有效率的,甚至可能在中被弃用OpenGL@Amadeusz它当然没有被弃用。谢谢。4.1意味着我可以在glsl着色器中使用bool。4.1.2并不能真正帮助我。还没有回答的是,我是否可以使用glUniform1i设置布尔统一…@JanRüegg还为此添加了一个引号