Update VisualizeCoverageCountFP to accept an input FP.
This FP is used for debugging coverage in Viewer.
Change-Id: I2c49ab48457ac64f562d8b0ee6b09ab647f06d56
Bug: skia:10217
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/304736
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
diff --git a/samplecode/SampleCCPRGeometry.cpp b/samplecode/SampleCCPRGeometry.cpp
index 551cf92..d87c6a9 100644
--- a/samplecode/SampleCCPRGeometry.cpp
+++ b/samplecode/SampleCCPRGeometry.cpp
@@ -115,14 +115,25 @@
class CCPRGeometryView::VisualizeCoverageCountFP : public GrFragmentProcessor {
public:
- VisualizeCoverageCountFP() : GrFragmentProcessor(kTestFP_ClassID, kNone_OptimizationFlags) {}
+ static std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> inputFP) {
+ return std::unique_ptr<GrFragmentProcessor>(
+ new VisualizeCoverageCountFP(std::move(inputFP)));
+ }
private:
const char* name() const override {
- return "[Testing/Sample code] CCPRGeometryView::VisualizeCoverageCountFP";
+ return "VisualizeCoverageCountFP";
}
std::unique_ptr<GrFragmentProcessor> clone() const override {
- return std::make_unique<VisualizeCoverageCountFP>();
+ return std::unique_ptr<GrFragmentProcessor>(new VisualizeCoverageCountFP(*this));
+ }
+ VisualizeCoverageCountFP(std::unique_ptr<GrFragmentProcessor> inputFP)
+ : GrFragmentProcessor(kTestFP_ClassID, kNone_OptimizationFlags) {
+ this->registerChild(std::move(inputFP));
+ }
+ VisualizeCoverageCountFP(const VisualizeCoverageCountFP& that)
+ : GrFragmentProcessor(kTestFP_ClassID, kNone_OptimizationFlags) {
+ this->cloneAndRegisterAllChildProcessors(that);
}
void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {}
bool onIsEqual(const GrFragmentProcessor&) const override { return true; }
@@ -130,7 +141,9 @@
class Impl : public GrGLSLFragmentProcessor {
void emitCode(EmitArgs& args) override {
GrGLSLFPFragmentBuilder* f = args.fFragBuilder;
- f->codeAppendf("half count = %s.a;", args.fInputColor);
+ static constexpr int kInputFPIndex = 0;
+ SkString inputColor = this->invokeChild(kInputFPIndex, args);
+ f->codeAppendf("half count = %s.a;", inputColor.c_str());
f->codeAppendf("%s = half4(clamp(-count, 0, 1), clamp(+count, 0, 1), 0, abs(count));",
args.fOutputColor);
}
@@ -204,10 +217,8 @@
// Visualize coverage count in main canvas.
GrPaint paint;
- paint.addColorFragmentProcessor(
- GrTextureEffect::Make(ccbuff->readSurfaceView(), ccbuff->colorInfo().alphaType()));
- paint.addColorFragmentProcessor(
- std::make_unique<VisualizeCoverageCountFP>());
+ paint.addColorFragmentProcessor(VisualizeCoverageCountFP::Make(
+ GrTextureEffect::Make(ccbuff->readSurfaceView(), ccbuff->colorInfo().alphaType())));
paint.setPorterDuffXPFactory(SkBlendMode::kSrcOver);
rtc->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(),
SkRect::MakeIWH(this->width(), this->height()));