| /* | |
| * 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 <typename StateData> | |
| 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 |