/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_MutableTextureStatePriv_DEFINED #define skgpu_MutableTextureStatePriv_DEFINED #include "include/core/SkTypes.h" #include "include/gpu/MutableTextureState.h" namespace skgpu { enum class BackendApi : unsigned int; class MutableTextureStateData { public: virtual ~MutableTextureStateData(); #if defined(SK_DEBUG) virtual BackendApi type() const = 0; #endif protected: MutableTextureStateData() = default; MutableTextureStateData(const MutableTextureStateData&) = default; using AnyStateData = MutableTextureState::AnyStateData; private: friend class MutableTextureState; virtual void copyTo(AnyStateData&) const = 0; }; class MutableTextureStatePriv final { public: template static MutableTextureState MakeMutableTextureState(BackendApi backend, const StateData& data) { return MutableTextureState(backend, data); } static const MutableTextureStateData* GetStateData(const MutableTextureState& mts) { return mts.fStateData.get(); } static const MutableTextureStateData* GetStateData(const MutableTextureState* mts) { SkASSERT(mts); return mts->fStateData.get(); } static MutableTextureStateData* GetStateData(MutableTextureState* mts) { SkASSERT(mts); return mts->fStateData.get(); } }; } // namespace skgpu #endif