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