8 #ifndef SkXfermode_DEFINED
9 #define SkXfermode_DEFINED
11 #include "SkFlattenable.h"
17 class SkRasterPipeline;
21 typedef SkPM4f (*SkXfermodeProc4f)(
const SkPM4f& src,
const SkPM4f& dst);
38 virtual void xfer16(uint16_t dst[],
const SkPMColor src[],
int count,
90 kLastCoeffMode = kScreen_Mode,
102 kLastSeparableMode = kMultiply_Mode,
108 kLastMode = kLuminosity_Mode
114 static const char* ModeName(Mode);
121 virtual bool asMode(Mode* mode)
const;
127 static bool AsMode(
const SkXfermode*, Mode* mode);
129 return AsMode(xfer.get(), mode);
142 static bool IsMode(
const SkXfermode* xfer, Mode mode);
144 return IsMode(xfer.get(), mode);
150 #ifdef SK_SUPPORT_LEGACY_XFERMODE_PTR
152 return Make(mode).release();
154 SK_ATTR_DEPRECATED(
"use AsMode(...)")
155 static
bool IsMode(const
SkXfermode* xfer, Mode* mode) {
156 return AsMode(xfer, mode);
164 static SkXfermodeProc4f GetProc4f(Mode);
166 virtual SkXfermodeProc4f getProc4f()
const;
168 bool appendStages(SkRasterPipeline*)
const;
176 static bool ModeAsCoeff(Mode mode, Coeff* src, Coeff* dst);
181 virtual bool supportsCoverageAsAlpha()
const;
187 static bool SupportsCoverageAsAlpha(
const SkXfermode* xfer);
189 return SupportsCoverageAsAlpha(xfer.get());
192 enum SrcColorOpacity {
194 kOpaque_SrcColorOpacity = 0,
196 kTransparentBlack_SrcColorOpacity = 1,
198 kTransparentAlpha_SrcColorOpacity = 2,
200 kUnknown_SrcColorOpacity = 3
208 virtual bool isOpaque(SrcColorOpacity opacityType)
const;
214 static bool IsOpaque(
const SkXfermode* xfer, SrcColorOpacity opacityType);
215 static bool IsOpaque(
const sk_sp<SkXfermode>& xfer, SrcColorOpacity opacityType) {
216 return IsOpaque(xfer.get(), opacityType);
236 SK_TO_STRING_PUREVIRT()
237 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
241 kSrcIsOpaque_D32Flag = 1 << 0,
242 kSrcIsSingle_D32Flag = 1 << 1,
243 kDstIsSRGB_D32Flag = 1 << 2,
245 typedef void (*D32Proc)(
const SkXfermode*, uint32_t dst[],
const SkPM4f src[],
246 int count,
const SkAlpha coverage[]);
247 static D32Proc GetD32Proc(
SkXfermode*, uint32_t flags);
249 return GetD32Proc(xfer.get(), flags);
253 kSrcIsOpaque_F16Flag = 1 << 0,
254 kSrcIsSingle_F16Flag = 1 << 1,
256 typedef void (*F16Proc)(
const SkXfermode*, uint64_t dst[],
const SkPM4f src[],
int count,
258 static F16Proc GetF16Proc(
SkXfermode*, uint32_t flags);
260 return GetF16Proc(xfer.get(), flags);
264 kSrcIsOpaque_LCDFlag = 1 << 0,
265 kSrcIsSingle_LCDFlag = 1 << 1,
266 kDstIsSRGB_LCDFlag = 1 << 2,
268 typedef void (*LCD32Proc)(uint32_t* dst,
const SkPM4f* src,
int count,
const uint16_t lcd[]);
269 typedef void (*LCDF16Proc)(uint64_t* dst,
const SkPM4f* src,
int count,
const uint16_t lcd[]);
270 static LCD32Proc GetLCD32Proc(uint32_t flags);
271 static LCDF16Proc GetLCDF16Proc(uint32_t) {
return nullptr; }
285 virtual D32Proc onGetD32Proc(uint32_t flags)
const;
286 virtual F16Proc onGetF16Proc(uint32_t flags)
const;
287 virtual bool onAppendStages(SkRasterPipeline*)
const;
291 kModeCount = kLastMode + 1
0
Definition: SkXfermode.h:47
src alpha
Definition: SkXfermode.h:53
[Sa * (1 - Da), Sc * (1 - Da)]
Definition: SkXfermode.h:79
src color
Definition: SkXfermode.h:49
[Sa, Sc]
Definition: SkXfermode.h:73
Provides custom fragment shader code.
Definition: GrFragmentProcessor.h:24
inverse src color (i.e.
Definition: SkXfermode.h:50
Mode
List of predefined xfermodes.
Definition: SkXfermode.h:71
inverse dst color (i.e.
Definition: SkXfermode.h:52
[Sa + Da * (1 - Sa), Sc + Dc * (1 - Sa)]
Definition: SkXfermode.h:75
[Da * Sa, Dc * Sa]
Definition: SkXfermode.h:78
[Da, Sc * Da + Dc * (1 - Sa)]
Definition: SkXfermode.h:81
[Sa + Da, Sc + Dc]
Definition: SkXfermode.h:84
uint8_t SkAlpha
8-bit type for an alpha value.
Definition: SkColor.h:22
inverse src alpha (i.e.
Definition: SkXfermode.h:54
[0, 0]
Definition: SkXfermode.h:72
SkXfermode is the base class for objects that are called to implement custom "transfer-modes" in the ...
Definition: SkXfermode.h:34
SkFlattenable is the base class for objects that need to be flattened into a data stream for either t...
Definition: SkFlattenable.h:70
[Sa * Da, Sc * Da]
Definition: SkXfermode.h:77
[Da + Sa * (1 - Da), Dc + Sc * (1 - Da)]
Definition: SkXfermode.h:76
SkPMColor(* SkXfermodeProc)(SkPMColor src, SkPMColor dst)
Define a function pointer type for combining two premultiplied colors.
Definition: SkColor.h:160
[Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + Dc * (1 - Sa)]
Definition: SkXfermode.h:83
1
Definition: SkXfermode.h:48
[Sa, Dc * Sa + Sc * (1 - Da)]
Definition: SkXfermode.h:82
dst alpha
Definition: SkXfermode.h:55
[Da * (1 - Sa), Dc * (1 - Sa)]
Definition: SkXfermode.h:80
uint32_t SkPMColor
32 bit ARGB color value, premultiplied.
Definition: SkColor.h:147
dst color
Definition: SkXfermode.h:51
[Da, Dc]
Definition: SkXfermode.h:74
Definition: GrTexture.h:19
We install a GrXPFactory (XPF) early on in the pipeline before all the final draw information is know...
Definition: GrXferProcessor.h:301
Coeff
Enum of possible coefficients to describe some xfermodes.
Definition: SkXfermode.h:45
Light weight class for managing strings.
Definition: SkString.h:121
Types and macros for colors.