필자는 구체적으로 프레임을 점진적으로 그려야하는 특정 OpenGL 응용 프로그램을 작성하고 있습니다. 이를 위해 GLSurfaceView.Renderer.onDrawFrame()의 기본 동작 인 자동 버퍼 지우기 기능을 비활성화하고 싶습니다. 누군가가 나를 어떻게 도와 주실 수 있습니까? 네이티브 SDK를 사용하지 않고 Java로 응용 프로그램을 작성해야합니다.안드로이드에서 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
는 그러나, 나는 크로노스의 문서에서 수집 내 안드로이드 응용 프로그램에서 두 가지 방법 : -
(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 관련 클래스는 대부분 비어있는 것 같습니다.
가장 좋은 방법은 GLSurfaceView.Renderer 메서드 내에서만 메서드를 호출하는 것과 동일한 추론을 따르는 것이 었습니다. onDrawFrame(), onSurfaceCreated(), onSurfaceChanged() (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()를 호출하면 응용 프로그램이 충돌합니다.
어떤 도움이 많이 주시면 감사하겠습니다, 감사합니다 :) 대신 직접 EGL을 사용
안녕하세요, 저도 같은 문제에 직면하고 있었다 난 그냥 내 문제는 전화로 "glColorMask"것을 발견했습니다 ,이 메서드에 내 전화를 제거한 후 모든 것이 해결되었습니다. 아마 당신의 이슈의 원인은 다를 수 있습니다 만, 그게 도움이 될지 모르겠지만 나는 당신에게 힌트를 드리겠습니다. – PerracoLabs