summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Romain Guy <romainguy@android.com> 2013-02-26 23:05:44 -0800
committer Android Git Automerger <android-git-automerger@android.com> 2013-02-26 23:05:44 -0800
commitbf53be46d237866a9964a4f1fa960eb6ef4a70a6 (patch)
treee6b27d2a5ca11a64ecf692a1b562c13af17431a7
parent611bc6d44622de444eba350777f1a1ce5dd7359b (diff)
parent09353f747835c23d02df9e18ecdd6a7d1c91310c (diff)
am 09353f74: Merge "Check and fail early if requested wallpaper size exceeds maximum texture size."
* commit '09353f747835c23d02df9e18ecdd6a7d1c91310c': Check and fail early if requested wallpaper size exceeds maximum texture size.
-rw-r--r--packages/SystemUI/src/com/android/systemui/ImageWallpaper.java18
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 9da883a7f4c7..8d0fe75543c6 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 " +