Update GrTriangulator to count curves
Now it returns the actual curve count instead of an "isLinear" bool.
Change-Id: Iaf2d5c6d96a59972bc7481c17580f2ac5e4b0a25
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/284979
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/ops/GrTriangulatingPathRenderer.cpp b/src/gpu/ops/GrTriangulatingPathRenderer.cpp
index 0347f4e..4a00ada 100644
--- a/src/gpu/ops/GrTriangulatingPathRenderer.cpp
+++ b/src/gpu/ops/GrTriangulatingPathRenderer.cpp
@@ -280,24 +280,25 @@
return;
}
vmi.mapRect(&clipBounds);
- bool isLinear;
+ int numCountedCurves;
bool canMapVB = GrCaps::kNone_MapFlags != target->caps().mapBufferFlags();
StaticVertexAllocator allocator(rp, canMapVB);
- int count = GrTriangulator::PathToTriangles(getPath(), tol, clipBounds, &allocator,
- GrTriangulator::Mode::kNormal, &isLinear);
- if (count == 0) {
+ int vertexCount = GrTriangulator::PathToTriangles(getPath(), tol, clipBounds, &allocator,
+ GrTriangulator::Mode::kNormal,
+ &numCountedCurves);
+ if (vertexCount == 0) {
return;
}
sk_sp<GrGpuBuffer> vb = allocator.detachVertexBuffer();
TessInfo info;
- info.fTolerance = isLinear ? 0 : tol;
- info.fCount = count;
+ info.fTolerance = (numCountedCurves == 0) ? 0 : tol;
+ info.fCount = vertexCount;
fShape.addGenIDChangeListener(
sk_make_sp<UniqueKeyInvalidator>(key, target->contextUniqueID()));
key.setCustomData(SkData::MakeWithCopy(&info, sizeof(info)));
rp->assignUniqueKeyToResource(key, vb.get());
- this->createMesh(target, std::move(vb), 0, count);
+ this->createMesh(target, std::move(vb), 0, vertexCount);
}
void drawAA(Target* target) {
@@ -311,14 +312,15 @@
SkScalar tol = GrPathUtils::kDefaultTolerance;
sk_sp<const GrBuffer> vertexBuffer;
int firstVertex;
- bool isLinear;
+ int numCountedCurves;
GrEagerDynamicVertexAllocator allocator(target, &vertexBuffer, &firstVertex);
- int count = GrTriangulator::PathToTriangles(path, tol, clipBounds, &allocator,
- GrTriangulator::Mode::kEdgeAntialias, &isLinear);
- if (count == 0) {
+ int vertexCount = GrTriangulator::PathToTriangles(path, tol, clipBounds, &allocator,
+ GrTriangulator::Mode::kEdgeAntialias,
+ &numCountedCurves);
+ if (vertexCount == 0) {
return;
}
- this->createMesh(target, std::move(vertexBuffer), firstVertex, count);
+ this->createMesh(target, std::move(vertexBuffer), firstVertex, vertexCount);
}
GrProgramInfo* programInfo() override { return fProgramInfo; }