【问题标题】:my first shader in WebGL我在 WebGL 中的第一个着色器
【发布时间】:2011-03-22 02:25:10
【问题描述】:

我正在用 WebGL 编写我的第一个着色器。我想知道 GLSL 语言是否有任何方法来评估属性或制服是否为空。根据规范,它不支持做类似的事情

if (attributeX) {
dothis();
}  
else{ 
dothat():
}

而且我认为为每种情况编写一个 bool 属性是一种浪费。

另一个问题:如果不将制服或属性传递给着色器,在渲染过程中会发生什么?

谢谢!

【问题讨论】:

    标签: opengl-es glsl webgl


    【解决方案1】:

    GLSL 没有 null 的概念,在这种情况下使用 bool 统一就可以了。

    如果你不通过制服,它们会被零初始化,对于属性,我认为你会从中得到垃圾。

    【讨论】:

    • 不,你不会得到垃圾。得到属性的常量值(可以用glVertexAttribopengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml设置)
    • 对,如果你不设置它,你会得到默认的零初始化,但是,我仍然看到实现崩溃或产生垃圾。
    【解决方案2】:

    另一种选择是拥有多个着色器并根据情况使用它们。这里的目标是消除着色器中的 if 语句,从而提高它们的效率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多