blob: e91ee8a74399cc910207140715b1fbe91a0b98be [file] [log] [blame]
/*
* Copyright 2024 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef skgpu_graphite_precompile_PaintOption_DEFINED
#define skgpu_graphite_precompile_PaintOption_DEFINED
#include "include/core/SkBlendMode.h"
#include "include/core/SkColorType.h"
#include "include/core/SkRefCnt.h"
#include "src/gpu/graphite/Caps.h"
#include "src/gpu/graphite/Renderer.h"
namespace skgpu::graphite {
class PrecompileBlender;
class PrecompileColorFilter;
class PrecompileShader;
class KeyContext;
class PaintParamsKeyBuilder;
class PipelineDataGatherer;
class FloatStorageManager;
class PaintOption {
public:
PaintOption(bool opaquePaintColor,
const std::pair<sk_sp<PrecompileBlender>, int>& finalBlender,
const std::pair<sk_sp<PrecompileShader>, int>& shader,
const std::pair<sk_sp<PrecompileColorFilter>, int>& colorFilter,
bool hasPrimitiveBlender,
SkBlendMode primitiveBlendMode,
bool skipColorXform,
const std::pair<sk_sp<PrecompileShader>, int>& clipShader,
Coverage coverage,
TextureFormat targetFormat,
bool dither,
bool analyticClip);
const PrecompileBlender* finalBlender() const { return fFinalBlender.first.get(); }
void toKey(const KeyContext&) const;
private:
void addPaintColorToKey(const KeyContext&) const;
void handlePrimitiveColor(const KeyContext&) const;
void handlePaintAlpha(const KeyContext&) const;
void handleColorFilter(const KeyContext&) const;
bool shouldDither(SkColorType dstCT) const;
void handleDithering(const KeyContext&) const;
void handleClipping(const KeyContext&) const;
bool fOpaquePaintColor;
std::pair<sk_sp<PrecompileBlender>, int> fFinalBlender;
std::pair<sk_sp<PrecompileShader>, int> fShader;
std::pair<sk_sp<PrecompileColorFilter>, int> fColorFilter;
SkBlendMode fPrimitiveBlendMode;
bool fHasPrimitiveBlender;
bool fSkipColorXform;
std::pair<sk_sp<PrecompileShader>, int> fClipShader;
Coverage fRendererCoverage;
TextureFormat fTargetFormat;
bool fDither;
bool fAnalyticClip;
};
} // namespace skgpu::graphite
#endif // skgpu_graphite_precompile_PaintOption_DEFINED