diff options
author | Mathias Agopian <mathias@google.com> | 2010-06-10 17:12:42 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-06-10 17:12:42 -0700 |
commit | 9d8e8dcc84fd9895d5b1cc49595b1715470ac05b (patch) | |
tree | b128399ce04e2c1ecb123cd4cb6f5e5a69d59d54 | |
parent | 4001120e456e51dd498c6647460dd97d946dc816 (diff) | |
parent | 8b73ae4a1e5321753e54354e5202a38c5560fea9 (diff) | |
download | frameworks_base-9d8e8dcc84fd9895d5b1cc49595b1715470ac05b.zip frameworks_base-9d8e8dcc84fd9895d5b1cc49595b1715470ac05b.tar.gz frameworks_base-9d8e8dcc84fd9895d5b1cc49595b1715470ac05b.tar.bz2 |
Merge "fix [2757903] Crash in EGL when creating an EGLSurface" into kraken
-rw-r--r-- | core/jni/android_view_Surface.cpp | 7 | ||||
-rw-r--r-- | 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 <ui/Region.h> #include <ui/Rect.h> +#include <EGL/egl.h> + #include <SkCanvas.h> #include <SkBitmap.h> #include <SkRegion.h> @@ -177,6 +179,11 @@ static sp<Surface> 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) { 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; |