From a050248982d5403a0e04312dffa7ebe73d15ef33 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Fri, 15 Aug 2025 17:31:58 +0800 Subject: [PATCH] [Feat] (MG_State/Program): GetProgramiv: GL_ACTIVE_UNIFORM_BLOCKS, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH --- MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp | 7 ++++++- MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp | 6 ++++++ MobileGL/MG_State/GLState/ProgramState/ProgramObject.h | 5 ++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp index a94d7f9a..0f0b3ed5 100644 --- a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp +++ b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp @@ -238,11 +238,16 @@ namespace MobileGL { case GL_ACTIVE_UNIFORM_MAX_LENGTH: *params = programObject->GetUniformMaxLength(); break; - case GL_PROGRAM_BINARY_LENGTH: case GL_ACTIVE_UNIFORM_BLOCKS: // GL >= 3.1 + *params = programObject->GetActiveUniformBlocksCount(); + break; case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: // ditto. + *params = programObject->GetActiveUniformBlocksMaxLength(); + break; case GL_COMPUTE_WORK_GROUP_SIZE: // GL >= 4.3 + case GL_PROGRAM_BINARY_LENGTH: + case GL_TRANSFORM_FEEDBACK_BUFFER_MODE: case GL_TRANSFORM_FEEDBACK_VARYINGS: case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index 07b24256..e87a1982 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -94,6 +94,12 @@ namespace MobileGL { auto& inVar = m_program->getPipeInput(i); m_attribInNameMaxLength = std::max(m_attribInNameMaxLength, (Int)inVar.name.length()); } + + int uboCount = m_program->getNumUniformBlocks(); + for (int i = 0; i < uboCount; i++) { + auto& ubo = m_program->getUniformBlock(i); + m_uniformBlockNameMaxLength = std::max(m_uniformBlockNameMaxLength, (Int)ubo.name.length()); + } } // void ProgramObject::PreLink() { diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h index e06c815b..76a65543 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h @@ -35,7 +35,9 @@ namespace MobileGL { Bool GetValidateStatus() const { return m_validateStatus; } Int GetActiveAtomicCounterCount() const { return m_program->getNumAtomicCounters(); } Int GetActiveAttributesCount() const { return m_program->getNumPipeInputs(); } + Int GetActiveUniformBlocksCount() const { return m_program->getNumUniformBlocks(); } Int GetActiveAttributesMaxLength() const { return m_attribInNameMaxLength; } + Int GetActiveUniformBlocksMaxLength() const { return m_uniformBlockNameMaxLength; } private: void DoReflection(); // void PreLink(); @@ -57,9 +59,10 @@ namespace MobileGL { Vector m_uniformOffsets; Vector m_uboScratch; - Int m_uniformNameMaxLength = 0; Uint m_maxUniformLocation = 0; + Int m_uniformNameMaxLength = 0; Int m_attribInNameMaxLength = 0; + Int m_uniformBlockNameMaxLength = 0; String m_infoLog; Bool m_deleteStatus = false;