Aufbauend auf Fadden Antwort und Andreimarinescu Frage, hier ist eine Version für API 16 und unter:
private void clearSurface(Surface surface) {
EGL10 egl = (EGL10) EGLContext.getEGL();
EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
egl.eglInitialize(display, null);
int[] attribList = {
EGL10.EGL_RED_SIZE, 8,
EGL10.EGL_GREEN_SIZE, 8,
EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_ALPHA_SIZE, 8,
EGL10.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,
EGL10.EGL_NONE, 0, // placeholder for recordable [@-3]
EGL10.EGL_NONE
};
EGLConfig[] configs = new EGLConfig[1];
int[] numConfigs = new int[1];
egl.eglChooseConfig(display, attribList, configs, configs.length, numConfigs);
EGLConfig config = configs[0];
EGLContext context = egl.eglCreateContext(display, config, EGL10.EGL_NO_CONTEXT, new int[]{
EGL14.EGL_CONTEXT_CLIENT_VERSION, 2,
EGL10.EGL_NONE
});
EGLSurface eglSurface = egl.eglCreateWindowSurface(display, config, surface,
new int[]{
EGL14.EGL_NONE
});
egl.eglMakeCurrent(display, eglSurface, eglSurface, context);
GLES20.glClearColor(0, 0, 0, 1);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
egl.eglSwapBuffers(display, eglSurface);
egl.eglDestroySurface(display, eglSurface);
egl.eglMakeCurrent(display, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE,
EGL10.EGL_NO_CONTEXT);
egl.eglDestroyContext(display, context);
egl.eglTerminate(display);
}
recht grob, fehlt Fehlerprüfung, aber es funktioniert für mich.
Ich habe bereits versucht und bekomme die folgende Ausnahme: ** 09-04 20: 28: 34.164: A/libc (545): Fatal Signal 11 (SIGSEGV) bei 0x5cd14000 (Code = 1), Thread 545 () ** und die Anwendung stürzt ab. –
Veröffentlichen Sie die gesamte Stack-Trace und Logs von Logcat. Versuchen Sie auch, MediaPlayer.stop() und MediaPlayer.reset()/MediaPlayer.release() aufzurufen, da ich mich an einen der Funktionen erinnere, die einen klaren schwarzen Bildschirm verursachen. Ich bin sicher. – dasar
Nein, keiner von ihnen funktionierte in meinem Fall. Ich habe versucht, Video auf Android 4.3 Gerät zu spielen. – Yeung