mirror of
https://github.com/mollyim/webrtc.git
synced 2025-05-19 08:37:54 +01:00
Android: Add interface for getting native EGL context
This CL also implements support for getting the native context on EGL 1.4. It's a bit tricker to get the native handle for EGL 1.0 so it will be done in a separate CL. Bug: webrtc:8257 Change-Id: I269e75c357f19507098180077fa9d1b1ac4dce23 Reviewed-on: https://webrtc-review.googlesource.com/1880 Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Commit-Queue: Magnus Jedvert <magjed@webrtc.org> Cr-Commit-Position: refs/heads/master@{#19890}
This commit is contained in:
parent
6dc2038d0d
commit
aa568a64ed
3 changed files with 20 additions and 3 deletions
|
@ -21,7 +21,7 @@ import javax.microedition.khronos.egl.EGL10;
|
||||||
*/
|
*/
|
||||||
public abstract class EglBase {
|
public abstract class EglBase {
|
||||||
// EGL wrapper for an actual EGLContext.
|
// EGL wrapper for an actual EGLContext.
|
||||||
public static class Context {}
|
public interface Context { long getNativeEglContext(); }
|
||||||
|
|
||||||
// According to the documentation, EGL can be used from multiple threads at the same time if each
|
// According to the documentation, EGL can be used from multiple threads at the same time if each
|
||||||
// thread has its own EGLContext, but in practice it deadlocks on some devices when doing this.
|
// thread has its own EGLContext, but in practice it deadlocks on some devices when doing this.
|
||||||
|
|
|
@ -37,9 +37,18 @@ class EglBase10 extends EglBase {
|
||||||
private EGLSurface eglSurface = EGL10.EGL_NO_SURFACE;
|
private EGLSurface eglSurface = EGL10.EGL_NO_SURFACE;
|
||||||
|
|
||||||
// EGL wrapper for an actual EGLContext.
|
// EGL wrapper for an actual EGLContext.
|
||||||
public static class Context extends EglBase.Context {
|
public static class Context implements EglBase.Context {
|
||||||
private final EGLContext eglContext;
|
private final EGLContext eglContext;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getNativeEglContext() {
|
||||||
|
// TODO(magjed): Implement. There is no easy way of getting the native context for EGL 1.0. We
|
||||||
|
// need to make sure to have an EglSurface, then make the context current using that surface,
|
||||||
|
// and then call into JNI and call the native version of eglGetCurrentContext. Then we need to
|
||||||
|
// restore the state and return the native context.
|
||||||
|
throw new RuntimeException("getNativeEglContext is not implemented for EGL 1.0");
|
||||||
|
}
|
||||||
|
|
||||||
public Context(EGLContext eglContext) {
|
public Context(EGLContext eglContext) {
|
||||||
this.eglContext = eglContext;
|
this.eglContext = eglContext;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,9 +43,17 @@ class EglBase14 extends EglBase {
|
||||||
return (CURRENT_SDK_VERSION >= EGLExt_SDK_VERSION);
|
return (CURRENT_SDK_VERSION >= EGLExt_SDK_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Context extends EglBase.Context {
|
public static class Context implements EglBase.Context {
|
||||||
private final android.opengl.EGLContext egl14Context;
|
private final android.opengl.EGLContext egl14Context;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public long getNativeEglContext() {
|
||||||
|
return CURRENT_SDK_VERSION >= android.os.Build.VERSION_CODES.LOLLIPOP
|
||||||
|
? egl14Context.getNativeHandle()
|
||||||
|
: egl14Context.getHandle();
|
||||||
|
}
|
||||||
|
|
||||||
public Context(android.opengl.EGLContext eglContext) {
|
public Context(android.opengl.EGLContext eglContext) {
|
||||||
this.egl14Context = eglContext;
|
this.egl14Context = eglContext;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue