Pull the triangulating path renderer's shape-space triangulation into a helper method
This functionality will also be needed in TriangulatingPathOp::onPrePrepareDraws
Bug: 1108408
Change-Id: I0bf3f3c14820b946f4c4bc738c55e7a5eb2e7ced
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/328556
Reviewed-by: Adlai Holler <adlai@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/ops/GrTriangulatingPathRenderer.cpp b/src/gpu/ops/GrTriangulatingPathRenderer.cpp
index fcb0ce1..b158a19 100644
--- a/src/gpu/ops/GrTriangulatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTriangulatingPathRenderer.cpp
@@ -262,6 +262,30 @@
builder.finish();
}
+ // Triangulate the provided 'shape' in the shape's coordinate space. 'tol' should already
+ // have been mapped back from device space.
+ static int Triangulate(GrEagerVertexAllocator* allocator,
+ const SkMatrix& viewMatrix,
+ const GrStyledShape& shape,
+ const SkIRect& devClipBounds,
+ SkScalar tol,
+ int* numCountedCurves) {
+ SkRect clipBounds = SkRect::Make(devClipBounds);
+
+ SkMatrix vmi;
+ if (!viewMatrix.invert(&vmi)) {
+ return 0;
+ }
+ vmi.mapRect(&clipBounds);
+
+ SkASSERT(!shape.style().applies());
+ SkPath path;
+ shape.asPath(&path);
+
+ return GrTriangulator::PathToTriangles(path, tol, clipBounds, allocator,
+ GrTriangulator::Mode::kNormal, numCountedCurves);
+ }
+
void createNonAAMesh(Target* target) {
SkASSERT(!fAntiAlias);
GrResourceProvider* rp = target->resourceProvider();
@@ -283,22 +307,16 @@
}
}
- SkRect clipBounds = SkRect::Make(fDevClipBounds);
-
- SkMatrix vmi;
- if (!fViewMatrix.invert(&vmi)) {
- return;
- }
- vmi.mapRect(&clipBounds);
- int numCountedCurves;
bool canMapVB = GrCaps::kNone_MapFlags != target->caps().mapBufferFlags();
StaticVertexAllocator allocator(rp, canMapVB);
- int vertexCount = GrTriangulator::PathToTriangles(this->getPath(), tol, clipBounds,
- &allocator, GrTriangulator::Mode::kNormal,
- &numCountedCurves);
+
+ int numCountedCurves;
+ int vertexCount = Triangulate(&allocator, fViewMatrix, fShape, fDevClipBounds, tol,
+ &numCountedCurves);
if (vertexCount == 0) {
return;
}
+
sk_sp<GrGpuBuffer> vb = allocator.detachVertexBuffer();
key.setCustomData(create_data(vertexCount, numCountedCurves, tol));