只需一次绘制调用,就可以在openGL for iPhone中绘制多个不同的纹理?

时间:2009-08-26 21:03:14

标签: iphone opengl

我有这种游戏,有各种各样的纹理。每当我绘制一个纹理时,我就会绑定它并绘制它。

可以在一次抽奖中画出我游戏的所有元素吗? ,使用Interleaved Arrays ...我该怎么做?

这样做可以提高我的游戏性能吗?

2 个答案:

答案 0 :(得分:3)

我相信你会受益于使用texture atlas,一个包含所有较小的纹理的巨大纹理。对于iPhone上的OpenGL ES,Apple recommends放置您可以在顶点缓冲区对象(VBO)中一次绘制的所有顶点,并在其中插入顶点,法线,颜色和纹理信息缓冲区(按此顺序)。请注意,与原始iPhone上的标准阵列相比,VBO本身并没有显着提升性能,但3GS支持硬件VBO。

通过将数据分组到VBO或数组中,当我减少绘制调用的数量时,我已经看到我的应用程序中的显着性能改进。

您可能希望查看的另一个方面是减小几何体的大小。通过从GLfloat到GLshort获取我的顶点和法线坐标数据,我发现iPhone 3G上的OpenGL ES渲染速度提高了30%以上。

答案 1 :(得分:1)

TBH你最好通过单独的平局调用来做这件事。表现不太可能受到明显影响。

“可能”有办法通过索引到体积纹理(或纹理数组)的切片来做到这一点,但你需要3GS这样做,它不适用于旧的iPhone。我也怀疑你通过这样做会有明显的性能提升。