Loading core/java/android/view/GLES20Canvas.java +7 −1 Original line number Diff line number Diff line Loading @@ -151,6 +151,12 @@ class GLES20Canvas extends Canvas { private native void nPrepare(int renderer); void onPostDraw() { nFinish(mRenderer); } private native void nFinish(int renderer); @Override public boolean acquireContext() { if (!mContextLocked) { Loading core/java/android/view/HardwareRenderer.java +14 −4 Original line number Diff line number Diff line Loading @@ -210,7 +210,7 @@ public abstract class HardwareRenderer { * is invoked and the requested flag is turned off. The error code is * also logged as a warning. */ void checkErrors() { void checkEglErrors() { if (isEnabled()) { int error = sEgl.eglGetError(); if (error != EGL10.EGL_SUCCESS) { Loading @@ -221,7 +221,7 @@ public abstract class HardwareRenderer { // we'll try again if it was context lost setRequested(false); } Log.w(LOG_TAG, "OpenGL error: " + error); Log.w(LOG_TAG, "EGL error: " + Integer.toHexString(error)); } } } Loading Loading @@ -348,7 +348,7 @@ public abstract class HardwareRenderer { void initializeIfNeeded(int width, int height, View.AttachInfo attachInfo, SurfaceHolder holder) { if (isRequested()) { checkErrors(); checkEglErrors(); super.initializeIfNeeded(width, height, attachInfo, holder); } } Loading Loading @@ -386,6 +386,9 @@ public abstract class HardwareRenderer { void onPreDraw() { } void onPostDraw() { } /** * Defines the EGL configuration for this renderer. The default configuration * is RGBX, no depth, no stencil. Loading Loading @@ -418,10 +421,12 @@ public abstract class HardwareRenderer { canvas.restoreToCount(saveCount); } onPostDraw(); attachInfo.mIgnoreDirtyState = false; sEgl.eglSwapBuffers(sEglDisplay, mEglSurface); checkErrors(); checkEglErrors(); } } Loading Loading @@ -570,6 +575,11 @@ public abstract class HardwareRenderer { mGlCanvas.onPreDraw(); } @Override void onPostDraw() { mGlCanvas.onPostDraw(); } static HardwareRenderer create(boolean translucent) { if (GLES20Canvas.isAvailable()) { return new Gl20Renderer(translucent); Loading core/jni/android_view_GLES20Canvas.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,11 @@ static void android_view_GLES20Canvas_prepare(JNIEnv* env, jobject canvas, renderer->prepare(); } static void android_view_GLES20Canvas_finish(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer) { renderer->finish(); } static void android_view_GLES20Canvas_acquireContext(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer) { renderer->acquireContext(); Loading Loading @@ -384,6 +389,7 @@ static JNINativeMethod gMethods[] = { { "nDestroyRenderer", "(I)V", (void*) android_view_GLES20Canvas_destroyRenderer }, { "nSetViewport", "(III)V", (void*) android_view_GLES20Canvas_setViewport }, { "nPrepare", "(I)V", (void*) android_view_GLES20Canvas_prepare }, { "nFinish", "(I)V", (void*) android_view_GLES20Canvas_finish }, { "nAcquireContext", "(I)V", (void*) android_view_GLES20Canvas_acquireContext }, { "nReleaseContext", "(I)V", (void*) android_view_GLES20Canvas_releaseContext }, Loading libs/hwui/LayerCache.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -110,11 +110,9 @@ Layer* LayerCache::get(LayerSize& size) { layer = new Layer; layer->blend = true; // Generate the texture in which the FBO will draw glGenTextures(1, &layer->texture); glBindTexture(GL_TEXTURE_2D, layer->texture); // The FBO will not be scaled, so we can use lower quality filtering glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); Loading libs/hwui/OpenGLRenderer.cpp +15 −1 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ OpenGLRenderer::OpenGLRenderer(): mCaches(Caches::getInstance()) { if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) { LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT); } glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize); } OpenGLRenderer::~OpenGLRenderer() { Loading Loading @@ -161,6 +163,15 @@ void OpenGLRenderer::prepare() { mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); } void OpenGLRenderer::finish() { #if DEBUG_OPENGL GLenum status = GL_NO_ERROR; while ((status = glGetError()) != GL_NO_ERROR) { LOGD("GL error from OpenGLRenderer: 0x%x", status); } #endif } void OpenGLRenderer::acquireContext() { if (mCaches.currentProgram) { if (mCaches.currentProgram->isInUse()) { Loading Loading @@ -342,7 +353,10 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, // Layers only make sense if they are in the framebuffer's bounds bounds.intersect(*mSnapshot->clipRect); if (bounds.isEmpty()) return false; if (bounds.isEmpty() || bounds.getWidth() > mMaxTextureSize || bounds.getHeight() > mMaxTextureSize) { return false; } LayerSize size(bounds.getWidth(), bounds.getHeight()); Layer* layer = mCaches.layerCache.get(size); Loading Loading
core/java/android/view/GLES20Canvas.java +7 −1 Original line number Diff line number Diff line Loading @@ -151,6 +151,12 @@ class GLES20Canvas extends Canvas { private native void nPrepare(int renderer); void onPostDraw() { nFinish(mRenderer); } private native void nFinish(int renderer); @Override public boolean acquireContext() { if (!mContextLocked) { Loading
core/java/android/view/HardwareRenderer.java +14 −4 Original line number Diff line number Diff line Loading @@ -210,7 +210,7 @@ public abstract class HardwareRenderer { * is invoked and the requested flag is turned off. The error code is * also logged as a warning. */ void checkErrors() { void checkEglErrors() { if (isEnabled()) { int error = sEgl.eglGetError(); if (error != EGL10.EGL_SUCCESS) { Loading @@ -221,7 +221,7 @@ public abstract class HardwareRenderer { // we'll try again if it was context lost setRequested(false); } Log.w(LOG_TAG, "OpenGL error: " + error); Log.w(LOG_TAG, "EGL error: " + Integer.toHexString(error)); } } } Loading Loading @@ -348,7 +348,7 @@ public abstract class HardwareRenderer { void initializeIfNeeded(int width, int height, View.AttachInfo attachInfo, SurfaceHolder holder) { if (isRequested()) { checkErrors(); checkEglErrors(); super.initializeIfNeeded(width, height, attachInfo, holder); } } Loading Loading @@ -386,6 +386,9 @@ public abstract class HardwareRenderer { void onPreDraw() { } void onPostDraw() { } /** * Defines the EGL configuration for this renderer. The default configuration * is RGBX, no depth, no stencil. Loading Loading @@ -418,10 +421,12 @@ public abstract class HardwareRenderer { canvas.restoreToCount(saveCount); } onPostDraw(); attachInfo.mIgnoreDirtyState = false; sEgl.eglSwapBuffers(sEglDisplay, mEglSurface); checkErrors(); checkEglErrors(); } } Loading Loading @@ -570,6 +575,11 @@ public abstract class HardwareRenderer { mGlCanvas.onPreDraw(); } @Override void onPostDraw() { mGlCanvas.onPostDraw(); } static HardwareRenderer create(boolean translucent) { if (GLES20Canvas.isAvailable()) { return new Gl20Renderer(translucent); Loading
core/jni/android_view_GLES20Canvas.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,11 @@ static void android_view_GLES20Canvas_prepare(JNIEnv* env, jobject canvas, renderer->prepare(); } static void android_view_GLES20Canvas_finish(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer) { renderer->finish(); } static void android_view_GLES20Canvas_acquireContext(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer) { renderer->acquireContext(); Loading Loading @@ -384,6 +389,7 @@ static JNINativeMethod gMethods[] = { { "nDestroyRenderer", "(I)V", (void*) android_view_GLES20Canvas_destroyRenderer }, { "nSetViewport", "(III)V", (void*) android_view_GLES20Canvas_setViewport }, { "nPrepare", "(I)V", (void*) android_view_GLES20Canvas_prepare }, { "nFinish", "(I)V", (void*) android_view_GLES20Canvas_finish }, { "nAcquireContext", "(I)V", (void*) android_view_GLES20Canvas_acquireContext }, { "nReleaseContext", "(I)V", (void*) android_view_GLES20Canvas_releaseContext }, Loading
libs/hwui/LayerCache.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -110,11 +110,9 @@ Layer* LayerCache::get(LayerSize& size) { layer = new Layer; layer->blend = true; // Generate the texture in which the FBO will draw glGenTextures(1, &layer->texture); glBindTexture(GL_TEXTURE_2D, layer->texture); // The FBO will not be scaled, so we can use lower quality filtering glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); Loading
libs/hwui/OpenGLRenderer.cpp +15 −1 Original line number Diff line number Diff line Loading @@ -124,6 +124,8 @@ OpenGLRenderer::OpenGLRenderer(): mCaches(Caches::getInstance()) { if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) { LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT); } glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize); } OpenGLRenderer::~OpenGLRenderer() { Loading Loading @@ -161,6 +163,15 @@ void OpenGLRenderer::prepare() { mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); } void OpenGLRenderer::finish() { #if DEBUG_OPENGL GLenum status = GL_NO_ERROR; while ((status = glGetError()) != GL_NO_ERROR) { LOGD("GL error from OpenGLRenderer: 0x%x", status); } #endif } void OpenGLRenderer::acquireContext() { if (mCaches.currentProgram) { if (mCaches.currentProgram->isInUse()) { Loading Loading @@ -342,7 +353,10 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, // Layers only make sense if they are in the framebuffer's bounds bounds.intersect(*mSnapshot->clipRect); if (bounds.isEmpty()) return false; if (bounds.isEmpty() || bounds.getWidth() > mMaxTextureSize || bounds.getHeight() > mMaxTextureSize) { return false; } LayerSize size(bounds.getWidth(), bounds.getHeight()); Layer* layer = mCaches.layerCache.get(size); Loading