Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
SkWorkingFormatColorFilter Class Referencefinal

#include <SkWorkingFormatColorFilter.h>

Inheritance diagram for SkWorkingFormatColorFilter:
SkColorFilterBase SkColorFilter SkFlattenable SkRefCnt SkRefCntBase

Public Member Functions

 SkWorkingFormatColorFilter (sk_sp< SkColorFilter > child, const skcms_TransferFunction *tf, const skcms_Matrix3x3 *gamut, const SkAlphaType *at)
 
sk_sp< SkColorSpaceworkingFormat (const sk_sp< SkColorSpace > &dstCS, SkAlphaType *at) const
 
SkColorFilterBase::Type type () const override
 
bool appendStages (const SkStageRec &rec, bool shaderIsOpaque) const override
 
SkPMColor4f onFilterColor4f (const SkPMColor4f &origColor, SkColorSpace *rawDstCS) const override
 
bool onIsAlphaUnchanged () const override
 
sk_sp< SkColorFilterchild () const
 
- Public Member Functions inherited from SkColorFilterBase
bool affectsTransparentBlack () const
 
virtual SkRuntimeEffectasRuntimeEffect () const
 
SkFlattenable::Type getFlattenableType () const override
 
- Public Member Functions inherited from SkColorFilter
bool asAColorMode (SkColor *color, SkBlendMode *mode) const
 
bool asAColorMatrix (float matrix[20]) const
 
bool isAlphaUnchanged () const
 
SkColor filterColor (SkColor) const
 
SkColor4f filterColor4f (const SkColor4f &srcColor, SkColorSpace *srcCS, SkColorSpace *dstCS) const
 
sk_sp< SkColorFiltermakeComposed (sk_sp< SkColorFilter > inner) const
 
sk_sp< SkColorFiltermakeWithWorkingColorSpace (sk_sp< SkColorSpace >) const
 
- Public Member Functions inherited from SkFlattenable
 SkFlattenable ()
 
virtual Factory getFactory () const =0
 
virtual const char * getTypeName () const =0
 
sk_sp< SkDataserialize (const SkSerialProcs *=nullptr) const
 
size_t serialize (void *memory, size_t memory_size, const SkSerialProcs *=nullptr) const
 
- Public Member Functions inherited from SkRefCntBase
 SkRefCntBase ()
 
virtual ~SkRefCntBase ()
 
bool unique () const
 
void ref () const
 
void unref () const
 

Private Member Functions

void flatten (SkWriteBuffer &buffer) const override
 

Additional Inherited Members

- Public Types inherited from SkColorFilterBase
enum class  Type { kNoop , M }
 
- Public Types inherited from SkFlattenable
enum  Type {
  kSkColorFilter_Type , kSkBlender_Type , kSkDrawable_Type , kSkDrawLooper_Type ,
  kSkImageFilter_Type , kSkMaskFilter_Type , kSkPathEffect_Type , kSkShader_Type
}
 
typedef sk_sp< SkFlattenable >(* Factory) (SkReadBuffer &)
 
- Static Public Member Functions inherited from SkColorFilterBase
static SkFlattenable::Type GetFlattenableType ()
 
static sk_sp< SkColorFilterDeserialize (const void *data, size_t size, const SkDeserialProcs *procs=nullptr)
 
- Static Public Member Functions inherited from SkColorFilter
static sk_sp< SkColorFilterDeserialize (const void *data, size_t size, const SkDeserialProcs *procs=nullptr)
 
- Static Public Member Functions inherited from SkFlattenable
static Factory NameToFactory (const char name[])
 
static const char * FactoryToName (Factory)
 
static void Register (const char name[], Factory)
 
static sk_sp< SkFlattenableDeserialize (Type, const void *data, size_t length, const SkDeserialProcs *procs=nullptr)
 
- Protected Member Functions inherited from SkColorFilterBase
 SkColorFilterBase ()
 
virtual bool onAsAColorMatrix (float[20]) const
 
