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

Commit 7c53a0d6 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Don't draw the same triangles several times. Bug #3388197" into honeycomb

parents 3b52ca3b 4f09f541
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -8125,11 +8125,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
                // TODO: We should pass the dirty rect
                canvas.onPreDraw(null);

                final int restoreCount = canvas.save();

                computeScroll();
                canvas.translate(-mScrollX, -mScrollY);

                final int restoreCount = canvas.save();

                mPrivateFlags |= DRAWN | DRAWING_CACHE_VALID;
    
                // Fast path for layouts with no backgrounds
+13 −9
Original line number Diff line number Diff line
@@ -99,11 +99,13 @@ void LayerRenderer::generateMesh() {
        mLayer->meshIndices = NULL;
    }

    bool rebuildIndices = false;
    if (!mLayer->mesh) {
        mLayer->mesh = new TextureVertex[count * 4];
        mLayer->meshIndices = new uint16_t[elementCount];
        mLayer->meshElementCount = elementCount;
        rebuildIndices = true;
    }
    mLayer->meshElementCount = elementCount;

    const float texX = 1.0f / float(mLayer->width);
    const float texY = 1.0f / float(mLayer->height);
@@ -125,6 +127,7 @@ void LayerRenderer::generateMesh() {
        TextureVertex::set(mesh++, r->left, r->bottom, u1, v2);
        TextureVertex::set(mesh++, r->right, r->bottom, u2, v2);

        if (rebuildIndices) {
            uint16_t quad = i * 4;
            int index = i * 6;
            indices[index    ] = quad;       // top-left
@@ -134,6 +137,7 @@ void LayerRenderer::generateMesh() {
            indices[index + 4] = quad + 1;   // top-right
            indices[index + 5] = quad + 3;   // bottom-right
        }
    }
#endif
}

+3 −1
Original line number Diff line number Diff line
@@ -1613,10 +1613,12 @@ void OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
            setupDrawColorFilter();
            setupDrawBlending(layer->blend || layer->alpha < 255, layer->mode, false);
            setupDrawProgram();
            setupDrawDirtyRegionsDisabled();
            setupDrawPureColorUniforms();
            setupDrawColorFilterUniforms();
            setupDrawTexture(layer->texture);
            // TODO: The current layer, if any, will be dirtied with the bounding box
            //       of the layer we are drawing. Since the layer we are drawing has
            //       a mesh, we know the dirty region, we should use it instead
            setupDrawModelViewTranslate(rect.left, rect.top, rect.right, rect.bottom);
            setupDrawMesh(&layer->mesh[0].position[0], &layer->mesh[0].texture[0]);