bool condition opengl es 2.0着色器

时间:2013-09-14 08:09:03

标签: opengl-es-2.0 shader

因为建议不要在着色器中使用条件,这对于布尔均匀更好:

一个。为布尔制服的不同值创建不同的着色器?

B中。创建一个着色器,只需在代码中使用if-else,如下所示:

uniform bool uValue;
if (uValue) {
// code
} else {
// code
}

我已经读过某个地方,对于统一的bool值,驱动程序将编译多个着色器,这样我们就不必费心创建多个着色器了。但我无法证实这一点。

谢谢!

2 个答案:

答案 0 :(得分:2)

哪种方法更具性能取决于许多其他方面:

  • 您开启了多少条件?
  • 您每帧切换多少次?
  • 条件的任何一方发生了多少计算?
  • 您的情况有哪些其他性能限制?内存使用情况?能量消耗?客户端到GPU的带宽?

尝试这两个选项并使用Instruments进行测试,以确定哪种选择在您的情况下表现更好。

答案 1 :(得分:0)

我们都知道驱动程序在GPU编程中变化很快。

如果您的情况相当均衡,那么可能没有明确的正确或错误答案。它取决于硬件,驱动程序的版本以及卡本身用于创建并行批处理的未来机制。

如果你的条件更单面,那么在一个着色器中使用if条件,或者使用两个着色器和切换可能会有一个真正的好处。在处理真实数据时测试显卡上的负载是真正回答这个问题的唯一方法。

如果这被确定为您的瓶颈点并且值得投入时间,那么可能包括两者,并在运行时选择。但请记住,优化代码没有意义,如果它不会使您的着色器更快。如果您的代码提供了所有请求的可视功能,并且您仍受处理器限制,那么您已完成了自己的工作。

同样优化if语句,当你获取绑定时,没有任何意义。因此,请保留所有优化,直到您获得尽可能多的可视化功能,然后进行优化,这可能会为您提供更多功能,然后再次进行优化。