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

Commit 5eac9e11 authored by Chris Craik's avatar Chris Craik Committed by Android (Google) Code Review
Browse files

Merge "Build layer damage bounds for shadows" into lmp-dev

parents 5320b04f c93e45cf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ void AmbientShadow::createAmbientShadow(bool isCasterOpaque,
        }
    }
    shadowVertexBuffer.setMode(mode);
    shadowVertexBuffer.computeBounds<AlphaVertex>();

#if DEBUG_SHADOW
    for (int i = 0; i < SHADOW_VERTEX_COUNT; i++) {
+3 −13
Original line number Diff line number Diff line
@@ -794,16 +794,6 @@ void PathTessellator::tessellatePath(const SkPath &path, const SkPaint* paint,
    vertexBuffer.setBounds(bounds);
}

static void expandRectToCoverVertex(Rect& rect, float x, float y) {
    rect.left = fminf(rect.left, x);
    rect.top = fminf(rect.top, y);
    rect.right = fmaxf(rect.right, x);
    rect.bottom = fmaxf(rect.bottom, y);
}
static void expandRectToCoverVertex(Rect& rect, const Vertex& vertex) {
    expandRectToCoverVertex(rect, vertex.x, vertex.y);
}

template <class TYPE>
static void instanceVertices(VertexBuffer& srcBuffer, VertexBuffer& dstBuffer,
        const float* points, int count, Rect& bounds) {
@@ -814,7 +804,7 @@ static void instanceVertices(VertexBuffer& srcBuffer, VertexBuffer& dstBuffer,
    dstBuffer.alloc<TYPE>(numPoints * verticesPerPoint + (numPoints - 1) * 2);

    for (int i = 0; i < count; i += 2) {
        expandRectToCoverVertex(bounds, points[i + 0], points[i + 1]);
        bounds.expandToCoverVertex(points[i + 0], points[i + 1]);
        dstBuffer.copyInto<TYPE>(srcBuffer, points[i + 0], points[i + 1]);
    }
    dstBuffer.createDegenerateSeparators<TYPE>(verticesPerPoint);
@@ -896,8 +886,8 @@ void PathTessellator::tessellateLines(const float* points, int count, const SkPa
        }

        // calculate bounds
        expandRectToCoverVertex(bounds, tempVerticesData[0]);
        expandRectToCoverVertex(bounds, tempVerticesData[1]);
        bounds.expandToCoverVertex(tempVerticesData[0].x, tempVerticesData[0].y);
        bounds.expandToCoverVertex(tempVerticesData[1].x, tempVerticesData[1].y);
    }

    // since multiple objects tessellated into buffer, separate them with degen tris
+7 −0
Original line number Diff line number Diff line
@@ -241,6 +241,13 @@ public:
        bottom = ceilf(bottom);
    }

    void expandToCoverVertex(float x, float y) {
        left = fminf(left, x);
        top = fminf(top, y);
        right = fmaxf(right, x);
        bottom = fmaxf(bottom, y);
    }

    void dump(const char* label = NULL) const {
        ALOGD("%s[l=%f t=%f r=%f b=%f]", label ? label : "Rect", left, top, right, bottom);
    }
+1 −0
Original line number Diff line number Diff line
@@ -508,6 +508,7 @@ void SpotShadow::createSpotShadow(bool isCasterOpaque, const Vector3* poly,
    computeSpotShadow(isCasterOpaque, light, lightVertexCount, lightCenter, poly,
            polyLength, retStrips);
    retStrips.setMode(VertexBuffer::kTwoPolyRingShadow);
    retStrips.computeBounds<AlphaVertex>();
}

/**
+0 −2
Original line number Diff line number Diff line
@@ -273,8 +273,6 @@ static void tessellateShadows(
            isCasterOpaque, casterPolygon, casterVertexCount,
            *drawTransform, lightCenter, lightRadius, casterBounds, *localClip,
            spotBuffer);

    // TODO: set ambientBuffer & spotBuffer's bounds for correct layer damage
}

class ShadowProcessor : public TaskProcessor<TessellationCache::vertexBuffer_pair_t*> {
Loading