Iphone glDrawElements与glDrawArray效率

Iphone glDrawElements与glDrawArray效率,iphone,android,opengl-es,Iphone,Android,Opengl Es,我正在为iOS和Android制作一个游戏。 我在很多地方看到,使用索引绘制比仅绘制三角形数组更有效 问题是,我使用的是有损压缩顶点(如md2的文件格式),它所需的时间不只是索引本身- 数组:N*3(xyz)*1(uchar)+平移(12字节)+缩放(12字节)。 元素:N*3(xyz)*4(uint)+数组/~10 看起来数组比索引和压缩元素更好,尽管苹果的OpenGL profiler工具说我应该使用GLDraweElements OpenGL实现是否更喜欢索引数组?或者是因为索引数组包含的

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

问题是,我使用的是有损压缩顶点(如md2的文件格式),它所需的时间不只是索引本身- 数组:N*3(xyz)*1(uchar)+平移(12字节)+缩放(12字节)。 元素:N*3(xyz)*4(uint)+数组/~10

看起来数组比索引和压缩元素更好,尽管苹果的OpenGL profiler工具说我应该使用GLDraweElements

OpenGL实现是否更喜欢索引数组?或者是因为索引数组包含的数据少于常规未压缩数组

p、 美国。 我使用的是OpenGL es 2.0,顶点着色器是对顶点进行解压缩的工具。

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

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


您必须进行实验。

您使用的是顶点数组还是顶点缓冲区对象?如果您使用的是顶点数组,那么您可能需要考虑查看<代码> GDReRangangeEngs>代码>而不是<代码> GLD。p> 除非所有多边形都有不同的顶点(不太可能),
glDrawElements
将比
glDrawArray
快,因为
glDrawElements
将利用重复顶点将加载到gpu缓存的事实,对于该顶点所属的每个多边形,不必加载多次。但是,使用
glDrawArray
,它将在数组中迭代,无法关联相似的顶点,因此必须多次加载它们

然而,这取决于你的具体情况。尝试使用探查器,或者使用这些方法中的每一种获取帧率。在它们之间切换应该不会太难。如果一个明显更好,就用那个。如果两者都不是很好,那么这可能没什么大不了的

记住,过早优化是万恶之源。祝你好运!:)