diff options
author | Danny Baumann <dannybaumann@web.de> | 2013-06-18 23:54:24 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2013-06-18 23:54:24 -0700 |
commit | 4d0af804084cf06ce172b4075c7b7af414aea73e (patch) | |
tree | 849990178a605efe532086513f2b4be53dd68c4a /packages/SystemUI/src | |
parent | 73119894cdfd0c466ecae081f73d64f78dc7fbf1 (diff) | |
parent | 9422fde8a23e9d3e9df4872026bfbafb4b2d3d14 (diff) | |
download | frameworks_base-4d0af804084cf06ce172b4075c7b7af414aea73e.zip frameworks_base-4d0af804084cf06ce172b4075c7b7af414aea73e.tar.gz frameworks_base-4d0af804084cf06ce172b4075c7b7af414aea73e.tar.bz2 |
Merge "Check and fail early if requested wallpaper size exceeds maximum texture size." into cm-10.1
Diffstat (limited to 'packages/SystemUI/src')
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/ImageWallpaper.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java index 9da883a..8d0fe75 100644 --- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java @@ -378,6 +378,7 @@ public class ImageWallpaper extends WallpaperService { if (DEBUG) { Log.d(TAG, "Redrawing wallpaper"); } + if (mIsHwAccelerated) { if (!drawWallpaperWithOpenGL(sh, availw, availh, xPixels, yPixels)) { drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels); @@ -640,13 +641,26 @@ public class ImageWallpaper extends WallpaperService { } mEglContext = createContext(mEgl, mEglDisplay, mEglConfig); + + int[] maxSize = new int[1]; + Rect frame = surfaceHolder.getSurfaceFrame(); + glGetIntegerv(GL_MAX_TEXTURE_SIZE, maxSize, 0); + if(frame.width() > maxSize[0] || frame.height() > maxSize[0]) { + mEgl.eglDestroyContext(mEglDisplay, mEglContext); + mEgl.eglTerminate(mEglDisplay); + Log.e(GL_LOG_TAG, "requested texture size " + + frame.width() + "x" + frame.height() + " exceeds the support maximum of " + + maxSize[0] + "x" + maxSize[0]); + return false; + } mEglSurface = mEgl.eglCreateWindowSurface(mEglDisplay, mEglConfig, surfaceHolder, null); if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) { int error = mEgl.eglGetError(); - if (error == EGL_BAD_NATIVE_WINDOW) { - Log.e(GL_LOG_TAG, "createWindowSurface returned EGL_BAD_NATIVE_WINDOW."); + if (error == EGL_BAD_NATIVE_WINDOW || error == EGL_BAD_ALLOC) { + Log.e(GL_LOG_TAG, "createWindowSurface returned " + + GLUtils.getEGLErrorString(error) + "."); return false; } throw new RuntimeException("createWindowSurface failed " + |