通过统一变量实现多个着色器 - 单个程序或If-else条件?

时间:2013-05-09 12:51:36

标签: opengl-es shader

我想问一个关于OpenGL ES 2.x的简单问题(或者我认为它对大多数最近的OpenGL版本都有效)。

以下哪一项更快? :

  1. 根据我绘制的内容附加/分离多个着色器,
  2. 具有用于检查渲染模式的统一变量;因此,我将有一堆if-else条件(或者一个switch-case块)。我知道这对GPU内核没有好处;但是你可以假设我随后渲染了同一组基元;即我不经常从一种模式切换到另一种模式。
  3. 如果您可以解释每个解决方案的优缺点;真的很感激。第三种解决方案随时欢迎。

1 个答案:

答案 0 :(得分:0)

这实际上取决于要计算的数据量,无论何时碎片处理绑定以及更多东西。

根据经验,应尽可能避免改变状态,因为它们会触发管道冲洗。为了使思考更糟,改变制服也可能触发管道冲洗。如果您没有使用所有着色器吞吐量尝试使用该条件。

编辑:如果您重新排序数据以便只有少量状态更改,则可以更改着色器并允许输出更多片段。但同样,真的取决于你的瓶颈在哪里。

提示:测量。