我需要在 OpenGL ES 中显示 480 x 320 背景图像。问题是,当我在 iPhone 中使用 512 x 512 纹理尺寸时,速度有点慢。所以我正在寻找在 OpenGL ES 中渲染 iPhone 分辨率大小背景的最佳案例。在这种情况下,我应该如何分割背景以获得最佳性能?我主要关心的是速度。我应该选择 256 x 256 或其他纹理尺寸吗?
最佳答案
首先,您是否在模拟器上测试性能?如果是这样,请立即停止并在实际硬件上尝试。 模拟器上的性能测试毫无值(value)。
既然如此,我不确定您已经实现了多少这些,所以如果我向您提供您已经知道的内容,我深表歉意:
- 如果您每帧都绘制全屏不透明背景,则可能不需要
GL_CLEAR
调用- gmaclachlan 指出,出于性能原因,您应该在每次运行时清除缓冲区,但这与其他一些用户体验相反。这在硬件和 iOS 版本之间可能有所不同;然而,只需注释掉该行即可测试性能。检查之前和之后。
- 如果您完全使用 Z 轴(即:2D 背景上的 3D 对象,例如新 super 马里奥兄弟),您将需要清除深度缓冲区
- 如果压缩伪像不是纹理压缩,请使用纹理压缩 (PVRTC) 问题,它是硬件加速的
- 如果无法使用 PVRTC,请使用 16 位纹理作为背景
- 确保您不会尝试对背景进行深度测试/Alpha 混合(如果背景下面没有任何内容)
使用OES_Draw_Texture扩展名(如果您正在使用) 固定功能
int 矩形[4] = {0, 0, 480, 320};
glBindTexture(GL_TEXTURE_2D, texBackground);
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, 矩形);
glDrawTexiOES(0, 0, z, 480, 320);
除此之外,尝试抓取代码的那一段,看看它每秒能够吐出多少背景。
关于iphone - 将 480 x 320 背景渲染为 iPhone OpenGL ES 纹理的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2674196/