From 936abafde9e91faf47ef7aefd87b152d0407145a Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Fri, 28 Nov 2025 22:37:49 +0800 Subject: [PATCH] Revert "[Improvement] (MG_State/TextureState): Separate TextureStorage.h into .cpp/.h" This reverts commit 657c672899683ed7927c8472ca7075e655047d16. --- CMakeLists.txt | 1 - .../GLState/TextureState/TextureStorage.cpp | 90 ------------------ .../GLState/TextureState/TextureStorage.h | 92 ++++++++++++++++--- 3 files changed, 78 insertions(+), 105 deletions(-) delete mode 100644 MobileGL/MG_State/GLState/TextureState/TextureStorage.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 87f01bed..2adb7e21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,7 +146,6 @@ set(SOURCE_FILES MobileGL/MG_State/GLState/TextureState/TextureObject2D.cpp MobileGL/MG_State/GLState/TextureState/TextureObject2DCube.cpp MobileGL/MG_State/GLState/TextureState/TextureObject3D.cpp - MobileGL/MG_State/GLState/TextureState/TextureStorage.cpp MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp MobileGL/MG_State/GLState/TextureState/TextureState.cpp MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp diff --git a/MobileGL/MG_State/GLState/TextureState/TextureStorage.cpp b/MobileGL/MG_State/GLState/TextureState/TextureStorage.cpp deleted file mode 100644 index e805a661..00000000 --- a/MobileGL/MG_State/GLState/TextureState/TextureStorage.cpp +++ /dev/null @@ -1,90 +0,0 @@ -#include "TextureStorage.h" - -namespace MobileGL { - namespace MG_State { - namespace GLState { - template - TextureStorage::TextureStorage() { - static_assert(TargetCount > 0, "Mipmap size must be greater than zero"); - } - - template - void TextureStorage::AllocateLevel(Uint targetIndex, Uint level, MipmapInput input) { - MOBILEGL_ASSERT(targetIndex < TargetCount, "AllocateLevel: target invalid"); - - auto& targetData = m_data[targetIndex]; - targetData.reserve(std::bit_ceil(level + 1)); - targetData.resize(level + 1); - auto& targetTexelSizes = m_texelSizes[targetIndex]; - targetTexelSizes.reserve(std::bit_ceil(level + 1)); - targetTexelSizes.resize(level + 1); - targetTexelSizes[level] = input.texelSize; - auto& dirtyArr = m_isDirty[targetIndex]; - dirtyArr.resize(level + 1, false); - - auto& data = targetData[level]; - data.resize(input.byteSize, 0); - } - - template - void TextureStorage::UpdateSubData(Uint targetIndex, Uint level, DataPtr input) { - MOBILEGL_ASSERT(targetIndex < TargetCount, "UpdateSubData: target invalid"); - auto& targetData = m_data[targetIndex]; - MOBILEGL_ASSERT(level < targetData.size(), "UpdateSubData: level out of range"); - auto& levelData = targetData[level]; - MOBILEGL_ASSERT(levelData.size() < input.size, "UpdateSubData: input data larger than allocated"); - - if (input.data && input.size > 0) { - const Uint8* src = static_cast(input.data); - Memcpy(levelData.data(), src, input.size); - m_isDirty[targetIndex][level] = true; - } - } - - template - void* TextureStorage::MapData(Uint targetIndex, Uint level) { - MOBILEGL_ASSERT(targetIndex < TargetCount, "UpdateSubData: target invalid"); - auto& targetData = m_data[targetIndex]; - MOBILEGL_ASSERT(level < targetData.size(), "UpdateSubData: level out of range"); - auto& levelData = targetData[level]; - return levelData.data(); - } - - template - IntVec3 TextureStorage::GetTexelSize(Uint targetIndex, Uint level) const { - MOBILEGL_ASSERT(targetIndex < TargetCount, "GetTexelSize: target invalid"); - - auto& targetTexelSizes = m_texelSizes[targetIndex]; - if (level >= targetTexelSizes.size()) return {0, 0, 0}; - return targetTexelSizes[level]; - } - - template - SizeT TextureStorage::GetByteSize(Uint targetIndex, Uint level) const { - MOBILEGL_ASSERT(targetIndex < TargetCount, "GetByteSize: target invalid"); - - auto& data = m_data[targetIndex]; - return data[level].size(); - } - - template - SizeT TextureStorage::GetLevelCount() const { - return m_data[0].size(); - } - - template - void TextureStorage::MarkDirty(Uint targetIndex, Uint level, bool dirty) { - MOBILEGL_ASSERT(targetIndex < TargetCount, "MarkDirty: target invalid"); - MOBILEGL_ASSERT(level < m_isDirty[targetIndex].size(), "MarkDirty: level out of range"); - m_isDirty[targetIndex][level] = dirty; - } - - template - bool TextureStorage::IsDirty(Uint targetIndex, Uint level) const { - MOBILEGL_ASSERT(targetIndex < TargetCount, "IsDirty: target invalid"); - MOBILEGL_ASSERT(level < m_isDirty[targetIndex].size(), "IsDirty: level out of range"); - return m_isDirty[targetIndex][level]; - } - } // namespace GLState - } // namespace MG_State -} // namespace MobileGL diff --git a/MobileGL/MG_State/GLState/TextureState/TextureStorage.h b/MobileGL/MG_State/GLState/TextureState/TextureStorage.h index 9a950421..ecbebe57 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureStorage.h +++ b/MobileGL/MG_State/GLState/TextureState/TextureStorage.h @@ -1,7 +1,7 @@ #pragma once -#include -#include #include "TextureEnum.h" +#include "MG_Util/Types.h" +#include "MG_Util/Math/VectorTypes.h" namespace MobileGL { namespace MG_State { @@ -14,22 +14,86 @@ namespace MobileGL { template class TextureStorage { public: - TextureStorage(); + TextureStorage() { + static_assert(TargetCount > 0, "Mipmap size must be greater than zero"); + } - void AllocateLevel(Uint targetIndex, Uint level, MipmapInput input); - void UpdateSubData(Uint targetIndex, Uint level, DataPtr input); - void* MapData(Uint targetIndex, Uint level); - IntVec3 GetTexelSize(Uint targetIndex, Uint level) const; - SizeT GetByteSize(Uint targetIndex, Uint level) const; - SizeT GetLevelCount() const; - void MarkDirty(Uint targetIndex, Uint level, bool dirty); - bool IsDirty(Uint targetIndex, Uint level) const; + void AllocateLevel(Uint targetIndex, Uint level, MipmapInput input) { + MOBILEGL_ASSERT(targetIndex < TargetCount, "AllocateLevel: target invalid"); + + auto& targetData = m_data[targetIndex]; + targetData.reserve(std::bit_ceil(level + 1)); + targetData.resize(level + 1); + auto& targetTexelSizes = m_texelSizes[targetIndex]; + targetTexelSizes.reserve(std::bit_ceil(level + 1)); + targetTexelSizes.resize(level + 1); + targetTexelSizes[level] = input.texelSize; + auto& dirtyArr = m_isDirty[targetIndex]; + dirtyArr.resize(level + 1, false); + + auto& data = targetData[level]; + data.resize(input.byteSize, 0); + } + + void UpdateSubData(Uint targetIndex, Uint level, DataPtr input) { + MOBILEGL_ASSERT(targetIndex < TargetCount, "UpdateSubData: target invalid"); + auto& targetData = m_data[targetIndex]; + MOBILEGL_ASSERT(level < targetData.size(), "UpdateSubData: level out of range"); + auto& levelData = targetData[level]; + MOBILEGL_ASSERT(levelData.size() < input.size, "UpdateSubData: input data larger than allocated"); + + if (input.data && input.size > 0) { + const Uint8* src = static_cast(input.data); + Memcpy(levelData.data(), src, input.size); + m_isDirty[targetIndex][level] = true; + } + } + + void* MapData(Uint targetIndex, Uint level) { + MOBILEGL_ASSERT(targetIndex < TargetCount, "UpdateSubData: target invalid"); + auto& targetData = m_data[targetIndex]; + MOBILEGL_ASSERT(level < targetData.size(), "UpdateSubData: level out of range"); + auto& levelData = targetData[level]; + return levelData.data(); + } + + IntVec3 GetTexelSize(Uint targetIndex, Uint level) const { + MOBILEGL_ASSERT(targetIndex < TargetCount, "GetTexelSize: target invalid"); + + auto& targetTexelSizes = m_texelSizes[targetIndex]; + if (level >= targetTexelSizes.size()) + return {0, 0, 0}; + return targetTexelSizes[level]; + } + + SizeT GetByteSize(Uint targetIndex, Uint level) const { + MOBILEGL_ASSERT(targetIndex < TargetCount, "GetByteSize: target invalid"); + + auto& data = m_data[targetIndex]; + return data[level].size(); + } + + SizeT GetLevelCount() const { + return m_data[0].size(); + } + + void MarkDirty(Uint targetIndex, Uint level, bool dirty) { + MOBILEGL_ASSERT(targetIndex < TargetCount, "MarkDirty: target invalid"); + MOBILEGL_ASSERT(level < m_isDirty[targetIndex].size(), "MarkDirty: level out of range"); + m_isDirty[targetIndex][level] = dirty; + } + + bool IsDirty(Uint targetIndex, Uint level) const { + MOBILEGL_ASSERT(targetIndex < TargetCount, "IsDirty: target invalid"); + MOBILEGL_ASSERT(level < m_isDirty[targetIndex].size(), "IsDirty: level out of range"); + return m_isDirty[targetIndex][level]; + } protected: Array, TargetCount> m_texelSizes; Array>, TargetCount> m_data; Array, TargetCount> m_isDirty; }; - } // namespace GLState - } // namespace MG_State -} // namespace MobileGL + } + } +}