OpenTK中的布尔统一

时间:2014-07-25 13:57:04

标签: c# opengl opentk

如何通过OpenTK将bool值传递给着色器? 我没有看到Uniform1的这种超载。我的目的是如何使用float变量而不是检查

之类的东西
if (floatValue > 0.5) {}

但它看起来不是很好的做事方式。 bool统一的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以使用glUniform1i()glUniform1f()来设置bool制服。对于这两种情况,如果传递零,则统一值将设置为FALSE,否则将设置为TRUE。因此,要将制服设置为FALSE,请使用以下两者之一:

glUniform1i(0);
gUniform1f(0.0f);

要将其设置为TRUE,请使用以下任一项:

glUniform1i(1);
gUniform1f(1.0f);

任何其他非零值而不是11.0f也是合法的。我个人更喜欢值为01的整数版本,因为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。