virtual bool onAsAColorMode (SkColor *color, SkBlendMode *bmode) const
 

Detailed Description

Definition at line 23 of file SkWorkingFormatColorFilter.h.

Constructor & Destructor Documentation

◆ SkWorkingFormatColorFilter()

SkWorkingFormatColorFilter::SkWorkingFormatColorFilter ( sk_sp< SkColorFilter child,
const skcms_TransferFunction tf,
const skcms_Matrix3x3 gamut,
const SkAlphaType at 
)

Definition at line 27 of file SkWorkingFormatColorFilter.cpp.

30 {
31 fChild = std::move(child);
32 if (tf) {
33 fTF = *tf;
34 fUseDstTF = false;
35 }
36 if (gamut) {
37 fGamut = *gamut;
38 fUseDstGamut = false;
39 }
40 if (at) {
41 fAT = *at;
42 fUseDstAT = false;
43 }
44}
sk_sp< SkColorFilter > child() const

Member Function Documentation

◆ appendStages()

bool SkWorkingFormatColorFilter::appendStages ( const SkStageRec rec,
bool  shaderIsOpaque 
) const
overridevirtual

Implements SkColorFilterBase.

Definition at line 62 of file SkWorkingFormatColorFilter.cpp.

62 {
64
65 if (!dstCS) {
66 dstCS = SkColorSpace::MakeSRGB();
67 }
68
69 SkAlphaType workingAT;
70 sk_sp<SkColorSpace> workingCS = this->workingFormat(dstCS, &workingAT);
71
73 working = {rec.fDstColorType, workingAT, workingCS};
74
75 const auto* dstToWorking = rec.fAlloc->make<SkColorSpaceXformSteps>(dst, working);
76 const auto* workingToDst = rec.fAlloc->make<SkColorSpaceXformSteps>(working, dst);
77
78 // The paint color is in the destination color space, so *should* be coverted to working space.
79 // That's not necessary, though:
80 // - Tinting alpha-only image shaders is the only effect that uses paint-color
81 // - Alpha-only image shaders can't be reached from color-filters without SkSL
82 // - SkSL disables paint-color tinting of alpha-only image shaders
83
84 SkStageRec workingRec = {rec.fPipeline,
85 rec.fAlloc,
86 rec.fDstColorType,
87 workingCS.get(),
88 rec.fPaintColor,
89 rec.fSurfaceProps};
90
91 dstToWorking->apply(rec.fPipeline);
92 if (!as_CFB(fChild)->appendStages(workingRec, shaderIsOpaque)) {
93 return false;
94 }
95 workingToDst->apply(rec.fPipeline);
96 return true;
97}
SkAlphaType
Definition SkAlphaType.h:26
@ kPremul_SkAlphaType
pixel components are premultiplied by alpha
Definition SkAlphaType.h:29
static SkColorFilterBase * as_CFB(SkColorFilter *filter)
sk_sp< T > sk_ref_sp(T *obj)
Definition SkRefCnt.h:381
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
virtual bool appendStages(const SkStageRec &rec, bool shaderIsOpaque) const =0
static sk_sp< SkColorSpace > MakeSRGB()
sk_sp< SkColorSpace > workingFormat(const sk_sp< SkColorSpace > &dstCS, SkAlphaType *at) const
T * get() const
Definition SkRefCnt.h:303
dst
Definition cp.py:12
void apply(float rgba[4]) const
const SkSurfaceProps & fSurfaceProps
SkColor4f fPaintColor
SkRasterPipeline * fPipeline
SkColorSpace * fDstCS
SkArenaAlloc * fAlloc
SkColorType fDstColorType

◆ child()

sk_sp< SkColorFilter > SkWorkingFormatColorFilter::child ( ) const
inline

Definition at line 43 of file SkWorkingFormatColorFilter.h.

43{ return fChild; }

◆ flatten()

void SkWorkingFormatColorFilter::flatten ( SkWriteBuffer ) const
overrideprivatevirtual

