Android OpenGL缓冲和glFlush

Android OpenGL缓冲和glFlush,android,opengl-es,Android,Opengl Es,所以我正在制作一个使用GLSurfaceView的Android 2.2应用程序。我的问题是,由于OpenGL倾向于缓冲命令,这是否意味着它需要相关的内存(例如,调用glTexSubImage2D()时的位图)才能保留,直到完成为止?或者它本身是缓冲命令所需内存的副本吗 我这样问是因为这段代码往往会在硬件(HTC Desrire)上(而不是在模拟器上)导致长时间的暂停和最终的崩溃: //bm is a Bitmap stored in a vector from previous command

所以我正在制作一个使用GLSurfaceView的Android 2.2应用程序。我的问题是,由于OpenGL倾向于缓冲命令,这是否意味着它需要相关的内存(例如,调用glTexSubImage2D()时的位图)才能保留,直到完成为止?或者它本身是缓冲命令所需内存的副本吗

我这样问是因为这段代码往往会在硬件(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():


看起来效果不错。这是glFlush/glFinish的一个实际功能,可以防止内存从OpenGL下面被清除吗?

好问题。顺便提一下,对于纹理和顶点缓冲区对象,一旦调用了实际加载纹理图像数据的方法,就不需要保留客户端内存中的缓冲区/数组


不要将渲染缓冲区与纹理关联的内存弄错。纹理图形保存在GPU的内存中,它们不是刷新以最终绘制的缓冲区的一部分。

我确实找到了实际问题所在,它与某些java文件读取函数的工作方式不符合我的预期有关。我无意中使用了一个以n字节为单位读取的函数,但如果被中断,它可能会提前返回(这是我没有预料到的)。当我转而使用RandomAccessFile.read()时,它解决了这个问题。对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();