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

Commit ddf74373 authored by Romain Guy's avatar Romain Guy
Browse files

Ensure we always set the proper blending mode

Bug #6527305

At the beginning of a frame, always set the blending mode that we
think GL is using just in case it was modified by another entity
(for instance a WebView functor.)

Change-Id: I0e1d0abee8a2abb2b8e7622aed28346e89562c06
parent 51f7c6b3
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -296,7 +296,8 @@ void DisplayList::output(OpenGLRenderer& renderer, uint32_t level) {
        indent[i] = ' ';
        indent[i] = ' ';
    }
    }
    indent[count] = '\0';
    indent[count] = '\0';
    ALOGD("%sStart display list (%p, %s)", (char*) indent + 2, this, mName.string());
    ALOGD("%sStart display list (%p, %s, render=%d)", (char*) indent + 2, this,
            mName.string(), isRenderable());


    ALOGD("%s%s %d", indent, "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
    ALOGD("%s%s %d", indent, "Save", SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
    int saveCount = renderer.getSaveCount() - 1;
    int saveCount = renderer.getSaveCount() - 1;
+16 −9
Original line number Original line Diff line number Diff line
@@ -177,14 +177,26 @@ void OpenGLRenderer::prepareDirty(float left, float top, float right, float bott
    mSnapshot->fbo = getTargetFbo();
    mSnapshot->fbo = getTargetFbo();
    mSaveCount = 1;
    mSaveCount = 1;


    glViewport(0, 0, mWidth, mHeight);
    mCaches.setScissor(left, mSnapshot->height - bottom, right - left, bottom - top);

    mSnapshot->setClip(left, top, right, bottom);
    mSnapshot->setClip(left, top, right, bottom);
    mDirtyClip = false;
    mDirtyClip = opaque;

    syncState();


    if (!opaque) {
    if (!opaque) {
        mCaches.setScissor(left, mSnapshot->height - bottom, right - left, bottom - top);
        glClear(GL_COLOR_BUFFER_BIT);
        glClear(GL_COLOR_BUFFER_BIT);
    } else {
        mCaches.resetScissor();
    }
}

void OpenGLRenderer::syncState() {
    glViewport(0, 0, mWidth, mHeight);

    if (mCaches.blend) {
        glEnable(GL_BLEND);
    } else {
        glDisable(GL_BLEND);
    }
    }
}
}


@@ -291,11 +303,6 @@ status_t OpenGLRenderer::invokeFunctors(Rect& dirty) {
        }
        }
    }
    }


    // Restore state possibly changed by the functors in process mode
    GLboolean value;
    glGetBooleanv(GL_BLEND, &value);
    mCaches.blend = value;

    mCaches.activeTexture(0);
    mCaches.activeTexture(0);


    return result;
    return result;
+6 −0
Original line number Original line Diff line number Diff line
@@ -214,6 +214,12 @@ protected:
    void drawTextureLayer(Layer* layer, const Rect& rect);
    void drawTextureLayer(Layer* layer, const Rect& rect);


private:
private:
    /**
     * Ensures the state of the renderer is the same as the state of
     * the GL context.
     */
    void syncState();

    /**
    /**
     * Saves the current state of the renderer as a new snapshot.
     * Saves the current state of the renderer as a new snapshot.
     * The new snapshot is saved in mSnapshot and the previous snapshot
     * The new snapshot is saved in mSnapshot and the previous snapshot