59 void emitCode(EmitArgs&
args)
override {
61 auto f =
args.fFragBuilder;
62 auto uniHandler =
args.fUniformHandler;
64 f->codeAppend(
"half coverage = 0;");
65 if (fp.fFlags & Flags::kCheckBounds) {
66 const char* boundsName;
70 f->codeAppendf(
"if (all(greaterThan(sk_FragCoord.xy, %s.xy)) && "
71 "all(lessThan(sk_FragCoord.xy, %s.zw))) ",
72 boundsName, boundsName);
75 SkString atlasCoverage = this->invokeChild(1,
args,
"sk_FragCoord.xy");
76 f->codeAppendf(
"coverage = %s.a;", atlasCoverage.
c_str());
78 const char* coverageMaybeInvertName;
81 &coverageMaybeInvertName);
83 f->codeAppendf(
"coverage = coverage * %s.x + %s.y;",
84 coverageMaybeInvertName, coverageMaybeInvertName);
85 f->codeAppendf(
"return %s * coverage;", inputColor.
c_str());
92 if (fp.fFlags & Flags::kCheckBounds) {
95 if (fp.fFlags & Flags::kInvertCoverage) {
96 pdman.
set2f(fCoverageMaybeInvertUniform, -1, 1);
98 pdman.
set2f(fCoverageMaybeInvertUniform, 1, 0);
101 UniformHandle fBoundsUniform;
102 UniformHandle fCoverageMaybeInvertUniform;
105 return std::make_unique<Impl>();
static std::unique_ptr< GrFragmentProcessor > Make(GrSurfaceProxyView, SkAlphaType, const SkMatrix &=SkMatrix::I(), GrSamplerState::Filter=GrSamplerState::Filter::kNearest, GrSamplerState::MipmapMode mipmapMode=GrSamplerState::MipmapMode::kNone)