Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0afeac6 authored by Chris Craik's avatar Chris Craik
Browse files

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
parent 2e6ce4f7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);

+8 −4
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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);