2011-08-07 101 views
1

我正在測試Android手機上的OpenGL性能(確切地說是HTC Wildfire),並且我遇到了一件奇怪的事情 - 當我嘗試繪製紋理索引矩形的大小屏幕(320 x 480),我可以獲得高達40 fps的幀率! - 只有當我使用32x32紋理時。glDrawElements在Android上極其緩慢(HTC Wildfire)

如果我將紋理大小增加到256x256,性能下降到35幀。

我的問題是,如何讓所有Android遊戲運行平穩,並且仍然充滿酷炫的圖形。

回答

5

有許多不同的方法可以提高設備的性能。

  1. 請確保您沒有進行混合,或繪製,你不需要和經驗,很多低端宏達設備(如慾望)是填充率限制。
  2. 使用三角形條代替三角形。
  3. 使用繪圖元素並緩存您的調用,例如加載您的頂點緩衝區併爲一個框架調用多次繪製。

但最重要的使用DDMS與方法分析,以確定你的瓶頸實際上是他們可能是地方,你不要指望他們如伐木,GC,運行速度慢的循環。您將能夠看到多少時間是由渲染引起的,其他操作有多少。 (尋找GLImpl.glDrawElements)

我最大的人用GC中往往踢(每秒5次,造成我的FPS是非常緩慢),你的東西將MEM的分配往往在地方看你會不會甚至想到。例如,如果您使用+運算符將字符串連接到浮點數,或者使用傳統的java get()函數遍歷或(最差)集合,則會創建大量可觸發GC的對象。

另外,如果你有昂貴的操作將它們分離出來,分成一個單獨的線程。

此外,我假設你正在創建你的紋理一次,每次使用相同的索引。我看過一些教程,每次渲染幀時都會創建紋理。

隨着DDMS的廣泛使用,我可以在HTC Desire上以12到50的fps爲繁忙的場景。

希望得到您在正確的方向去:)

+0

就像我提到的,我測試的性能 - 所以我使用加載並綁定到設備只有一次只是一個紋理多數民衆贊成,然後我只是使用GL10.GL_TRIANGLES調用繪製兩個索引三角形 - 僅此而已。事情是那兩個三角形掩蓋了整個屏幕。因此,讓我擔心的是,只是有點高歌紋理屏幕的尺寸到後臺緩衝區要花很多 –

+0

嗨帕克薩斯我目前使用幾十128x128的紋理與AI,碰撞檢測和事一堆其他的東西,我在HTC的願望中能夠達到40-50fps。我的渲染時間的80%目前用於繪製菜單和調試信息,這是在用自定義字符串處理程序大量優化所有GC操作之後(My DrawNumber函數僅需31%)。如果您發佈了代碼,我們可以看看它,但我仍然強烈建議使用Method分析器和分配跟蹤器來查看您的應用程序在渲染前是否在等待。 – Kactus

+0

實際上直接比較設備,從Android商店免費運行Smartbench 2011,並比較值。慾望得到1134的CPU和546的圖形。這應該給我們在設備之間的相對規模。 – Kactus

0

以我自己的經驗,他們不會像野火這樣的設備。