我有大約500個vec4需要可用,但每個對象只有〜15個,並且爲了下一個要繪製的對象而將其更改爲其他15個其他對象,等等。Android openGl ES 2.0快速統一更改
起初我試圖在「統一的vec4行[500]」中存儲所有的數據,這在一些設備上運行良好,但是例如在Galaxy SII上,這會導致即時崩潰,並帶有outOfMemory異常。 比我想那些需要15複製爲每個對象的形式CPU端使用到GPU:
GLES20.glUniform4f(GLES20.glGetformLocation(programHandle, "lines["+i/4+"]"),
lines[i], lines[i+1], lines[i+2], lines[i+3]);
,因爲有相當一些物體被吸入這導致vec4的的很多傳遞到GPU,爲垃圾收集器每2秒調用一次。
「lines」是一個float [4 * lineCount],也許一個上傳整個float []的調用會更快&已經有更高的內存效率,有誰知道該怎麼做?
我相信UBO's會很適合這個問題,但是他們不能用在android上嗎?
有沒有人知道更好的解決方案呢?非常感謝!
GALAXY SII的用戶依賴於你^ _^
爲什麼不能只需使用屬性陣列? – Kimi 2013-02-18 16:14:13
這15個vec4的需要是相同的約1000個頂點繪製(一個部分圓)和超過15個新的vec4的未來1000個頂點,所以使用屬性數組將會更加昂貴我想,如果你認爲否則我會嘗試它這種方式,或者如果你知道一種方法來存儲500個vec4的一次在GPU內存,而不是部分地訪問他們,以放入一個很好的制服。 – 2013-02-18 17:35:44