diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 06fa84b13e352..cef5c107ec86d 100644 --- a/core/jni/android_view_Surface.cpp +++ b/core/jni/android_view_Surface.cpp @@ -25,6 +25,8 @@ #include #include +#include + #include #include #include @@ -177,6 +179,11 @@ static sp getSurface(JNIEnv* env, jobject clazz) return result; } +EGLNativeWindowType android_Surface_getEGLNativeWindow( + JNIEnv* env, jobject clazz) { + return getSurface(env, clazz).get(); +} + static void setSurface(JNIEnv* env, jobject clazz, const sp& surface) { Surface* const p = (Surface*)env->GetIntField(clazz, so.surface); diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp index 01a15047091af..d5cde48b85382 100644 --- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp +++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp @@ -27,6 +27,9 @@ namespace android { +extern EGLNativeWindowType android_Surface_getEGLNativeWindow( + JNIEnv* env, jobject clazz); + static jclass gDisplay_class; static jclass gContext_class; static jclass gSurface_class; @@ -95,9 +98,6 @@ static void nativeClassInit(JNIEnv *_env, jclass eglImplClass) gSurface_NativePixelRefFieldID = _env->GetFieldID(gSurface_class, "mNativePixelRef", "I"); gConfig_EGLConfigFieldID = _env->GetFieldID(gConfig_class, "mEGLConfig", "I"); - jclass surface_class = _env->FindClass("android/view/Surface"); - gSurface_SurfaceFieldID = _env->GetFieldID(surface_class, ANDROID_VIEW_SURFACE_JNI_ID, "I"); - jclass bitmap_class = _env->FindClass("android/graphics/Bitmap"); gBitmap_NativeBitmapFieldID = _env->GetFieldID(bitmap_class, "mNativeBitmap", "I"); } @@ -325,14 +325,15 @@ static jint jni_eglCreateWindowSurface(JNIEnv *_env, jobject _this, jobject disp } EGLDisplay dpy = getDisplay(_env, display); EGLContext cnf = getConfig(_env, config); - Surface* window = 0; + EGLNativeWindowType window = 0; if (native_window == NULL) { not_valid_surface: doThrow(_env, "java/lang/IllegalArgumentException", "Make sure the SurfaceView or associated SurfaceHolder has a valid Surface"); return 0; } - window = (Surface*)_env->GetIntField(native_window, gSurface_SurfaceFieldID); + + window = android_Surface_getEGLNativeWindow(_env, native_window); if (window == NULL) goto not_valid_surface;