Loading libs/hwui/DisplayListRenderer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -1412,8 +1412,12 @@ int DisplayListRenderer::prepareDirty(float left, float top, mSnapshot = new Snapshot(mFirstSnapshot, SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); mSaveCount = 1; mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); mDirtyClip = opaque; mRestoreSaveCount = -1; return DrawGlInfo::kStatusDone; // No invalidate needed at record-time } Loading libs/hwui/LayerRenderer.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -332,10 +332,10 @@ void LayerRenderer::flushLayer(Layer* layer) { if (Caches::getInstance().extensions.hasDiscardFramebuffer()) { GLuint previousFbo; glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &previousFbo); GLenum attachments = GL_COLOR_ATTACHMENT0; if (fbo != previousFbo) glBindFramebuffer(GL_FRAMEBUFFER, fbo); glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, &attachments); const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 }; glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments); if (fbo != previousFbo) glBindFramebuffer(GL_FRAMEBUFFER, previousFbo); } Loading libs/hwui/OpenGLRenderer.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,15 @@ int OpenGLRenderer::prepareDirty(float left, float top, float right, float botto mSnapshot->setClip(left, top, right, bottom); mDirtyClip = opaque; // If we know that we are going to redraw the entire framebuffer, // perform a discard to let the driver know we don't need to preserve // the back buffer for this frame. if (mCaches.extensions.hasDiscardFramebuffer() && left <= 0.0f && top <= 0.0f && right >= mWidth && bottom >= mHeight) { const GLenum attachments[] = { getTargetFbo() == 0 ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0 }; glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments); } syncState(); if (!opaque) { Loading Loading
libs/hwui/DisplayListRenderer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -1412,8 +1412,12 @@ int DisplayListRenderer::prepareDirty(float left, float top, mSnapshot = new Snapshot(mFirstSnapshot, SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); mSaveCount = 1; mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight); mDirtyClip = opaque; mRestoreSaveCount = -1; return DrawGlInfo::kStatusDone; // No invalidate needed at record-time } Loading
libs/hwui/LayerRenderer.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -332,10 +332,10 @@ void LayerRenderer::flushLayer(Layer* layer) { if (Caches::getInstance().extensions.hasDiscardFramebuffer()) { GLuint previousFbo; glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &previousFbo); GLenum attachments = GL_COLOR_ATTACHMENT0; if (fbo != previousFbo) glBindFramebuffer(GL_FRAMEBUFFER, fbo); glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, &attachments); const GLenum attachments[] = { GL_COLOR_ATTACHMENT0 }; glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments); if (fbo != previousFbo) glBindFramebuffer(GL_FRAMEBUFFER, previousFbo); } Loading
libs/hwui/OpenGLRenderer.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,15 @@ int OpenGLRenderer::prepareDirty(float left, float top, float right, float botto mSnapshot->setClip(left, top, right, bottom); mDirtyClip = opaque; // If we know that we are going to redraw the entire framebuffer, // perform a discard to let the driver know we don't need to preserve // the back buffer for this frame. if (mCaches.extensions.hasDiscardFramebuffer() && left <= 0.0f && top <= 0.0f && right >= mWidth && bottom >= mHeight) { const GLenum attachments[] = { getTargetFbo() == 0 ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0 }; glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, attachments); } syncState(); if (!opaque) { Loading