如果我想渲染一张巨大的地图,将OpenGL ES与移动设备(基于Android或iPhone)一起使用时的最佳做法是什么?
包含所有顶点,normales和纹理坐标的最佳结构是什么?
我想使用交错结构可能会为您带来内存缓存带来的一些性能优势。 OK?
我应该使用drawArrays还是drawElements将我的数据推送到OpenGL ES?
好吧,我根本没有进行任何测试,但我可能认为,如果GFX不使用共享内存,那么drawElements可能会更快,因为你不必推送那么多数据。由于这非常接近金属,你怎么看? (iPhone是基于ARM的,而Android平台是基于Qualcomm的(也是ARM?))
致以最诚挚的问候,
弗里德里希
答案 0 :(得分:1)
理论上使用Vertex Buffer Objects应该会产生最好的结果。你已经说明了原因。
虽然我记得听过斯坦福大学关于iPhone开发的一个讲座,但是使用VBO并不比使用顶点指针产生更好的性能。然后,这个信息有点过时了。因此,在iPhone上使用VBO肯定不是一个坏主意。
直到Android 1.5,由glDrawElements触发的OpenGL实现中有memory leak。虽然我认为它现在已经修好了,但我有一段时间没有检查过。
这里有一些关于如何最好地使用VBO的Infos。
答案 1 :(得分:0)
我喜欢这个presentation中提出的方法。查看幻灯片26-32。
该演示文稿是特定于Android的,但也应该适用于iPhone。基本上,检查您的GL扩展,如果可以使用它们,可以使用顶点缓冲区对象。
请记住,您的目标架构(两种情况下都是ARM)可能不会有FPU,因此状态更改将非常昂贵。