【发布时间】:2014-07-25 13:57:04
【问题描述】:
如何通过 OpenTK 将 bool 值传递给着色器?
我还没有看到 Uniform1 这样的过载。我的目的是如何使用浮点变量而不是检查类似
if (floatValue > 0.5) {}
但这看起来不是很好的做事方式。 bool制服有什么想法吗?
【问题讨论】:
如何通过 OpenTK 将 bool 值传递给着色器?
我还没有看到 Uniform1 这样的过载。我的目的是如何使用浮点变量而不是检查类似
if (floatValue > 0.5) {}
但这看起来不是很好的做事方式。 bool制服有什么想法吗?
【问题讨论】:
您可以使用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 节):
为声明为布尔值、布尔向量、布尔数组或布尔向量数组的统一加载值时,Uniform*i{v}、Uniform*ui{v} 和 Uniform*f{ v} 一组命令可用于加载布尔值。类型转换由 GL 完成。如果输入值为 0 或 0.0f,uniform 设置为 FALSE,否则设置为 TRUE。
【讨论】: