Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Member Functions | List of all members
GrModulateAtlasCoverageEffect Class Reference

#include <GrModulateAtlasCoverageEffect.h>

Inheritance diagram for GrModulateAtlasCoverageEffect:
GrFragmentProcessor GrProcessor

Public Types

enum class  Flags { kNone = 0 , kInvertCoverage = 1 << 0 , kCheckBounds = 1 << 1 }
 
- Public Types inherited from GrProcessor
enum  ClassID {
  kNull_ClassID , kAttributeTestProcessor_ClassID , kBigKeyProcessor_ClassID , kBlendFragmentProcessor_ClassID ,
  kBlockInputFragmentProcessor_ClassID , kButtCapStrokedCircleGeometryProcessor_ClassID , kCircleGeometryProcessor_ClassID , kCircularRRectEffect_ClassID ,
  kClockwiseTestProcessor_ClassID , kColorTableEffect_ClassID , kCoverageSetOpXP_ClassID , kCustomXP_ClassID ,
  kDashingCircleEffect_ClassID , kDashingLineEffect_ClassID , kDefaultGeoProc_ClassID , kDeviceSpace_ClassID ,
  kDIEllipseGeometryProcessor_ClassID , kDisableColorXP_ClassID , kDrawAtlasPathShader_ClassID , kEllipseGeometryProcessor_ClassID ,
  kEllipticalRRectEffect_ClassID , kFwidthSquircleTestProcessor_ClassID , kGP_ClassID , kGrBicubicEffect_ClassID ,
  kGrBitmapTextGeoProc_ClassID , kGrColorSpaceXformEffect_ClassID , kGrConicEffect_ClassID , kGrConvexPolyEffect_ClassID ,
  kGrDiffuseLightingEffect_ClassID , kGrDisplacementMapEffect_ClassID , kGrDistanceFieldA8TextGeoProc_ClassID , kGrDistanceFieldLCDTextGeoProc_ClassID ,
  kGrDistanceFieldPathGeoProc_ClassID , kGrFillRRectOp_Processor_ClassID , kGrGaussianConvolutionFragmentProcessor_ClassID , kGrMatrixConvolutionEffect_ClassID ,
  kGrMatrixEffect_ClassID , kGrMeshTestProcessor_ClassID , kGrMorphologyEffect_ClassID , kGrPerlinNoise2Effect_ClassID ,
  kGrPipelineDynamicStateTestProcessor_ClassID , kGrQuadEffect_ClassID , kGrRRectShadowGeoProc_ClassID , kGrSkSLFP_ClassID ,
  kGrSpecularLightingEffect_ClassID , kGrTextureEffect_ClassID , kGrUnrolledBinaryGradientColorizer_ClassID , kGrYUVtoRGBEffect_ClassID ,
  kHighPrecisionFragmentProcessor_ClassID , kLatticeGP_ClassID , kPDLCDXferProcessor_ClassID , kPorterDuffXferProcessor_ClassID ,
  kPremulFragmentProcessor_ClassID , kQuadEdgeEffect_ClassID , kQuadPerEdgeAAGeometryProcessor_ClassID , kSeriesFragmentProcessor_ClassID ,
  kShaderPDXferProcessor_ClassID , kSurfaceColorProcessor_ClassID , kSwizzleFragmentProcessor_ClassID , kTessellate_BoundingBoxShader_ClassID ,
  kTessellate_GrModulateAtlasCoverageEffect_ClassID , kTessellate_GrStrokeTessellationShader_ClassID , kTessellate_HullShader_ClassID , kTessellate_MiddleOutShader_ClassID ,
  kTessellate_SimpleTriangleShader_ClassID , kTessellationTestTriShader_ClassID , kTestFP_ClassID , kTestRectOp_ClassID ,
  kVertexColorSpaceBenchGP_ClassID , kVerticesGP_ClassID
}
 

Public Member Functions

 GR_DECL_BITFIELD_CLASS_OPS_FRIENDS (Flags)
 
 GrModulateAtlasCoverageEffect (Flags flags, std::unique_ptr< GrFragmentProcessor > inputFP, GrSurfaceProxyView atlasView, const SkMatrix &devToAtlasMatrix, const SkIRect &devIBounds)
 
 GrModulateAtlasCoverageEffect (const GrModulateAtlasCoverageEffect &that)
 
const char * name () const override
 
std::unique_ptr< GrFragmentProcessorclone () const override
 
- Public Member Functions inherited from GrFragmentProcessor
const GrFragmentProcessorparent () const
 
std::unique_ptr< ProgramImplmakeProgramImpl () const
 
void addToKey (const GrShaderCaps &caps, skgpu::KeyBuilder *b) const
 
int numChildProcessors () const
 
int numNonNullChildProcessors () const
 
GrFragmentProcessorchildProcessor (int index)
 
const GrFragmentProcessorchildProcessor (int index) const
 
 SkDEBUGCODE (bool isInstantiated() const ;) bool willReadDstColor() const
 
bool isBlendFunction () const
 
bool usesSampleCoordsDirectly () const
 
bool usesSampleCoords () const
 
const SkSL::SampleUsagesampleUsage () const
 
bool compatibleWithCoverageAsAlpha () const
 
bool preservesOpaqueInput () const
 
bool hasConstantOutputForConstantInput (SkPMColor4f inputColor, SkPMColor4f *outputColor) const
 
bool hasConstantOutputForConstantInput () const
 
void clearConstantOutputForConstantInputFlag ()
 
bool isEqual (const GrFragmentProcessor &that) const
 
void visitProxies (const GrVisitProxyFunc &) const
 
void visitTextureEffects (const std::function< void(const GrTextureEffect &)> &) const
 
void visitWithImpls (const std::function< void(const GrFragmentProcessor &, ProgramImpl &)> &, ProgramImpl &) const
 
GrTextureEffectasTextureEffect ()
 
const GrTextureEffectasTextureEffect () const
 
- Public Member Functions inherited from GrProcessor
virtual ~GrProcessor ()=default
 
void * operator new (size_t size)
 
void * operator new (size_t object_size, size_t footer_size)
 
void operator delete (void *target)
 
void * operator new (size_t size, void *placement)
 
void operator delete (void *target, void *placement)
 
template<typename T >
const Tcast () const
 
ClassID classID () const
 

Private Member Functions

void onAddToKey (const GrShaderCaps &, skgpu::KeyBuilder *b) const override
 
bool onIsEqual (const GrFragmentProcessor &that) const override
 
std::unique_ptr< ProgramImplonMakeProgramImpl () const override
 

Additional Inherited Members

- Static Public Member Functions inherited from GrFragmentProcessor
static std::unique_ptr< GrFragmentProcessorMakeColor (SkPMColor4f color)
 
static std::unique_ptr< GrFragmentProcessorMulInputByChildAlpha (std::unique_ptr< GrFragmentProcessor > child)
 
static std::unique_ptr< GrFragmentProcessorApplyPaintAlpha (std::unique_ptr< GrFragmentProcessor > child)
 
static std::unique_ptr< GrFragmentProcessorModulateRGBA (std::unique_ptr< GrFragmentProcessor > child, const SkPMColor4f &color)
 
static std::unique_ptr< GrFragmentProcessorOverrideInput (std::unique_ptr< GrFragmentProcessor >, const SkPMColor4f &)
 
static std::unique_ptr< GrFragmentProcessorDisableCoverageAsAlpha (std::unique_ptr< GrFragmentProcessor >)
 
static std::unique_ptr< GrFragmentProcessorDestColor ()
 
static std::unique_ptr< GrFragmentProcessorSwizzleOutput (std::unique_ptr< GrFragmentProcessor >, const skgpu::Swizzle &)
 
static std::unique_ptr< GrFragmentProcessorClampOutput (std::unique_ptr< GrFragmentProcessor >)
 
static std::unique_ptr< GrFragmentProcessorCompose (std::unique_ptr< GrFragmentProcessor > f, std::unique_ptr< GrFragmentProcessor > g)
 
static std::unique_ptr< GrFragmentProcessorColorMatrix (std::unique_ptr< GrFragmentProcessor > child, const float matrix[20], bool unpremulInput, bool clampRGBOutput, bool premulOutput)
 
static std::unique_ptr< GrFragmentProcessorSurfaceColor ()
 
static std::unique_ptr< GrFragmentProcessorDeviceSpace (std::unique_ptr< GrFragmentProcessor >)
 
static std::unique_ptr< GrFragmentProcessorRect (std::unique_ptr< GrFragmentProcessor >, GrClipEdgeType, SkRect)
 
static GrFPResult Circle (std::unique_ptr< GrFragmentProcessor >, GrClipEdgeType, SkPoint center, float radius)
 
static GrFPResult Ellipse (std::unique_ptr< GrFragmentProcessor >, GrClipEdgeType, SkPoint center, SkPoint radii, const GrShaderCaps &)
 
static std::unique_ptr< GrFragmentProcessorHighPrecision (std::unique_ptr< GrFragmentProcessor >)
 
- Protected Types inherited from GrFragmentProcessor
enum  OptimizationFlags : uint32_t {
  kNone_OptimizationFlags , kCompatibleWithCoverageAsAlpha_OptimizationFlag = 0x1 , kPreservesOpaqueInput_OptimizationFlag = 0x2 , kConstantOutputForConstantInput_OptimizationFlag = 0x4 ,
  kAll_OptimizationFlags
}
 
- Protected Member Functions inherited from GrFragmentProcessor
 GrFragmentProcessor (ClassID classID, OptimizationFlags optimizationFlags)
 
 GrFragmentProcessor (const GrFragmentProcessor &src)
 
