OpenGL ES - 巨大的地图,最佳实践

时间:2010-01-13 17:23:35

标签: iphone android opengl-es

如果我想渲染一张巨大的地图,将OpenGL ES与移动设备(基于Android或iPhone)一起使用时的最佳做法是什么?

包含所有顶点,normales和纹理坐标的最佳结构是什么?

我想使用交错结构可能会为您带来内存缓存带来的一些性能优势。 OK?

我应该使用drawArrays还是drawElements将我的数据推送到OpenGL ES?

好吧,我根本没有进行任何测试,但我可能认为,如果GFX不使用共享内存,那么drawElements可能会更快,因为你不必推送那么多数据。由于这非常接近金属,你怎么看? (iPhone是基于ARM的,而Android平台是基于Qualcomm的(也是ARM?))

致以最诚挚的问候,

弗里德里希

2 个答案:

答案 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,因此状态更改将非常昂贵。