iphone - glDrawElements vs glDrawArray 效率

标签 iphone android opengl-es

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

问题是我使用的是有损压缩顶点(就像 md2 的文件格式),它比单独使用索引要少 - 数组:N * 3 (xyz) * 1 (uchar) + translate (12 bytes) + scale (12 bytes)。 元素:N * 3 (xyz) * 4 (uint) + 数组/~10

数组似乎比索引和压缩元素更好,尽管苹果的 OpenGL 分析器工具说我应该使用 glDrawElements..

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

附注 我使用的是 OpenGL es 2.0,顶点着色器负责解压缩顶点。

最佳答案

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

除非你所有的多边形都有不同的顶点(不太可能),glDrawElements 将比 glDrawArray 更快,因为 glDrawElements 将利用事实上,重复的顶点将被加载到 gpu 缓存中,并且不必为该顶点所属的每个多边形加载多次。但是,对于 glDrawArray,它将遍历数组并且无法关联相似的顶点,因此必须多次加载它们。

但是,这始终取决于您的具体情况。尝试使用分析器或使用这些方法中的每一种来获取帧率。在它们之间切换应该不会太难。如果一个明显更好,就使用那个。如果两者都不是特别好,那么它可能无关紧要。

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

关于iphone - glDrawElements vs glDrawArray 效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6682771/

相关文章:

android - 如何偏移 GLSurfaceView 以适应状态栏?

ios - EAGLView : rotation doesn't change frame size

iphone - 如何使用 AFNetworking 上传多个文件

Android USB 触摸屏 HID 描述符问题

java - 从android按钮获取文本返回 ""

安卓原生 "undeclared (first use in this function)"

ios - OpenGL ES "imperfection"

iphone - 如何通过 iPhone 托管网站?

iphone - 我想翻转我的应用程序的启动画面 - 我如何模仿翻页动画,就像打开书的封面一样?

ios - 按 NSDate 作为内键对字典数组进行排序