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

Commit 0d200833 authored by Chet Haase's avatar Chet Haase
Browse files

Fix GL rendering of translucent surfaces

GL renderer was not initializing scissor correctly for translucent
surfaces, resulting in invisible window backgrounds in some cases
like fading popup windows

Change-Id: I87a964986e1ba2c4f59708c8892c5fa71903e6fc
parent c55fa1b9
Loading
Loading
Loading
Loading
+8 −11
Original line number Diff line number Diff line
@@ -3254,13 +3254,6 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
            // through
            final boolean drawAnimation = (child.mPrivateFlags & DRAW_ANIMATION) == DRAW_ANIMATION;

            // Check whether the child that requests the invalidate is fully opaque
            final boolean isOpaque = child.isOpaque() && !drawAnimation &&
                    child.getAnimation() == null;
            // Mark the child as dirty, using the appropriate flag
            // Make sure we do not set both flags at the same time
            final int opaqueFlag = isOpaque ? DIRTY_OPAQUE : DIRTY;

            if (dirty == null) {
                do {
                    View view = null;
@@ -3286,10 +3279,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                    } else if (view != null) {
                        if ((mPrivateFlags & DRAWN) == DRAWN) {
                            view.mPrivateFlags &= ~DRAWING_CACHE_VALID;
                            if (view != null && (view.mPrivateFlags & DIRTY_MASK) != DIRTY) {
                                view.mPrivateFlags =
                                        (view.mPrivateFlags & ~DIRTY_MASK) | opaqueFlag;
                            }
                            view.mPrivateFlags |= DIRTY;
                            parent = view.mParent;
                        } else {
                            parent = null;
@@ -3297,6 +3287,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
                    }
                } while (parent != null);
            } else {
                // Check whether the child that requests the invalidate is fully opaque
                final boolean isOpaque = child.isOpaque() && !drawAnimation &&
                        child.getAnimation() == null;
                // Mark the child as dirty, using the appropriate flag
                // Make sure we do not set both flags at the same time
                final int opaqueFlag = isOpaque ? DIRTY_OPAQUE : DIRTY;

                final int[] location = attachInfo.mInvalidateChildLocation;
                location[CHILD_LEFT_INDEX] = child.mLeft;
                location[CHILD_TOP_INDEX] = child.mTop;
+2 −5
Original line number Diff line number Diff line
@@ -147,13 +147,10 @@ void OpenGLRenderer::prepare(bool opaque) {
        glDisable(GL_SCISSOR_TEST);
        glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        glEnable(GL_SCISSOR_TEST);
    } else {
        glEnable(GL_SCISSOR_TEST);
        glScissor(0, 0, mWidth, mHeight);
        dirtyClip();
    }

    glEnable(GL_SCISSOR_TEST);
    glScissor(0, 0, mWidth, mHeight);
    mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight);
}