2010-04-20 55 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