2011-06-02 43 views
2

所以我正在製作一個使用GLSurfaceView的Android 2.2應用程序。我的問題是,由於OpenGL傾向於緩衝命令,這是否意味着它需要相關聯的內存(例如,在調用glTexSubImage2D()的位圖中)來堅持,直到完成爲止?還是它自己成爲緩衝命令所需的任何內存的副本?Android OpenGL緩衝和glFlush

我問,因爲這代碼往往會出現長時間的停轉和硬件的最終崩潰(HTC Desrire),但不是在模擬器上:

//bm is a Bitmap stored in a vector from previous commands 
//pt is a Point stored at the same time 
GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, pt.x, pt.y, bm); 
bm.recycle(); 

現在,如果我添加glFlush()像這樣:

//bm is a Bitmap stored in a vector from previous commands 
//pt is a Point stored at the same time 
GLUtils.texSubImage2D(GL10.GL_TEXTURE_2D, 0, pt.x, pt.y, bm); 
**AGL.glFlush();** //or glFinish 
bm.recycle(); 

它似乎很好。現在這是glFlush/glFinish的一個實際功能,爲了防止內存從OpenGL下面被清除掉?

回答

2

好問題。順便提及紋理和頂點緩衝區對象,一旦調用了實際加載紋理圖像數據的方法,就不需要保存客戶端內存中的緩衝區/數組。

不要將渲染緩衝區與與紋理關聯的內存錯誤。紋理圖形保存在GPU的內存中,它們不是正在刷新以便最終繪製的緩衝區的一部分。

+0

我弄清楚了實際的問題是什麼,它涉及到某些Java文件讀取功能不像我預期的那樣工作。我無意中使用了一個以n字節讀取的函數,但如果中斷(我沒有想到),可能會提前返回。當我切換到使用RandomAccessFile.read()時,它解決了問題。對glFlush的調用很可能會延長線程的時間,以防止文件讀取中斷。 – Brett 2011-08-22 15:25:01