Opengl ES 2.0 Vertex - 哪种方式更有效?

时间:2014-09-10 11:25:41

标签: opengl-es opengl-es-2.0

我有两种方法可以将两个变量发送到我的顶点:

A,使用两个属性发送两个变量。

B,将两个变量合二为一,例如' Mix = Var1 * 100 + Var2',只发送一个属性' Mix'到我的顶点。在顶点代码中,我使用一些计算来表示' Var1'和' Var2'。

我不知道哪种方式更有效(花更少的时间画画)。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果这是一个非常奇怪的原因的瓶颈,你可以通过一些大量的迭代来分析这两种方法,看看它们之间的区别。您应该知道,即使在获得此结果后,您也应该考虑在不同的设备上进行相同的测试,因为输出可能会因GPU的不同而发生变化。

如果您确实选择使用B方法,则应该输入一个整数值,而不是将其乘以除以100,尝试使用按位运算,如Var1<<16 + Var2中的32位整数。这意味着一个值将占用前16位,另一个值占第二个16位,这些操作非常快。

既然你问了这个问题,它就表明这个操作不是你的瓶颈而且永远不会,你只是在问,因为你希望你的代码很快。如果这是真的,那么不要打扰这个算法的速度性能,而是问问自己你的代码将如何更易于维护。 A方法似乎更直接,将使代码可读和可维护,所以我会选择那个。此外,如果您在某些时候决定这些值将变得太大而不能打包2合1,那么将代码从B转换为A会有相当大的问题;如果您使用A并且最后想要额外的性能增益(假设B在某种程度上更快),您真正需要做的就是编写这两行算法并注释额外的属性。因此,从这个角度来看,你应该选择A.