/* * Copyright 2022 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_PrecompileBasePriv_DEFINED #define skgpu_graphite_PrecompileBasePriv_DEFINED #include "src/gpu/graphite/Precompile.h" namespace skgpu::graphite { /** Class that exposes methods to PrecompileBase that are only intended for use internal to Skia. This class is purely a privileged window into PrecompileBase. It should never have additional data members or virtual methods. */ class PrecompileBasePriv { public: bool isALocalMatrixShader() const { return fPrecompileBase->isALocalMatrixShader(); } void addToKey(const KeyContext& keyContext, int desiredCombination, PaintParamsKeyBuilder* builder) const { fPrecompileBase->addToKey(keyContext, desiredCombination, builder); } private: friend class PrecompileBase; // to construct/copy this type. explicit PrecompileBasePriv(PrecompileBase* precompileBase) : fPrecompileBase(precompileBase) { } PrecompileBasePriv& operator=(const PrecompileBasePriv&) = delete; // No taking addresses of this type. const PrecompileBasePriv* operator&() const; PrecompileBasePriv *operator&(); PrecompileBase* fPrecompileBase; }; inline PrecompileBasePriv PrecompileBase::priv() { return PrecompileBasePriv(this); } // NOLINTNEXTLINE(readability-const-return-type) inline const PrecompileBasePriv PrecompileBase::priv() const { return PrecompileBasePriv(const_cast(this)); } } // namespace skgpu::graphite #endif // skgpu_graphite_PrecompileBasePriv_DEFINED