Override this if your subclass needs to record data that it will need to recreate itself from its CreateProc (returned by getFactory()).

DEPRECATED public : will move to protected ... use serialize() instead

Reimplemented from SkFlattenable.

Definition at line 121 of file SkWorkingFormatColorFilter.cpp.

121 {
122 buffer.writeFlattenable(fChild.get());
123 buffer.writeBool(fUseDstTF);
124 buffer.writeBool(fUseDstGamut);
125 buffer.writeBool(fUseDstAT);
126 if (!fUseDstTF) {
127 buffer.writeScalarArray(&fTF.g, 7);
128 }
129 if (!fUseDstGamut) {
130 buffer.writeScalarArray(&fGamut.vals[0][0], 9);
131 }
132 if (!fUseDstAT) {
133 buffer.writeInt(fAT);
134 }
135}
static const uint8_t buffer[]
float vals[3][3]

◆ onFilterColor4f()

SkPMColor4f SkWorkingFormatColorFilter::onFilterColor4f ( const SkPMColor4f origColor,
SkColorSpace rawDstCS 
) const
overridevirtual

Reimplemented from SkColorFilterBase.

Definition at line 99 of file SkWorkingFormatColorFilter.cpp.

100 {
101 sk_sp<SkColorSpace> dstCS = sk_ref_sp(rawDstCS);
102 if (!dstCS) {
103 dstCS = SkColorSpace::MakeSRGB();
104 }
105
106 SkAlphaType workingAT;
107 sk_sp<SkColorSpace> workingCS = this->workingFormat(dstCS, &workingAT);
108
110 working = {kUnknown_SkColorType, workingAT, workingCS};
111
112 SkPMColor4f color = origColor;
113 SkColorSpaceXformSteps{dst, working}.apply(color.vec());
114 color = as_CFB(fChild)->onFilterColor4f(color, working.colorSpace());
115 SkColorSpaceXformSteps{working, dst}.apply(color.vec());
116 return color;
117}
SkColor4f color
@ kUnknown_SkColorType
uninitialized
Definition SkColorType.h:20
virtual SkPMColor4f onFilterColor4f(const SkPMColor4f &color, SkColorSpace *dstCS) const

◆ onIsAlphaUnchanged()

bool SkWorkingFormatColorFilter::onIsAlphaUnchanged ( ) const
overridevirtual

Returns the flags for this filter. Override in subclasses to return custom flags.

Reimplemented from SkColorFilterBase.

Definition at line 119 of file SkWorkingFormatColorFilter.cpp.

119{ return fChild->isAlphaUnchanged(); }
bool isAlphaUnchanged() const

◆ type()

SkColorFilterBase::Type SkWorkingFormatColorFilter::type ( ) const
inlineoverridevirtual

Implements SkColorFilterBase.

Definition at line 32 of file SkWorkingFormatColorFilter.h.

32 {
33 return SkColorFilterBase::Type::kWorkingFormat;
34 }

◆ workingFormat()

sk_sp< SkColorSpace > SkWorkingFormatColorFilter::workingFormat ( const sk_sp< SkColorSpace > &  dstCS,
SkAlphaType at 
) const

Definition at line 46 of file SkWorkingFormatColorFilter.cpp.

47 {
49 skcms_Matrix3x3 gamut = fGamut;
50
51 if (fUseDstTF) {
53 }
54 if (fUseDstGamut) {
55 SkAssertResult(dstCS->toXYZD50(&gamut));
56 }
57
58 *at = fUseDstAT ? kPremul_SkAlphaType : fAT;
59 return SkColorSpace::MakeRGB(tf, gamut);
60}
#define SkAssertResult(cond)
Definition SkAssert.h:123
bool isNumericalTransferFn(skcms_TransferFunction *fn) const
bool toXYZD50(skcms_Matrix3x3 *toXYZD50) const
static sk_sp< SkColorSpace > MakeRGB(const skcms_TransferFunction &transferFn, const skcms_Matrix3x3 &toXYZ)

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