• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2022 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef skgpu_graphite_PaintOptionsPriv_DEFINED
9 #define skgpu_graphite_PaintOptionsPriv_DEFINED
10 
11 #include "include/gpu/graphite/precompile/PaintOptions.h"
12 
13 namespace skgpu::graphite {
14 
15 class ShaderCodeDictionary;
16 
17 /** Class that exposes methods in PaintOptions that are only intended for use internal to Skia.
18     This class is purely a privileged window into PaintOptions. It should never have additional
19     data members or virtual methods. */
20 class PaintOptionsPriv {
21 public:
22     using ProcessCombination = PaintOptions::ProcessCombination;
23 
addColorFilter(sk_sp<PrecompileColorFilter> cf)24     void addColorFilter(sk_sp<PrecompileColorFilter> cf) {
25         fPaintOptions->addColorFilter(std::move(cf));
26     }
27 
setClipShaders(SkSpan<const sk_sp<PrecompileShader>> clipShaders)28     void setClipShaders(SkSpan<const sk_sp<PrecompileShader>> clipShaders) {
29         fPaintOptions->setClipShaders(std::move(clipShaders));
30     }
31 
numCombinations()32     int numCombinations() const {
33         return fPaintOptions->numCombinations();
34     }
35 
buildCombinations(const KeyContext & keyContext,PipelineDataGatherer * gatherer,DrawTypeFlags drawTypes,bool withPrimitiveBlender,Coverage coverage,const ProcessCombination & processCombination)36     void buildCombinations(
37             const KeyContext& keyContext,
38             PipelineDataGatherer* gatherer,
39             DrawTypeFlags drawTypes,
40             bool withPrimitiveBlender,
41             Coverage coverage,
42             const ProcessCombination& processCombination) const {
43         fPaintOptions->buildCombinations(
44                 keyContext, gatherer, drawTypes, withPrimitiveBlender, coverage, processCombination);
45     }
46 
47 private:
48     friend class PaintOptions; // to construct/copy this type.
49 
PaintOptionsPriv(PaintOptions * paintOptions)50     explicit PaintOptionsPriv(PaintOptions* paintOptions) : fPaintOptions(paintOptions) {}
51 
52     PaintOptionsPriv& operator=(const PaintOptionsPriv&) = delete;
53 
54     // No taking addresses of this type.
55     const PaintOptionsPriv* operator&() const;
56     PaintOptionsPriv *operator&();
57 
58     PaintOptions* fPaintOptions;
59 };
60 
priv()61 inline PaintOptionsPriv PaintOptions::priv() { return PaintOptionsPriv(this); }
62 
63 // NOLINTNEXTLINE(readability-const-return-type)
priv()64 inline const PaintOptionsPriv PaintOptions::priv() const {
65     return PaintOptionsPriv(const_cast<PaintOptions *>(this));
66 }
67 
68 } // namespace skgpu::graphite
69 
70 #endif // skgpu_graphite_PaintOptionsPriv_DEFINED
71