OptimizationFlags optimizationFlags () const
 
void registerChild (std::unique_ptr< GrFragmentProcessor > child, SkSL::SampleUsage sampleUsage=SkSL::SampleUsage::PassThrough())
 
void cloneAndRegisterAllChildProcessors (const GrFragmentProcessor &src)
 
void setUsesSampleCoordsDirectly ()
 
void setWillReadDstColor ()
 
void setIsBlendFunction ()
 
void mergeOptimizationFlags (OptimizationFlags flags)
 
- Protected Member Functions inherited from GrProcessor
 GrProcessor (ClassID classID)
 
 GrProcessor (const GrProcessor &)=delete
 
GrProcessoroperator= (const GrProcessor &)=delete
 
- Static Protected Member Functions inherited from GrFragmentProcessor
static OptimizationFlags ModulateForSamplerOptFlags (SkAlphaType alphaType, bool samplingDecal)
 
static OptimizationFlags ModulateForClampedSamplerOptFlags (SkAlphaType alphaType)
 
static OptimizationFlags ProcessorOptimizationFlags (const GrFragmentProcessor *fp)
 
static SkPMColor4f ConstantOutputForConstantInput (const GrFragmentProcessor *fp, const SkPMColor4f &input)
 
- Protected Attributes inherited from GrProcessor
const ClassID fClassID
 

Detailed Description

Definition at line 23 of file GrModulateAtlasCoverageEffect.h.

Member Enumeration Documentation

◆ Flags

Enumerator
kNone 
kInvertCoverage 
kCheckBounds 

Definition at line 25 of file GrModulateAtlasCoverageEffect.h.

25 {
26 kNone = 0,
27 kInvertCoverage = 1 << 0, // Return inputColor * (1 - atlasCoverage).
28 kCheckBounds = 1 << 1 // Clamp atlasCoverage to 0 if outside the path's valid atlas bounds.
29 };

Constructor & Destructor Documentation

◆ GrModulateAtlasCoverageEffect() [1/2]

GrModulateAtlasCoverageEffect::GrModulateAtlasCoverageEffect ( Flags  flags,
std::unique_ptr< GrFragmentProcessor inputFP,
GrSurfaceProxyView  atlasView,
const SkMatrix devToAtlasMatrix,
const SkIRect devIBounds 
)

Definition at line 29 of file GrModulateAtlasCoverageEffect.cpp.

37 , fFlags(flags)
38 , fBounds((fFlags & Flags::kCheckBounds) ? devIBounds : SkIRect{0,0,0,0}) {
39 this->registerChild(std::move(inputFP));
41 devToAtlasMatrix, GrSamplerState::Filter::kNearest),
43}
@ kUnknown_SkAlphaType
uninitialized
Definition SkAlphaType.h:27
void registerChild(std::unique_ptr< GrFragmentProcessor > child, SkSL::SampleUsage sampleUsage=SkSL::SampleUsage::PassThrough())
@ kTessellate_GrModulateAtlasCoverageEffect_ClassID
Definition GrProcessor.h:86
static std::unique_ptr< GrFragmentProcessor > Make(GrSurfaceProxyView, SkAlphaType, const SkMatrix &=SkMatrix::I(), GrSamplerState::Filter=GrSamplerState::Filter::kNearest, GrSamplerState::MipmapMode mipmapMode=GrSamplerState::MipmapMode::kNone)
static SampleUsage Explicit()
FlutterSemanticsFlag flags

◆ GrModulateAtlasCoverageEffect() [2/2]

GrModulateAtlasCoverageEffect::GrModulateAtlasCoverageEffect ( const GrModulateAtlasCoverageEffect that)

Definition at line 45 of file GrModulateAtlasCoverageEffect.cpp.

48 , fFlags(that.fFlags)
49 , fBounds(that.fBounds) {}

Member Function Documentation

◆ clone()

std::unique_ptr< GrFragmentProcessor > GrModulateAtlasCoverageEffect::clone ( ) const
inlineoverridevirtual

Makes a copy of this fragment processor that draws equivalently to the original. If the processor has child processors they are cloned as well.

Implements GrFragmentProcessor.

Definition at line 43 of file GrModulateAtlasCoverageEffect.h.

43 {
44 return std::make_unique<GrModulateAtlasCoverageEffect>(*this);
45 }

◆ GR_DECL_BITFIELD_CLASS_OPS_FRIENDS()

GrModulateAtlasCoverageEffect::GR_DECL_BITFIELD_CLASS_OPS_FRIENDS ( Flags  )

◆ name()

const char * GrModulateAtlasCoverageEffect::name ( ) const
inlineoverridevirtual

Human-meaningful string to identify this processor; may be embedded in generated shader code and must be a legal SkSL identifier prefix.

