如何通过OpenTK将bool
值传递给着色器?
我没有看到Uniform1的这种超载。我的目的是如何使用float变量而不是检查
if (floatValue > 0.5) {}
但它看起来不是很好的做事方式。 bool
统一的任何想法?
答案 0 :(得分:1)
您可以使用glUniform1i()
或glUniform1f()
来设置bool
制服。对于这两种情况,如果传递零,则统一值将设置为FALSE
,否则将设置为TRUE
。因此,要将制服设置为FALSE
,请使用以下两者之一:
glUniform1i(0);
gUniform1f(0.0f);
要将其设置为TRUE
,请使用以下任一项:
glUniform1i(1);
gUniform1f(1.0f);
任何其他非零值而不是1
或1.0f
也是合法的。我个人更喜欢值为0
和1
的整数版本,因为int
类型与bool
更密切相关。
定义此行为的规范语言是(从OpenGL 3.3规范的第2.11.4节复制):
当加载声明为boolean的布朗值,布尔向量,布尔数组或布尔向量数组的值时,Uniform * i {v},Uniform * ui {v}和Uniform * f { v}命令集可用于加载布尔值。类型转换由GL完成。如果输入值为0或0.0f,则将uniform设置为FALSE,否则设置为TRUE。