我在寫一個特定的OpenGL應用程序,我特別喜歡逐幀繪製幀。爲此,我想禁用自動清除緩衝區,我明白,是GLSurfaceView.Renderer.onDrawFrame()的默認行爲。有人可以幫助我如何做到這一點?我需要用Java編寫應用程序,而不是使用本機SDK。在Android上使用OpenGL時自動清除緩衝區
我明白,我可能會因這樣做: - :
"EGL_SWAP_BEHAVIOR_PRESERVED_BIT are supported only if the EGL version is 1.4 or greater."
"EGL_SWAP_BEHAVIOR is supported only if the EGL version is 1.2 or greater."
現在,我明白,我可以訪問EGL -
(1) setting EGL_SWAP_BEHAVIOR_PRESERVED_BIT bit for EGL_SURFACE_TYPE attribute while doing [eglChooseConfig][1](), and
(2) setting EGL_SWAP_BEHAVIOR attribute to EGL_BUFFER_PRESERVED by calling [eglSurfaceAttrib][2] on the EGLSurface object
但是,我從Khronos的文件,讓收集兩種方式在我的Android應用程序: -
(1) use the Khronos API class [EGL10][3] in javax.microedition.khronos.egl package (EGL11 doesn't seem to be implemented yet)
(2) use the Android API class [EGL14][4] in android.opengl package (similar to using class android.opengl.GLES20)
的問題(1),該版本是< 1.4因此它不支持我需要的功能。 (2)的問題是,我的應用程序簡單地崩潰的時候,我打電話EGL14的任何方法,我不知道我應該如何使用它(我找不到一個示例程序/教程如何EGL14應該用於應用程序)。特別是,我想學習如何從EGL14中獲得有效的GL上下文:對於EGL10,我可以通過調用javax.microedition.khronos.egl.EGLContext.getGL()來實現。但是,我沒有在類android.opengl.EGLContext中看到等價的方法。實際上,除了EGL14之外,android.opengl中所有與EGL相關的類似乎都是空的。
我最好的選擇是跟隨推理的同一行中GLES20的情況:只能撥打內部GLSurfaceView.Renderer方法的方法:onDrawFrame(),onSurfaceCreated(),onSurfaceChanged(),因爲這些供應有效GL (GL10)和EGL(EGLConfig)上下文作爲參數。所以我把下面的內部onDrawFrame代碼(): -
public void onDrawFrame(GL10 gl)
{
...
android.opengl.EGLDisplay d = null;
if ((d = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY)) == EGL14.EGL_NO_DISPLAY) {
Log.i("Triangle", "EGL14.eglGetDisplay() failed!");
} else {
Log.i("Triangle", "EGL14.eglGetDisplay() succeeded!");
}
...
}
我相信我不會有調用上面,因爲所有的方法都是靜態的前實例EGL14。但是,對EGL14.eglGetDisplay()的調用會導致應用程序崩潰。
任何幫助將不勝感激,謝謝:)
您好,我面臨着同樣的問題,我剛剛發現我的問題是調用「glColorMask」 ,刪除我對這個方法的調用後,一切都解決了。可能你的問題的原因是不同的,但以防萬一它幫助我讓你提示。 – PerracoLabs 2013-08-04 12:52:55