From d0afeac6dfc0856eeb72e6176ad6335e81871d24 Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Fri, 15 Mar 2013 18:43:11 -0700 Subject: Reset draw modifiers after flushing bug:8401910 This avoids leaving the renderer in a state with stale pointers (to, e.g., shaders or color filters) Change-Id: Idf8b63657041352e70e34e91ea416fe4385d4bc2 --- libs/hwui/DeferredDisplayList.cpp | 2 +- libs/hwui/OpenGLRenderer.cpp | 12 ++++++++---- libs/hwui/OpenGLRenderer.h | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp index 2027fc86ad8a..84555450ecf5 100644 --- a/libs/hwui/DeferredDisplayList.cpp +++ b/libs/hwui/DeferredDisplayList.cpp @@ -372,8 +372,8 @@ status_t DeferredDisplayList::flush(OpenGLRenderer& renderer, Rect& dirty) { renderer.eventMark("Flush"); renderer.restoreToCount(1); - status |= replayBatchList(mBatches, renderer, dirty); + renderer.resetDrawModifiers(); DEFER_LOGD("--flush complete, returning %x", status); diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 428980e485f1..e576f76f8660 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -112,10 +112,7 @@ static const Blender gBlendsSwap[] = { OpenGLRenderer::OpenGLRenderer(): mCaches(Caches::getInstance()), mExtensions(Extensions::getInstance()) { - mDrawModifiers.mShader = NULL; - mDrawModifiers.mColorFilter = NULL; - mDrawModifiers.mHasShadow = false; - mDrawModifiers.mHasDrawFilter = false; + resetDrawModifiers(); memcpy(mMeshVertices, gMeshVertices, sizeof(gMeshVertices)); @@ -1204,6 +1201,13 @@ void OpenGLRenderer::clearLayerRegions() { // State Deferral /////////////////////////////////////////////////////////////////////////////// +void OpenGLRenderer::resetDrawModifiers() { + mDrawModifiers.mShader = NULL; + mDrawModifiers.mColorFilter = NULL; + mDrawModifiers.mHasShadow = false; + mDrawModifiers.mHasDrawFilter = false; +} + bool OpenGLRenderer::storeDisplayState(DeferredDisplayState& state, int stateDeferFlags) { const Rect& currentClip = *(mSnapshot->clipRect); const mat4& currentMatrix = *(mSnapshot->transform); diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index e6c636c37356..3aa9975520f0 100644 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -274,6 +274,7 @@ public: SkPaint* filterPaint(SkPaint* paint, bool alwaysCopy = false); + void resetDrawModifiers(); bool storeDisplayState(DeferredDisplayState& state, int stateDeferFlags); void restoreDisplayState(const DeferredDisplayState& state, int stateDeferFlags); -- cgit v1.2.3-59-g8ed1b