2011-07-13 137 views
5

我正在为iOS和Android制作游戏。 我在很多地方看到使用索引绘制比绘制三角形数组更有效。glDrawElements vs glDrawArray效率

事情是,我使用有损压缩顶点(如md2的文件格式),它只需要少于仅索引 - 数组:N * 3(xyz)* 1(uchar)+ translate(12字节)+比例(12字节)。这个数组看起来像这个数组是比索引和压缩元素更好的选择,尽管苹果的OpenGL profiler工具说我应该使用这个数组来处理这个数组。 glDrawElements ..

OpenGL实现是否偏向索引数组?或者这是因为索引数组比常规未压缩数组包含的数据少?

p.s. 我使用OpenGL es 2.0,顶点着色器是解压顶点的人。

回答

1

使用glDrawElements()将节省大量的内存,您可以按任意顺序指定数组元素。

但是,使用glDrawArrays(),唯一的选择是在列表中顺序迭代。

必须实验。

3

您正在使用顶点数组还是顶点缓冲区对象?如果您使用顶点阵列,那么您可能需要考虑查看glDrawRangeElements而不是glDrawElements

除非你所有的多边形都有不同的顶点(不可思议的事),glDrawElements将快于glDrawArray因为glDrawElements将利用反复顶点将被加载到GPU缓存的事实,并且不会有被加载更多对于该顶点所属的每个多边形来说,都是一次。但是,在glDrawArray中,它将遍历数组,并且无法关联类似的顶点,所以它将不得不多次加载它们。

但是,它总是取决于你的具体情况。尝试使用分析器或使用这些方法中的每一种获取帧率。切换它们不应该太难。如果一个人明显更好,那就用那个。如果两者都不是很好,那么它可能无关紧要。请记住,不成熟的优化是一切罪恶的根源。祝你好运! :)