Implements GrProcessor.

Definition at line 39 of file GrModulateAtlasCoverageEffect.h.

39 {
40 return "GrModulateAtlasCoverageFP";
41 }

◆ onAddToKey()

void GrModulateAtlasCoverageEffect::onAddToKey ( const GrShaderCaps ,
skgpu::KeyBuilder b 
) const
overrideprivatevirtual

Implements GrFragmentProcessor.

Definition at line 51 of file GrModulateAtlasCoverageEffect.cpp.

52 {
53 b->add32(fFlags & Flags::kCheckBounds);
54}
static bool b

◆ onIsEqual()

bool GrModulateAtlasCoverageEffect::onIsEqual ( const GrFragmentProcessor ) const
inlineoverrideprivatevirtual

Subclass implements this to support isEqual(). It will only be called if it is known that the two processors are of the same subclass (i.e. have the same ClassID).

Implements GrFragmentProcessor.

Definition at line 50 of file GrModulateAtlasCoverageEffect.h.

50 {
51 auto fp = that.cast<GrModulateAtlasCoverageEffect>();
52 return fFlags == fp.fFlags && fBounds == fp.fBounds;
53 }
const uint32_t fp

◆ onMakeProgramImpl()

std::unique_ptr< GrFragmentProcessor::ProgramImpl > GrModulateAtlasCoverageEffect::onMakeProgramImpl ( ) const
overrideprivatevirtual

Returns a new instance of the appropriate ProgramImpl subclass for the given GrFragmentProcessor. It will emit the appropriate code and live with the cached program to setup uniform data for each draw that uses the program.

Implements GrFragmentProcessor.

Definition at line 57 of file GrModulateAtlasCoverageEffect.cpp.

57 {
58 class Impl : public ProgramImpl {
59 void emitCode(EmitArgs& args) override {
60 auto fp = args.fFp.cast<GrModulateAtlasCoverageEffect>();
61 auto f = args.fFragBuilder;
62 auto uniHandler = args.fUniformHandler;
63 SkString inputColor = this->invokeChild(0, args);
64 f->codeAppend("half coverage = 0;");
65 if (fp.fFlags & Flags::kCheckBounds) {
66 const char* boundsName;
67 fBoundsUniform = uniHandler->addUniform(&fp, kFragment_GrShaderFlag,
68 SkSLType::kFloat4, "bounds", &boundsName);
69 // Are we inside the path's valid atlas bounds?
70 f->codeAppendf("if (all(greaterThan(sk_FragCoord.xy, %s.xy)) && "
71 "all(lessThan(sk_FragCoord.xy, %s.zw))) ",
72 boundsName, boundsName);
73 }
74 f->codeAppendf("{");
75 SkString atlasCoverage = this->invokeChild(1, args, "sk_FragCoord.xy");
76 f->codeAppendf("coverage = %s.a;", atlasCoverage.c_str());
77 f->codeAppendf("}");
78 const char* coverageMaybeInvertName;
79 fCoverageMaybeInvertUniform = uniHandler->addUniform(&fp, kFragment_GrShaderFlag,
80 SkSLType::kHalf2, "coverageInvert",
81 &coverageMaybeInvertName);
82 // Invert coverage, if needed.
83 f->codeAppendf("coverage = coverage * %s.x + %s.y;",
84 coverageMaybeInvertName, coverageMaybeInvertName);
85 f->codeAppendf("return %s * coverage;", inputColor.c_str());
86 }
87
88 private:
89 void onSetData(const GrGLSLProgramDataManager& pdman,
90 const GrFragmentProcessor& processor) override {
91 const auto& fp = processor.cast<GrModulateAtlasCoverageEffect>();
92 if (fp.fFlags & Flags::kCheckBounds) {
93 pdman.set4fv(fBoundsUniform, 1, SkRect::Make(fp.fBounds).asScalars());
94 }
95 if (fp.fFlags & Flags::kInvertCoverage) {
96 pdman.set2f(fCoverageMaybeInvertUniform, -1, 1); // -1*coverage + 1 = 1 - coverage.
97 } else {
98 pdman.set2f(fCoverageMaybeInvertUniform, 1, 0); // 1*coverage + 0 = coverage.
99 }
100 }
101 UniformHandle fBoundsUniform;
102 UniformHandle fCoverageMaybeInvertUniform;
103 };
104
105 return std::make_unique<Impl>();
106}
@ kFragment_GrShaderFlag
virtual void set4fv(UniformHandle, int arrayCount, const float v[]) const =0
virtual void set2f(UniformHandle, float, float) const =0
const T & cast() const
const char * c_str() const
Definition SkString.h:133
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
static SkRect Make(const SkISize &size)
Definition SkRect.h:669
const float * asScalars() const
Definition SkRect.h:1340

The documentation for this class was generated from the following files: