Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
skgpu::graphite::PrecompileImageShader Class Reference
Inheritance diagram for skgpu::graphite::PrecompileImageShader:
skgpu::graphite::PrecompileShader skgpu::graphite::PrecompileBase SkRefCnt SkRefCntBase

Public Member Functions

 PrecompileImageShader (SkEnumBitMask< PrecompileImageShaderFlags > flags)
 
- Public Member Functions inherited from skgpu::graphite::PrecompileShader
 PrecompileShader ()
 
virtual bool isConstant (int desiredCombination) const
 
sk_sp< PrecompileShadermakeWithLocalMatrix ()
 
sk_sp< PrecompileShadermakeWithColorFilter (sk_sp< PrecompileColorFilter >)
 
sk_sp< PrecompileShadermakeWithWorkingColorSpace (sk_sp< SkColorSpace >)
 
sk_sp< PrecompileShadermakeWithCTM ()
 
- Public Member Functions inherited from skgpu::graphite::PrecompileBase
 PrecompileBase (Type type)
 
Type type () const
 
virtual int numChildCombinations () const
 
int numCombinations () const
 
PrecompileBasePriv priv ()
 
const PrecompileBasePriv priv () const
 
- Public Member Functions inherited from SkRefCntBase
 SkRefCntBase ()
 
virtual ~SkRefCntBase ()
 
bool unique () const
 
void ref () const
 
void unref () const
 

Private Member Functions

int numIntrinsicCombinations () const override
 
void addToKey (const KeyContext &keyContext, PaintParamsKeyBuilder *builder, PipelineDataGatherer *gatherer, int desiredCombination) const override
 

Additional Inherited Members

- Public Types inherited from skgpu::graphite::PrecompileBase
enum class  Type {
  kBlender , kColorFilter , kImageFilter , kMaskFilter ,
  kShader
}
 
- Static Protected Member Functions inherited from skgpu::graphite::PrecompileBase
template<typename T >
static std::pair< sk_sp< T >, intSelectOption (SkSpan< const sk_sp< T > > options, int desiredOption)
 
template<typename T >
static void AddToKey (const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, SkSpan< const sk_sp< T > > options, int desiredOption)
 

Detailed Description

Definition at line 407 of file FactoryFunctions.cpp.

Constructor & Destructor Documentation

◆ PrecompileImageShader()

skgpu::graphite::PrecompileImageShader::PrecompileImageShader ( SkEnumBitMask< PrecompileImageShaderFlags flags)
inline

Definition at line 409 of file FactoryFunctions.cpp.

409: fFlags(flags) {}
FlutterSemanticsFlag flags

Member Function Documentation

◆ addToKey()

void skgpu::graphite::PrecompileImageShader::addToKey ( const KeyContext keyContext,
PaintParamsKeyBuilder builder,
PipelineDataGatherer gatherer,
int  desiredCombination 
) const
inlineoverrideprivatevirtual

Implements skgpu::graphite::PrecompileBase.

Definition at line 435 of file FactoryFunctions.cpp.

438 {
439 SkASSERT(desiredCombination < this->numIntrinsicCombinations());
440
441 int desiredAlphaCombo, desiredSamplingTilingCombo;
442
444 desiredAlphaCombo = kNonAlphaOnly;
445 desiredSamplingTilingCombo = desiredCombination;
446 } else {
447 desiredAlphaCombo = desiredCombination % kNumAlphaCombinations;
448 desiredSamplingTilingCombo = desiredCombination / kNumAlphaCombinations;
449 }
450 SkDEBUGCODE(int numSamplingTilingCombos =
451 (fFlags & PrecompileImageShaderFlags::kExcludeCubic) ? 2 : kNumSamplingTilingCombos;)
452 SkASSERT(desiredSamplingTilingCombo < numSamplingTilingCombos);
453
454 static constexpr SkSamplingOptions kDefaultCubicSampling(SkCubicResampler::Mitchell());
455 static constexpr SkSamplingOptions kDefaultSampling;
456 constexpr ReadSwizzle kIgnoredSwizzle = ReadSwizzle::kRGBA;
457
458 // ImageShaderBlock will use hardware tiling when the subset covers the entire image, so we
459 // create subset + image size combinations where subset == imgSize (for a shader that uses
460 // hardware tiling) and subset < imgSize (for a shader that does shader-based tiling).
461 static constexpr SkRect kSubset = SkRect::MakeWH(1.0f, 1.0f);
462 static constexpr SkISize kHWTileableSize = SkISize::Make(1, 1);
463 static constexpr SkISize kShaderTileableSize = SkISize::Make(2, 2);
464
465 ImageShaderBlock::ImageData imgData(
466 desiredSamplingTilingCombo == kCubicSampled ? kDefaultCubicSampling
467 : kDefaultSampling,
469 desiredSamplingTilingCombo == kHWTiled ? kHWTileableSize : kShaderTileableSize,
470 kSubset, kIgnoredSwizzle);
471
472 if (desiredAlphaCombo == kAlphaOnly) {
474
475 Blend(keyContext, builder, gatherer,
476 /* addBlendToKey= */ [&] () -> void {
477 AddKnownModeBlend(keyContext, builder, gatherer, SkBlendMode::kDstIn);
478 },
479 /* addSrcToKey= */ [&] () -> void {
480 ImageShaderBlock::AddBlock(keyContext, builder, gatherer, imgData);
481 },
482 /* addDstToKey= */ [&]() -> void {
483 RGBPaintColorBlock::AddBlock(keyContext, builder, gatherer);
484 });
485 } else {
486 ImageShaderBlock::AddBlock(keyContext, builder, gatherer, imgData);
487 }
488 }
#define SkASSERT(cond)
Definition SkAssert.h:116
@ kDstIn
r = d * sa
#define SkDEBUGCODE(...)
Definition SkDebug.h:23
SkTileMode
Definition SkTileMode.h:13
void AddKnownModeBlend(const KeyContext &keyContext, PaintParamsKeyBuilder *builder, PipelineDataGatherer *gatherer, SkBlendMode bm)
void Blend(const KeyContext &keyContext, PaintParamsKeyBuilder *keyBuilder, PipelineDataGatherer *gatherer, AddToKeyFn addBlendToKey, AddToKeyFn addSrcToKey, AddToKeyFn addDstToKey)
static constexpr SkCubicResampler Mitchell()
static constexpr SkISize Make(int32_t w, int32_t h)
Definition SkSize.h:20
static constexpr SkRect MakeWH(float w, float h)
Definition SkRect.h:609
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *, const ImageData &)
static void AddBlock(const KeyContext &, PaintParamsKeyBuilder *, PipelineDataGatherer *)

◆ numIntrinsicCombinations()

int skgpu::graphite::PrecompileImageShader::numIntrinsicCombinations ( ) const
inlineoverrideprivatevirtual

Reimplemented from skgpu::graphite::PrecompileBase.

Definition at line 424 of file FactoryFunctions.cpp.

424 {
425 int numSamplingTilingCombos =
426 (fFlags & PrecompileImageShaderFlags::kExcludeCubic) ? 2 : kNumSamplingTilingCombos;
427
429 // RawImageShaders don't blend alpha-only images w/ the paint color
430 return numSamplingTilingCombos;
431 }
432 return numSamplingTilingCombos * kNumAlphaCombinations;
433 }

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