From 4eba01451378381cfd82b69af0f8887c919ea6a4 Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Tue, 12 Aug 2025 18:11:36 +0800 Subject: [PATCH] [Fix] (MG_State/TextureState): Fix incorrect behavior. --- MobileGL/MG_State/GLState/Core.cpp | 4 ++-- MobileGL/MG_State/GLState/Core.h | 3 ++- MobileGL/MG_State/GLState/TextureState/TextureObject.h | 2 +- MobileGL/MG_State/GLState/TextureState/TextureState.cpp | 6 +++--- MobileGL/MG_State/GLState/TextureState/TextureState.h | 2 +- MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp | 4 ++++ MobileGL/MG_State/GLState/TextureState/TextureUnit.h | 1 + 7 files changed, 14 insertions(+), 8 deletions(-) diff --git a/MobileGL/MG_State/GLState/Core.cpp b/MobileGL/MG_State/GLState/Core.cpp index 3f28f6f4..57f35fad 100644 --- a/MobileGL/MG_State/GLState/Core.cpp +++ b/MobileGL/MG_State/GLState/Core.cpp @@ -136,8 +136,8 @@ namespace MobileGL { m_textureState.MarkTextureObjectForDeletion(index); } - TextureUnit& GLContext::GetTextureUnitObject() { - return m_textureState.GetUnitObject(); + TextureUnit& GLContext::GetTextureUnitObject(Int unit) { + return m_textureState.GetUnitObject(unit); } Bool GLContext::ValidateTextureName(Uint index) const { diff --git a/MobileGL/MG_State/GLState/Core.h b/MobileGL/MG_State/GLState/Core.h index e57d0785..3efc751b 100644 --- a/MobileGL/MG_State/GLState/Core.h +++ b/MobileGL/MG_State/GLState/Core.h @@ -48,7 +48,7 @@ namespace MobileGL { SharedPtr GetTextureObject(Uint index); SharedPtr CreateTextureObject(Uint index, TextureTarget target); void MarkTextureObjectForDeletion(Uint index); - TextureUnit& GetTextureUnitObject(); + TextureUnit& GetTextureUnitObject(Int unit); Bool ValidateTextureName(Uint index) const; Bool ValidateTextureObject(Uint index) const; Int GetActiveTextureUnit() const; @@ -64,6 +64,7 @@ namespace MobileGL { SharedPtr GetProgramObject(Uint index); SharedPtr GetShaderObject(Uint index); void UseProgram(Uint program); + private: // Error ErrorState m_errorState; diff --git a/MobileGL/MG_State/GLState/TextureState/TextureObject.h b/MobileGL/MG_State/GLState/TextureState/TextureObject.h index 07ce0553..01d64d3f 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureObject.h +++ b/MobileGL/MG_State/GLState/TextureState/TextureObject.h @@ -21,7 +21,7 @@ namespace MobileGL { Red, RG, RGB, - BFR, + BGR, RGBA, BGRA, RInteger, diff --git a/MobileGL/MG_State/GLState/TextureState/TextureState.cpp b/MobileGL/MG_State/GLState/TextureState/TextureState.cpp index 12800dcc..a01830d7 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureState.cpp +++ b/MobileGL/MG_State/GLState/TextureState/TextureState.cpp @@ -64,11 +64,11 @@ namespace MobileGL { } } - TextureUnit& TextureState::GetUnitObject() { - if (m_activeTextureUnit < 0 || m_activeTextureUnit >= MAX_TEXTURE_IMAGE_UNITS) { + TextureUnit& TextureState::GetUnitObject(Int unit) { + if (unit < 0 || unit >= MAX_TEXTURE_IMAGE_UNITS) { THROW_EXCEPTION("Active texture unit is out of range"); } - return m_textureUnits[m_activeTextureUnit]; + return m_textureUnits[unit]; } Int TextureState::GetActiveTextureUnit() const { diff --git a/MobileGL/MG_State/GLState/TextureState/TextureState.h b/MobileGL/MG_State/GLState/TextureState/TextureState.h index 33264659..fb944159 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureState.h +++ b/MobileGL/MG_State/GLState/TextureState/TextureState.h @@ -16,7 +16,7 @@ namespace MobileGL { Vector GenerateNames(Uint number); SharedPtr CreateTextureObject(Uint index, TextureTarget target); SharedPtr GetTextureObject(Uint index); - TextureUnit& GetUnitObject(); + TextureUnit& GetUnitObject(Int unit); Int GetActiveTextureUnit() const; void SetActiveTextureUnit(Int unit); void MarkTextureObjectForDeletion(Uint index); diff --git a/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp b/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp index 487be899..1fdd368d 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp +++ b/MobileGL/MG_State/GLState/TextureState/TextureUnit.cpp @@ -18,6 +18,10 @@ namespace MobileGL { GetAllBindingSlots() { return m_slots; } + + void TextureUnit::SetSamplerObject(SharedPtr sampler) { + m_sampler = sampler; + } } // namespace GLState } // namespace MG_State } // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_State/GLState/TextureState/TextureUnit.h b/MobileGL/MG_State/GLState/TextureState/TextureUnit.h index 3a9c829e..84136fd5 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureUnit.h +++ b/MobileGL/MG_State/GLState/TextureState/TextureUnit.h @@ -13,6 +13,7 @@ namespace MobileGL { BindingSlot& GetBindingSlot(TextureTarget target); SharedPtr GetSamplerObject() const; Array, (int)TextureTarget::TextureTargetCount>& GetAllBindingSlots(); + void SetSamplerObject(SharedPtr sampler); private: Array, (int)TextureTarget::TextureTargetCount> m_slots;