【问题标题】:Boolean uniform in OpenTKOpenTK 中的布尔统一
【发布时间】:2014-07-25 13:57:04
【问题描述】:

如何通过 OpenTK 将 bool 值传递给着色器? 我还没有看到 Uniform1 这样的过载。我的目的是如何使用浮点变量而不是检查类似

if (floatValue > 0.5) {}

但这看起来不是很好的做事方式。 bool制服有什么想法吗?

【问题讨论】:

    标签: c# opengl opentk


    【解决方案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 节):

    为声明为布尔值、布尔向量、布尔数组或布尔向量数组的统一加载值时,Uniform*i{v}、Uniform*ui{v} 和 Uniform*f{ v} 一组命令可用于加载布尔值。类型转换由 GL 完成。如果输入值为 0 或 0.0f,uniform 设置为 FALSE,否则设置为 TRUE。

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2011-04-13
      • 2013-02-01
      相关资源
      最近更新 更多