Add a fixed-count impl for tessellated wedges
Bug: skia:10419
Change-Id: Ibb5adb581045e98cb636006aa84f792847041ca5
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/416856
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/samplecode/SamplePathTessellators.cpp b/samplecode/SamplePathTessellators.cpp
index 762d07c..18e8f2f 100644
--- a/samplecode/SamplePathTessellators.cpp
+++ b/samplecode/SamplePathTessellators.cpp
@@ -21,6 +21,7 @@
namespace {
enum class Mode {
+ kWedgeMiddleOut,
kCurveMiddleOut,
kWedgeTessellate,
kCurveTessellate
@@ -28,12 +29,14 @@
static const char* ModeName(Mode mode) {
switch (mode) {
+ case Mode::kWedgeMiddleOut:
+ return "MiddleOutShader (kWedges)";
case Mode::kCurveMiddleOut:
- return "GrCurveMiddleOutShader";
+ return "MiddleOutShader (kCurves)";
case Mode::kWedgeTessellate:
- return "GrWedgeTessellateShader";
+ return "HardwareWedgeShader";
case Mode::kCurveTessellate:
- return "GrCurveTessellateShader";
+ return "HardwareCurveShader";
}
SkUNREACHABLE;
}
@@ -68,21 +71,28 @@
void onPrepare(GrOpFlushState* flushState) override {
constexpr static SkPMColor4f kCyan = {0,1,1,1};
auto alloc = flushState->allocator();
+ const GrCaps& caps = flushState->caps();
+ int numVerbsToGetMiddleOut = 0;
+ int numVerbsToGetTessellation = caps.minPathVerbsForHwTessellation();
switch (fMode) {
- using DrawInnerFan = GrPathTessellator::DrawInnerFan;
- using ShaderType = GrPathCurveTessellator::ShaderType;
+ using DrawInnerFan = GrPathCurveTessellator::DrawInnerFan;
+ case Mode::kWedgeMiddleOut:
+ fTessellator = GrPathWedgeTessellator::Make(alloc, fMatrix, kCyan,
+ numVerbsToGetMiddleOut, caps);
+ break;
case Mode::kCurveMiddleOut:
fTessellator = GrPathCurveTessellator::Make(alloc, fMatrix, kCyan,
DrawInnerFan::kYes,
- ShaderType::kFixedCountMiddleOut);
+ numVerbsToGetMiddleOut, caps);
break;
case Mode::kWedgeTessellate:
- fTessellator = GrPathWedgeTessellator::Make(alloc, fMatrix, kCyan);
+ fTessellator = GrPathWedgeTessellator::Make(alloc, fMatrix, kCyan,
+ numVerbsToGetTessellation, caps);
break;
case Mode::kCurveTessellate:
fTessellator = GrPathCurveTessellator::Make(alloc, fMatrix, kCyan,
DrawInnerFan::kYes,
- ShaderType::kHardwareTessellation);
+ numVerbsToGetTessellation, caps);
break;
}
fTessellator->prepare(flushState, this->bounds(), fPath);
@@ -147,7 +157,7 @@
SkPath fPath;
GrPipeline::InputFlags fPipelineFlags = GrPipeline::InputFlags::kHWAntialias |
GrPipeline::InputFlags::kWireframe;
- Mode fMode = Mode::kCurveMiddleOut;
+ Mode fMode = Mode::kWedgeMiddleOut;
float fConicWeight = .5;
@@ -289,6 +299,7 @@
case '1':
case '2':
case '3':
+ case '4':
fMode = (Mode)(unichar - '1');
return true;
}