2011-11-20 72 views
1

我是新來的android編程,我試圖創建一個相對較大的2D遊戲。我必須在遊戲中使用大量圖像和對象,所以我決定使用OpenGL ES。我有幾個紋理圖集,因爲透明度,它們都保存爲PNG的。我也知道,但我不知道爲什麼,我必須使用圖像,其高度和寬度是兩倍。我在運行Android 2.3.3的舊版HTC Hero上測試我的遊戲。當我的照片地圖集每個都是512x512時,我的遊戲的幀速率在50到60 fps之間。當我使用1024x1024不透明PNG時,沒有問題--FPS再次在50到60幀/秒之間。但是,當我決定使用一個1024x1024 transperent PNG的我的幀速率下降到4,5 fps。這可能是與我用於測試的設備的使用年限有關的問題嗎?這是我使用的每個循環繪製批次OpenGL函數:使用大型透明圖片作爲紋理地圖集

gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glEnable(GL10.GL_BLEND); 
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

    //drawing happens here 

    gl.glDisable(GL10.GL_BLEND); 

感謝提前:)

回答

0

我想你看到的是你的紋理變大,以保持在VRAM接近GPU,因此它必須從普通的RAM中取出並在每一幀中通過總線發送。從您發佈的數字中,最大可用量爲1 MB(RGB565的1024x1024數爲8xpp),因此您應該保持在低於此數的水平。您可能切換到RGBA4444而不會看到性能下降。或者如果您需要8位顏色和透明度的最大尺寸,則可以使用512x1024x16bpp(RGBA8888)。

PS。如果您在開始使用與VBx8bpp結合使用的VBOs時也看到下降,我不會感到驚訝,因爲它們也駐留在有限的RAM中。

+0

非常感謝,我測試了它,並且在使用1024x512 PNG時幀速率沒有下降,效果真的很好,這足夠了,因爲我需要紋理圖集的兩倍。 – mjekov