Merge "Better fix for GL wallpaper creation" into jb-mr2-dev

This commit is contained in:
Chet Haase
2013-03-14 17:34:54 +00:00
committed by Android (Google) Code Review

View File

@@ -632,6 +632,30 @@ public class ImageWallpaper extends WallpaperService {
GLUtils.getEGLErrorString(mEgl.eglGetError()));
}
int attribs[] = {
EGL_WIDTH, 1,
EGL_HEIGHT, 1,
EGL_NONE
};
EGLSurface tmpSurface = mEgl.eglCreatePbufferSurface(mEglDisplay, mEglConfig, attribs);
mEgl.eglMakeCurrent(mEglDisplay, tmpSurface, tmpSurface, mEglContext);
int[] maxSize = new int[1];
Rect frame = surfaceHolder.getSurfaceFrame();
glGetIntegerv(GL_MAX_TEXTURE_SIZE, maxSize, 0);
mEgl.eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
mEgl.eglDestroySurface(mEglDisplay, tmpSurface);
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();
@@ -649,20 +673,6 @@ public class ImageWallpaper extends WallpaperService {
GLUtils.getEGLErrorString(mEgl.eglGetError()));
}
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.eglDestroySurface(mEglDisplay, mEglSurface);
mEgl.eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
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;
}
return true;
}