From 8b73ae4a1e5321753e54354e5202a38c5560fea9 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Thu, 10 Jun 2010 17:02:51 -0700 Subject: fix [2757903] Crash in EGL when creating an EGLSurface Change-Id: I995947ac40d1a5c86dce495550baf6864ecf5f54 --- core/jni/android_view_Surface.cpp | 7 +++++++ core/jni/com_google_android_gles_jni_EGLImpl.cpp | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/core/jni/android_view_Surface.cpp b/core/jni/android_view_Surface.cpp index 06fa84b..cef5c10 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 01a1504..d5cde48 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; -- cgit v1.1