[Feat] (MG_State/Program): GetProgramiv: GL_ACTIVE_UNIFORM_BLOCKS, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH

This commit is contained in:
2025-08-15 17:31:58 +08:00
parent ec95c0401a
commit a050248982
3 changed files with 16 additions and 2 deletions
@@ -238,11 +238,16 @@ namespace MobileGL {
case GL_ACTIVE_UNIFORM_MAX_LENGTH: case GL_ACTIVE_UNIFORM_MAX_LENGTH:
*params = programObject->GetUniformMaxLength(); *params = programObject->GetUniformMaxLength();
break; break;
case GL_PROGRAM_BINARY_LENGTH:
case GL_ACTIVE_UNIFORM_BLOCKS: // GL >= 3.1 case GL_ACTIVE_UNIFORM_BLOCKS: // GL >= 3.1
*params = programObject->GetActiveUniformBlocksCount();
break;
case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: // ditto. case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: // ditto.
*params = programObject->GetActiveUniformBlocksMaxLength();
break;
case GL_COMPUTE_WORK_GROUP_SIZE: // GL >= 4.3 case GL_COMPUTE_WORK_GROUP_SIZE: // GL >= 4.3
case GL_PROGRAM_BINARY_LENGTH:
case GL_TRANSFORM_FEEDBACK_BUFFER_MODE: case GL_TRANSFORM_FEEDBACK_BUFFER_MODE:
case GL_TRANSFORM_FEEDBACK_VARYINGS: case GL_TRANSFORM_FEEDBACK_VARYINGS:
case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH:
@@ -94,6 +94,12 @@ namespace MobileGL {
auto& inVar = m_program->getPipeInput(i); auto& inVar = m_program->getPipeInput(i);
m_attribInNameMaxLength = std::max(m_attribInNameMaxLength, (Int)inVar.name.length()); 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() { // void ProgramObject::PreLink() {
@@ -35,7 +35,9 @@ namespace MobileGL {
Bool GetValidateStatus() const { return m_validateStatus; } Bool GetValidateStatus() const { return m_validateStatus; }
Int GetActiveAtomicCounterCount() const { return m_program->getNumAtomicCounters(); } Int GetActiveAtomicCounterCount() const { return m_program->getNumAtomicCounters(); }
Int GetActiveAttributesCount() const { return m_program->getNumPipeInputs(); } Int GetActiveAttributesCount() const { return m_program->getNumPipeInputs(); }
Int GetActiveUniformBlocksCount() const { return m_program->getNumUniformBlocks(); }
Int GetActiveAttributesMaxLength() const { return m_attribInNameMaxLength; } Int GetActiveAttributesMaxLength() const { return m_attribInNameMaxLength; }
Int GetActiveUniformBlocksMaxLength() const { return m_uniformBlockNameMaxLength; }
private: private:
void DoReflection(); void DoReflection();
// void PreLink(); // void PreLink();
@@ -57,9 +59,10 @@ namespace MobileGL {
Vector<Uint> m_uniformOffsets; Vector<Uint> m_uniformOffsets;
Vector<Uint8> m_uboScratch; Vector<Uint8> m_uboScratch;
Int m_uniformNameMaxLength = 0;
Uint m_maxUniformLocation = 0; Uint m_maxUniformLocation = 0;
Int m_uniformNameMaxLength = 0;
Int m_attribInNameMaxLength = 0; Int m_attribInNameMaxLength = 0;
Int m_uniformBlockNameMaxLength = 0;
String m_infoLog; String m_infoLog;
Bool m_deleteStatus = false; Bool m_deleteStatus = false;