Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
PorterDuffXferProcessor Class Reference
Inheritance diagram for PorterDuffXferProcessor:
GrXferProcessor GrProcessor GrNonAtomicRef< GrXferProcessor > SkNoncopyable

Public Member Functions

 PorterDuffXferProcessor (BlendFormula blendFormula, GrProcessorAnalysisCoverage coverage)
 
const char * name () const override
 
std::unique_ptr< ProgramImplmakeProgramImpl () const override
 
BlendFormula getBlendFormula () const
 
- Public Member Functions inherited from GrXferProcessor
void addToKey (const GrShaderCaps &, skgpu::KeyBuilder *, const GrSurfaceOrigin *originIfDstTexture, bool usesInputAttachmentForDstRead) const
 
virtual GrXferBarrierType xferBarrierType (const GrCaps &caps) const
 
skgpu::BlendInfo getBlendInfo () const
 
bool willReadDstColor () const
 
bool hasSecondaryOutput () const
 
bool isLCD () const
 
bool isEqual (const GrXferProcessor &that) 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
 
- Public Member Functions inherited from GrNonAtomicRef< GrXferProcessor >
 GrNonAtomicRef ()
 
bool unique () const
 
int refCnt () const
 
void ref () const
 
void unref () const
 
- Public Member Functions inherited from SkNoncopyable
 SkNoncopyable ()=default
 
 SkNoncopyable (SkNoncopyable &&)=default
 
SkNoncopyableoperator= (SkNoncopyable &&)=default
 

Private Member Functions

void onAddToKey (const GrShaderCaps &, skgpu::KeyBuilder *) const override
 
bool onHasSecondaryOutput () const override
 
void onGetBlendInfo (skgpu::BlendInfo *blendInfo) const override
 
bool onIsEqual (const GrXferProcessor &xpBase) const override
 

Additional Inherited Members

- 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
}
 
- Protected Member Functions inherited from GrXferProcessor
 GrXferProcessor (ClassID classID)
 
 GrXferProcessor (ClassID classID, bool willReadDstColor, GrProcessorAnalysisCoverage)
 
- Protected Member Functions inherited from GrProcessor
 GrProcessor (ClassID classID)
 
 GrProcessor (const GrProcessor &)=delete
 
GrProcessoroperator= (const GrProcessor &)=delete
 
- Protected Attributes inherited from GrProcessor
const ClassID fClassID
 

Detailed Description

Definition at line 36 of file GrPorterDuffXferProcessor.cpp.

Constructor & Destructor Documentation

◆ PorterDuffXferProcessor()

PorterDuffXferProcessor::PorterDuffXferProcessor ( BlendFormula  blendFormula,
GrProcessorAnalysisCoverage  coverage 
)
inline

Definition at line 38 of file GrPorterDuffXferProcessor.cpp.

39 : INHERITED(kPorterDuffXferProcessor_ClassID, /*willReadDstColor=*/false, coverage)
40 , fBlendFormula(blendFormula) {
41 }
@ kPorterDuffXferProcessor_ClassID
Definition GrProcessor.h:77

Member Function Documentation

◆ getBlendFormula()

BlendFormula PorterDuffXferProcessor::getBlendFormula ( ) const
inline

Definition at line 47 of file GrPorterDuffXferProcessor.cpp.

47{ return fBlendFormula; }

◆ makeProgramImpl()

std::unique_ptr< GrXferProcessor::ProgramImpl > PorterDuffXferProcessor::makeProgramImpl ( ) const
overridevirtual

Returns a new instance of the appropriate GL implementation class for the given GrXferProcessor; caller is responsible for deleting the object.

Implements GrXferProcessor.

Definition at line 109 of file GrPorterDuffXferProcessor.cpp.

109 {
110 class Impl : public ProgramImpl {
111 private:
112 void emitOutputsForBlendState(const EmitArgs& args) override {
114 GrGLSLXPFragmentBuilder* fragBuilder = args.fXPFragBuilder;
115
116 const BlendFormula& blendFormula = xp.fBlendFormula;
117 if (blendFormula.hasSecondaryOutput()) {
119 fragBuilder,
120 blendFormula.secondaryOutput(),
121 args.fOutputSecondary,
122 args.fInputColor,
123 args.fInputCoverage);
124 }
126 fragBuilder,
127 blendFormula.primaryOutput(),
128 args.fOutputPrimary,
129 args.fInputColor,
130 args.fInputCoverage);
131 }
132 };
133
134 return std::make_unique<Impl>();
135}
static void append_color_output(const PorterDuffXferProcessor &xp, GrGLSLXPFragmentBuilder *fragBuilder, BlendFormula::OutputType outputType, const char *output, const char *inColor, const char *inCoverage)
const T & cast() const
OutputType secondaryOutput() const
OutputType primaryOutput() const
bool hasSecondaryOutput() const
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args

◆ name()

const char * PorterDuffXferProcessor::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 43 of file GrPorterDuffXferProcessor.cpp.

43{ return "Porter Duff"; }

◆ onAddToKey()

void PorterDuffXferProcessor::onAddToKey ( const GrShaderCaps ,
skgpu::KeyBuilder  
) const
overrideprivatevirtual

Adds a key on the skgpu::KeyBuilder that reflects any variety in the code that may be emitted by the xfer processor subclass.

Implements GrXferProcessor.

Definition at line 104 of file GrPorterDuffXferProcessor.cpp.

104 {
105 b->add32(fBlendFormula.primaryOutput() | (fBlendFormula.secondaryOutput() << 3));
106 static_assert(BlendFormula::kLast_OutputType < 8);
107}
static bool b

◆ onGetBlendInfo()

void PorterDuffXferProcessor::onGetBlendInfo ( skgpu::BlendInfo ) const
inlineoverrideprivatevirtual

If we are not performing a dst read, retrieves the fixed-function blend state required by the subclass. When using dst reads, the base class controls the fixed-function blend state and this method will not be called. The BlendInfo struct comes initialized to "no blending".

Reimplemented from GrXferProcessor.

Definition at line 54 of file GrPorterDuffXferProcessor.cpp.

54 {
55 blendInfo->fEquation = fBlendFormula.equation();
56 blendInfo->fSrcBlend = fBlendFormula.srcCoeff();
57 blendInfo->fDstBlend = fBlendFormula.dstCoeff();
58 blendInfo->fWritesColor = fBlendFormula.modifiesDst();
59 }
skgpu::BlendEquation equation() const
skgpu::BlendCoeff dstCoeff() const
skgpu::BlendCoeff srcCoeff() const
bool modifiesDst() const

◆ onHasSecondaryOutput()

bool PorterDuffXferProcessor::onHasSecondaryOutput ( ) const
inlineoverrideprivatevirtual

If we are not performing a dst read, returns whether the subclass will set a secondary output. When using dst reads, the base class controls the secondary output and this method will not be called.

Reimplemented from GrXferProcessor.

Definition at line 52 of file GrPorterDuffXferProcessor.cpp.

52{ return fBlendFormula.hasSecondaryOutput(); }

◆ onIsEqual()

bool PorterDuffXferProcessor::onIsEqual ( const GrXferProcessor xpBase) const
inlineoverrideprivatevirtual

Implements GrXferProcessor.

Definition at line 61 of file GrPorterDuffXferProcessor.cpp.

61 {
63 return fBlendFormula == xp.fBlendFormula;
64 }

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