2010-04-20 67 views
4

我需要在OpenGL ES中显示480 x 320背景图像。事情是,当我使用512 x 512纹理尺寸时,我经历了iPhone的减速。所以我找到了在OpenGL ES中渲染iPhone分辨率大小背景的最佳案例。在这种情况下,我应该如何分割背景以获得最佳性能?我主要关心的是速度。我应该在这里使用256 x 256或其他纹理尺寸吗?以iPhone OpenGL ES纹理渲染480 x 320背景的最快方法

回答

7

首先,您是否在模拟器上测试性能?如果是这样,立即停止并尝试在实际的硬件上。 模拟器上的性能测试毫无价值。

有了这样的方式,我不知道你有多少的这些已经实施,所以我道歉,如果我给你什么你已经知道:

  • 如果”重新绘制全屏不透明的背景每一帧,你可能不需要GL_CLEAR呼叫
    • gmaclachlan指出你应该明确每个运行性能方面的原因缓冲区,但是这是违背其他一些用户体验。这可能在硬件和iOS版本之间有所不同;然而,性能可以通过评论该行来进行测试。检查前后。
    • 如果您在使用Z轴在所有(即:在一个2D的背景,认为3D对象新超级马里奥兄弟)你将要清除深度缓存
  • 使用纹理压缩( PVRTC)如果压缩文物是不是 问题,它的硬件加速
  • 使用16位纹理背景,如果你不能使用PVRTC
  • 确保您没有试图深度测试/α-如果下面没有任何东西,请将背景混合起来
  • 如果你正在使用 固定功能

    int rect[4] = {0, 0, 480, 320};
    glBindTexture(GL_TEXTURE_2D, texBackground);
    glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
    glDrawTexiOES(0, 0, z, 480, 320);

除此之外

使用OES_Draw_Texture扩展,尝试抓住你的代码的只是部分,只是看如何许多背景每秒它能够吐出。

+1

只需要注意:在这个硬件上使用glClear()函数始终是一个好主意(即使您要完全覆盖整个帧) - 这意味着驱动程序无需知道信息与前一帧保持一致,并保存所有涉及的工作。 – gmaclachlan 2010-09-22 10:15:53

+0

为什么它会保存任何内容,除非你指定kEAGLDrawablePropertyRetainedBacking = YES?我试着使用仪器测试(在硬件上),发现使用glClear比没有使用更多的利用率。 – v01d 2010-11-15 05:59:00

+0

@gmaclachlan,@ v01d:你使用的是哪些iOS版本和硬件?我用原始iPhone(最低公分母)和3.0.0的目标平台达到了我的GL_CLEAR结论。由于glClear行很简单,可以评论/取消评论,所以值得用两种方法来测试它是否有效。另外还增加了一些关于3D-2D的内容,以及如果需要清除深度的要求。 – 2010-11-16 20:21:55