From ee971306ca178aee5728f97d967bf1eb53e20f72 Mon Sep 17 00:00:00 2001 From: BZLZHH Date: Thu, 2 Oct 2025 15:11:38 +0800 Subject: [PATCH] [Misc] (All): Run format_code.sh --- MobileGL/Defines.h | 2 +- MobileGL/MG_Backend/Backends.h | 67 +- .../MG_Benchmark/Program/ProgramBench.cpp | 15 +- MobileGL/MG_Benchmark/SanityBench.cpp | 11 +- .../MG_Impl/GLImpl/Program/GL_Program.cpp | 401 ++--- .../MG_State/GLState/ErrorState/ErrorCode.h | 2 +- .../GLState/ProgramState/ProgramObject.cpp | 81 +- .../GLState/ProgramState/ProgramObject.h | 31 +- .../GLState/ProgramState/ProgramState.cpp | 9 +- .../GLState/ProgramState/ProgramState.h | 5 +- .../GLState/ProgramState/ShaderObject.cpp | 10 +- .../GLState/ProgramState/ShaderObject.h | 31 +- MobileGL/MG_Test/Buffer/BufferTest.cpp | 134 +- MobileGL/MG_Test/Program/ProgramTest.cpp | 106 +- MobileGL/MG_Test/Program/ProgramUtilTest.cpp | 70 +- MobileGL/MG_Test/SanityTest.cpp | 8 +- .../SPIRVCrossToGL/SpvcTypeConverter.cpp | 165 +- MobileGL/MG_Util/Debug/Log.cpp | 11 +- MobileGL/MG_Util/GLExtensions.h | 1526 ++++++++--------- MobileGL/MG_Util/Metrics/BufferMetrics.cpp | 18 +- MobileGL/MG_Util/Metrics/BufferMetrics.h | 10 +- .../ShaderTranspiler/ShaderCompiler.cpp | 7 +- .../MG_Util/ShaderTranspiler/SpvcSession.cpp | 3 +- .../MG_Util/ShaderTranspiler/SpvcSession.h | 35 +- .../glslang/UniformTraverser.cpp | 62 +- .../glslang/UniformTraverser.h | 27 +- 26 files changed, 1355 insertions(+), 1492 deletions(-) diff --git a/MobileGL/Defines.h b/MobileGL/Defines.h index 5fc3f202..5e134166 100644 --- a/MobileGL/Defines.h +++ b/MobileGL/Defines.h @@ -6,7 +6,7 @@ #endif #ifdef _WIN32 -# ifndef NOMINMAX +#ifndef NOMINMAX #define NOMINMAX 1 // prevent Windows.h from defining min and max macros #endif #endif diff --git a/MobileGL/MG_Backend/Backends.h b/MobileGL/MG_Backend/Backends.h index 1c71f70b..04957613 100644 --- a/MobileGL/MG_Backend/Backends.h +++ b/MobileGL/MG_Backend/Backends.h @@ -7,16 +7,17 @@ namespace MobileGL { namespace MG_Backend { namespace Unknown { const RendererInfo RendererInfoUnknown = { - "", // Renderer Name - "", // Backend Name - ", ", // Extra vendor - { // OpenGL Info - {3, 3, 0}, // Target OpenGL Version - {4, 6, 0}, // Target Shading Language Version - { }, // OpenGL Extensions - false // Is Compatibility Profile - }, - { } // Backend Capability + "", // Renderer Name + "", // Backend Name + ", ", // Extra vendor + { + // OpenGL Info + {3, 3, 0}, // Target OpenGL Version + {4, 6, 0}, // Target Shading Language Version + {}, // OpenGL Extensions + false // Is Compatibility Profile + }, + {} // Backend Capability }; } @@ -27,31 +28,33 @@ namespace MobileGL { }; const RendererInfo RendererInfoVulkan = { - "MobileGlued-vk", // Renderer Name - "Diligent Engine (Vulkan)", // Backend Name - Nullopt, // Extra vendor - { // OpenGL Info - {3, 3, 0}, // Target OpenGL Version - {4, 6, 0}, // Target Shading Language Version - {V_OpenGL30, V_OpenGL31, V_OpenGL32, // OpenGL Extensions - V_OpenGL33}, - false // Is Compatibility Profile - }, - { } // Backend Capability + "MobileGlued-vk", // Renderer Name + "Diligent Engine (Vulkan)", // Backend Name + Nullopt, // Extra vendor + { + // OpenGL Info + {3, 3, 0}, // Target OpenGL Version + {4, 6, 0}, // Target Shading Language Version + {V_OpenGL30, V_OpenGL31, V_OpenGL32, // OpenGL Extensions + V_OpenGL33}, + false // Is Compatibility Profile + }, + {} // Backend Capability }; const RendererInfo RendererInfoMetal = { - "MobileGlued-mtl", // Renderer Name - "Diligent Engine (Metal)", // Backend Name - Nullopt, // Extra vendor - { // OpenGL Info - {3, 3, 0}, // Target OpenGL Version - {4, 6, 0}, // Target Shading Language Version - {V_OpenGL30, V_OpenGL31, V_OpenGL32, // OpenGL Extensions - V_OpenGL33}, - false // Is Compatibility Profile - }, - { } // Backend Capability + "MobileGlued-mtl", // Renderer Name + "Diligent Engine (Metal)", // Backend Name + Nullopt, // Extra vendor + { + // OpenGL Info + {3, 3, 0}, // Target OpenGL Version + {4, 6, 0}, // Target Shading Language Version + {V_OpenGL30, V_OpenGL31, V_OpenGL32, // OpenGL Extensions + V_OpenGL33}, + false // Is Compatibility Profile + }, + {} // Backend Capability }; } // namespace Diligent diff --git a/MobileGL/MG_Benchmark/Program/ProgramBench.cpp b/MobileGL/MG_Benchmark/Program/ProgramBench.cpp index d047f43f..34d934b5 100644 --- a/MobileGL/MG_Benchmark/Program/ProgramBench.cpp +++ b/MobileGL/MG_Benchmark/Program/ProgramBench.cpp @@ -92,11 +92,11 @@ static void BM_CompileVertexShader(benchmark::State& state) { GLuint vs = CreateShader(GL_VERTEX_SHADER); ShaderSource(vs, 1, &vsSrc, NULL); CompileShader(vs); - + // Cleanup DeleteShader(vs); } - + // Set the counter for Compiles/Second state.counters["VS_Compiles/Second"] = state.iterations(); state.counters["VS_Bytes/Second"] = state.iterations() * vsLen; @@ -117,11 +117,11 @@ static void BM_CompileFragmentShader(benchmark::State& state) { GLuint fs = CreateShader(GL_FRAGMENT_SHADER); ShaderSource(fs, 1, &fsSrc, NULL); CompileShader(fs); - + // Cleanup DeleteShader(fs); } - + // Set the counter for Compiles/Second state.counters["FS_Compiles/Second"] = state.iterations(); state.counters["FS_Bytes/Second"] = state.iterations() * fsLen; @@ -142,17 +142,17 @@ static void BM_CompileBothShaders(benchmark::State& state) { GLuint vs = CreateShader(GL_VERTEX_SHADER); ShaderSource(vs, 1, &vsSrc, NULL); CompileShader(vs); - + // Create and compile fragment shader GLuint fs = CreateShader(GL_FRAGMENT_SHADER); ShaderSource(fs, 1, &fsSrc, NULL); CompileShader(fs); - + // Cleanup DeleteShader(vs); DeleteShader(fs); } - + // Set the counter for Compiles/Second state.counters["VS_Compiles/Second"] = state.iterations(); state.counters["FS_Compiles/Second"] = state.iterations(); @@ -227,7 +227,6 @@ static void BM_CompileAndLink(benchmark::State& state) { DeleteShader(fs); } - // Set the counter for Compiles/Second state.counters["VS_Compiles/Second"] = state.iterations(); state.counters["FS_Compiles/Second"] = state.iterations(); diff --git a/MobileGL/MG_Benchmark/SanityBench.cpp b/MobileGL/MG_Benchmark/SanityBench.cpp index ace37cb8..28f39494 100644 --- a/MobileGL/MG_Benchmark/SanityBench.cpp +++ b/MobileGL/MG_Benchmark/SanityBench.cpp @@ -10,11 +10,9 @@ static void Sanity_VectorResize(benchmark::State& state) { v[i] = i; } } - state.SetBytesProcessed(int64_t(state.iterations()) * - int64_t(state.range(0))); + state.SetBytesProcessed(int64_t(state.iterations()) * int64_t(state.range(0))); } -BENCHMARK(Sanity_VectorResize)->Arg(2<<5)->Arg(2<<10)->Arg(2<<20); - +BENCHMARK(Sanity_VectorResize)->Arg(2 << 5)->Arg(2 << 10)->Arg(2 << 20); static void Sanity_memcpy(benchmark::State& state) { char* src = new char[state.range(0)]; @@ -22,11 +20,10 @@ static void Sanity_memcpy(benchmark::State& state) { memset(src, 'x', state.range(0)); for (auto _ : state) memcpy(dst, src, state.range(0)); - state.SetBytesProcessed(int64_t(state.iterations()) * - int64_t(state.range(0))); + state.SetBytesProcessed(int64_t(state.iterations()) * int64_t(state.range(0))); delete[] src; delete[] dst; } -BENCHMARK(Sanity_memcpy)->Range(8, 8<<10); +BENCHMARK(Sanity_memcpy)->Range(8, 8 << 10); BENCHMARK_MAIN(); \ No newline at end of file diff --git a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp index b38dffa1..502c31d2 100644 --- a/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp +++ b/MobileGL/MG_Impl/GLImpl/Program/GL_Program.cpp @@ -17,15 +17,13 @@ namespace MobileGL { } static SharedPtr TryToGetShaderObject(Uint shader) { - if (!CheckShaderNameValidity(shader)) - return nullptr; + if (!CheckShaderNameValidity(shader)) return nullptr; auto shaderObject = MG_State::pGLContext->GetShaderObject(shader); if (!shaderObject) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "`shader` is not a shader object.")); + MakeShared("MG_Impl/GLImpl", __func__, "`shader` is not a shader object.")); return nullptr; } return shaderObject; @@ -43,24 +41,21 @@ namespace MobileGL { } static SharedPtr TryToGetProgramObject(GLuint program) { - if (!CheckProgramNameValidity(program)) - return nullptr; + if (!CheckProgramNameValidity(program)) return nullptr; auto programObject = MG_State::pGLContext->GetProgramObject(program); if (!programObject) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "`program` is not a program object.")); + MakeShared("MG_Impl/GLImpl", __func__, "`program` is not a program object.")); return nullptr; } return programObject; } - void CopyStr(GLsizei bufSize, GLsizei *length, GLchar *dst, const char* src, GLsizei srcLength) { + void CopyStr(GLsizei bufSize, GLsizei* length, GLchar* dst, const char* src, GLsizei srcLength) { auto sz = std::min(bufSize - 1, srcLength); - if (length) - *length = sz; + if (length) *length = sz; if (bufSize == 0) return; @@ -70,11 +65,9 @@ namespace MobileGL { void AttachShader_State(GLuint program, GLuint shader) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; if (!programObject->AttachShader(shaderObject)) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, @@ -87,31 +80,29 @@ namespace MobileGL { void BindAttribLocation_State(GLuint program, GLuint index, const GLchar* name) { if (index >= MG_State::GLState::VertexArrayObject::MAX_VERTEX_ATTRIBS) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`index` is greater than or equal to `GL_MAX_VERTEX_ATTRIBS`.")); + ErrorCode::InvalidValue, + MakeShared("MG_Impl/GLImpl", __func__, + "`index` is greater than or equal to `GL_MAX_VERTEX_ATTRIBS`.")); return; } if (strncmp(name, "gl_", 3) == 0) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "`name` starts with the reserved prefix `gl_`.")); + ErrorCode::InvalidOperation, + MakeShared("MG_Impl/GLImpl", __func__, + "`name` starts with the reserved prefix `gl_`.")); return; } auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; programObject->SetExplicitAttribLocation(index, name); } void CompileShader_State(GLuint shader) { auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; shaderObject->Compile(); } @@ -120,43 +111,38 @@ namespace MobileGL { } GLuint CreateShader_State(GLenum type) { - auto shaderId = MG_State::pGLContext->CreateShader(MG_State::GLState::ConvertMGLShaderStageByGLShaderType(type)); + auto shaderId = + MG_State::pGLContext->CreateShader(MG_State::GLState::ConvertMGLShaderStageByGLShaderType(type)); if (shaderId == 0) { MG_State::pGLContext->RecordError( ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`shaderType` is not an accepted value.")); + MakeShared("MG_Impl/GLImpl", __func__, "`shaderType` is not an accepted value.")); return 0; } return shaderId; } void DeleteProgram_State(GLuint program) { - if (!CheckProgramNameValidity(program)) - return; + if (!CheckProgramNameValidity(program)) return; MG_State::pGLContext->MarkProgramForDeletion(program); } void DeleteShader_State(GLuint shader) { - if (!CheckProgramNameValidity(shader)) - return; + if (!CheckProgramNameValidity(shader)) return; MG_State::pGLContext->MarkShaderForDeletion(shader); } void DetachShader_State(GLuint program, GLuint shader) { auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; auto count = programObject->DetachShader(shaderObject); if (count <= 0) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "Shader is not attached to program.")); + MakeShared("MG_Impl/GLImpl", __func__, "Shader is not attached to program.")); return; } } @@ -165,24 +151,22 @@ namespace MobileGL { GLenum* type, GLchar* name) { if (bufSize < 0) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`bufSize` is less than 0.")); + ErrorCode::InvalidValue, + MakeShared("MG_Impl/GLImpl", __func__, "`bufSize` is less than 0.")); return; } auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; auto attribCount = programObject->GetActiveAttributesCount(); if (index >= attribCount) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`index` is greater than or equal to the number of active attribute variables in `program`.")); + ErrorCode::InvalidValue, + MakeShared( + "MG_Impl/GLImpl", __func__, + "`index` is greater than or equal to the number of active attribute variables in `program`.")); return; } - if (type != nullptr) - *type = programObject->GetAttribType(index); + if (type != nullptr) *type = programObject->GetAttribType(index); if (bufSize == 0) return; auto& attribName = programObject->GetAttribName(index); CopyStr(bufSize, length, name, attribName.c_str(), attribName.length()); @@ -192,25 +176,23 @@ namespace MobileGL { GLenum* type, GLchar* name) { if (bufSize < 0) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`bufSize` is less than 0.")); + ErrorCode::InvalidValue, + MakeShared("MG_Impl/GLImpl", __func__, "`bufSize` is less than 0.")); return; } auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; auto uniformCount = programObject->GetUniformCount(); if (index >= uniformCount) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`index` is greater than or equal to the number of active uniform variables in `program`.")); + ErrorCode::InvalidValue, + MakeShared( + "MG_Impl/GLImpl", __func__, + "`index` is greater than or equal to the number of active uniform variables in `program`.")); return; } - if (type != nullptr) - *type = programObject->GetUniformType(index); + if (type != nullptr) *type = programObject->GetUniformType(index); if (bufSize == 0) return; auto& uniformName = programObject->GetUniformName(index); CopyStr(bufSize, length, name, uniformName.c_str(), uniformName.length()); @@ -219,18 +201,15 @@ namespace MobileGL { void GetAttachedShaders_State(GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders) { if (maxCount < 0) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`maxCount` is less than 0.")); + ErrorCode::InvalidValue, + MakeShared("MG_Impl/GLImpl", __func__, "`maxCount` is less than 0.")); return; } auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; const auto& s = programObject->GetAttachedShaders(); GLsizei c = std::min((GLsizei)s.size(), maxCount); - if (count) - *count = c; + if (count) *count = c; for (GLsizei i = 0; i < c; ++i) { shaders[i] = s[i]->GetId(); } @@ -238,84 +217,78 @@ namespace MobileGL { GLint GetAttribLocation_State(GLuint program, const GLchar* name) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return -1; - if (strncmp(name, "gl_", 3) == 0) - return -1; - if (!programObject->GetLinkStatus()) - return -1; + if (!programObject) return -1; + if (strncmp(name, "gl_", 3) == 0) return -1; + if (!programObject->GetLinkStatus()) return -1; return programObject->GetAttributeLocation(name); } void GetProgramiv_State(GLuint program, GLenum pname, GLint* params) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; switch (pname) { - case GL_DELETE_STATUS: - *params = programObject->GetDeleteStatus(); - break; - case GL_LINK_STATUS: - *params = programObject->GetLinkStatus(); - break; - case GL_VALIDATE_STATUS: - *params = programObject->GetValidateStatus(); - break; - case GL_INFO_LOG_LENGTH: { - const auto& log = programObject->GetInfoLog(); - *params = log.length(); - break; - } - case GL_ATTACHED_SHADERS: { - const auto& attachedShaders = programObject->GetAttachedShaders(); - *params = attachedShaders.size(); - break; - } - case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: - *params = programObject->GetActiveAtomicCounterCount(); - break; - case GL_ACTIVE_ATTRIBUTES: - *params = programObject->GetActiveAttributesCount(); - break; - case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: - *params = programObject->GetActiveAttributesMaxLength(); - break; - case GL_ACTIVE_UNIFORMS: - *params = programObject->GetUniformCount(); - break; - case GL_ACTIVE_UNIFORM_MAX_LENGTH: - *params = programObject->GetUniformMaxLength(); - break; - case GL_ACTIVE_UNIFORM_BLOCKS: // GL >= 3.1 - *params = programObject->GetActiveUniformBlocksCount(); - break; - case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: // ditto. - *params = programObject->GetActiveUniformBlocksMaxNameLength(); - break; - case GL_COMPUTE_WORK_GROUP_SIZE: // GL >= 4.3 + case GL_DELETE_STATUS: + *params = programObject->GetDeleteStatus(); + break; + case GL_LINK_STATUS: + *params = programObject->GetLinkStatus(); + break; + case GL_VALIDATE_STATUS: + *params = programObject->GetValidateStatus(); + break; + case GL_INFO_LOG_LENGTH: { + const auto& log = programObject->GetInfoLog(); + *params = log.length(); + break; + } + case GL_ATTACHED_SHADERS: { + const auto& attachedShaders = programObject->GetAttachedShaders(); + *params = attachedShaders.size(); + break; + } + case GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: + *params = programObject->GetActiveAtomicCounterCount(); + break; + case GL_ACTIVE_ATTRIBUTES: + *params = programObject->GetActiveAttributesCount(); + break; + case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: + *params = programObject->GetActiveAttributesMaxLength(); + break; + case GL_ACTIVE_UNIFORMS: + *params = programObject->GetUniformCount(); + break; + case GL_ACTIVE_UNIFORM_MAX_LENGTH: + *params = programObject->GetUniformMaxLength(); + break; + case GL_ACTIVE_UNIFORM_BLOCKS: // GL >= 3.1 + *params = programObject->GetActiveUniformBlocksCount(); + break; + case GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: // ditto. + *params = programObject->GetActiveUniformBlocksMaxNameLength(); + break; + case GL_COMPUTE_WORK_GROUP_SIZE: // GL >= 4.3 - case GL_PROGRAM_BINARY_LENGTH: + case GL_PROGRAM_BINARY_LENGTH: - case GL_TRANSFORM_FEEDBACK_BUFFER_MODE: - case GL_TRANSFORM_FEEDBACK_VARYINGS: - case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: - case GL_GEOMETRY_VERTICES_OUT: - case GL_GEOMETRY_INPUT_TYPE: - case GL_GEOMETRY_OUTPUT_TYPE: - default: - MG_State::pGLContext->RecordError( - ErrorCode::InvalidEnum, - MakeShared("MG_Impl/GLImpl", __func__, - "`pname` is not an accepted value.")); - return; + case GL_TRANSFORM_FEEDBACK_BUFFER_MODE: + case GL_TRANSFORM_FEEDBACK_VARYINGS: + case GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: + case GL_GEOMETRY_VERTICES_OUT: + case GL_GEOMETRY_INPUT_TYPE: + case GL_GEOMETRY_OUTPUT_TYPE: + default: + MG_State::pGLContext->RecordError( + ErrorCode::InvalidEnum, + MakeShared("MG_Impl/GLImpl", __func__, "`pname` is not an accepted value.")); + return; } } void GetProgramInfoLog_State(GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; const auto& log = programObject->GetInfoLog(); CopyStr(bufSize, length, infoLog, log.c_str(), log.length()); @@ -323,38 +296,35 @@ namespace MobileGL { void GetShaderiv_State(GLuint shader, GLenum pname, GLint* params) { auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; switch (pname) { - case GL_SHADER_TYPE: - *params = ConvertGLShaderTypeByMGLShaderStage(shaderObject->GetShaderStage()); - break; - case GL_DELETE_STATUS: - *params = shaderObject->GetDeleteStatus(); - break; - case GL_COMPILE_STATUS: - *params = shaderObject->GetCompileStatus(); - break; - case GL_INFO_LOG_LENGTH: - *params = shaderObject->GetInfoLog().length(); - break; - case GL_SHADER_SOURCE_LENGTH: - *params = shaderObject->GetShaderSource().length(); - break; - default: - MG_State::pGLContext->RecordError( - ErrorCode::InvalidEnum, - MakeShared("MG_Impl/GLImpl", __func__, - "`pname` is not an accepted value.")); - return; + case GL_SHADER_TYPE: + *params = ConvertGLShaderTypeByMGLShaderStage(shaderObject->GetShaderStage()); + break; + case GL_DELETE_STATUS: + *params = shaderObject->GetDeleteStatus(); + break; + case GL_COMPILE_STATUS: + *params = shaderObject->GetCompileStatus(); + break; + case GL_INFO_LOG_LENGTH: + *params = shaderObject->GetInfoLog().length(); + break; + case GL_SHADER_SOURCE_LENGTH: + *params = shaderObject->GetShaderSource().length(); + break; + default: + MG_State::pGLContext->RecordError( + ErrorCode::InvalidEnum, + MakeShared("MG_Impl/GLImpl", __func__, "`pname` is not an accepted value.")); + return; } } void GetShaderInfoLog_State(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) { auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; const auto& log = shaderObject->GetInfoLog(); CopyStr(bufSize, length, infoLog, log.c_str(), log.length()); @@ -363,14 +333,12 @@ namespace MobileGL { void GetShaderSource_State(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source) { if (bufSize < 0) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`bufSize` is less than 0.")); + ErrorCode::InvalidValue, + MakeShared("MG_Impl/GLImpl", __func__, "`bufSize` is less than 0.")); } auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; auto& src = shaderObject->GetShaderSource(); CopyStr(bufSize, length, source, src.c_str(), src.length()); @@ -378,30 +346,29 @@ namespace MobileGL { GLint GetUniformLocation_State(GLuint program, const GLchar* name) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return -1; + if (!programObject) return -1; return programObject->GetUniformLocation(name); } void GetUniform_State(GLuint program, GLint location, void* params) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; if (!programObject->GetLinkStatus()) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "`program` has not been successfully linked.")); + ErrorCode::InvalidOperation, + MakeShared("MG_Impl/GLImpl", __func__, + "`program` has not been successfully linked.")); return; } // Check if location is valid if (location < 0 || location > programObject->GetMaxUniformLocation()) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "`location` does not correspond to a valid uniform variable location for the specified program object.")); + ErrorCode::InvalidOperation, + MakeShared("MG_Impl/GLImpl", __func__, + "`location` does not correspond to a valid uniform variable location " + "for the specified program object.")); return; } @@ -409,9 +376,10 @@ namespace MobileGL { const auto& uniformName = programObject->GetUniformName(location); if (uniformName.empty()) { MG_State::pGLContext->RecordError( - ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "`location` does not correspond to a valid uniform variable location for the specified program object.")); + ErrorCode::InvalidOperation, + MakeShared("MG_Impl/GLImpl", __func__, + "`location` does not correspond to a valid uniform variable location " + "for the specified program object.")); return; } @@ -438,7 +406,7 @@ namespace MobileGL { /* FIXME: Handle situations that: * A program object marked for deletion with glDeleteProgram but still in use as part of current * rendering state is still considered a program object and glIsProgram will return GL_TRUE. - */ + */ return CheckProgramNameValidity(program); } @@ -446,14 +414,13 @@ namespace MobileGL { /* FIXME: Handle situations that: * A shader object marked for deletion with glDeleteShader but still attached to a program object is still * considered a shader object and glIsShader will return GL_TRUE. - */ + */ return CheckShaderNameValidity(shader); } void LinkProgram_State(GLuint program) { auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; programObject->Link(); } @@ -461,19 +428,16 @@ namespace MobileGL { if (count < 0) { MG_State::pGLContext->RecordError( ErrorCode::InvalidValue, - MakeShared("MG_Impl/GLImpl", __func__, - "`count` is less than 0.")); + MakeShared("MG_Impl/GLImpl", __func__, "`count` is less than 0.")); return; } auto shaderObject = TryToGetShaderObject(shader); - if (!shaderObject) - return; + if (!shaderObject) return; std::string src; for (GLsizei i = 0; i < count; i++) { - src += - (length == nullptr || length[i] <= 0) ? string[i] : std::string(string[i], length[i]); + src += (length == nullptr || length[i] <= 0) ? string[i] : std::string(string[i], length[i]); } shaderObject->SetShaderSource(Move(src)); } @@ -485,8 +449,7 @@ namespace MobileGL { } auto programObject = TryToGetProgramObject(program); - if (!programObject) - return; + if (!programObject) return; MG_State::pGLContext->UseProgram(program); } @@ -500,15 +463,13 @@ namespace MobileGL { template void Uniformv_State(GLint location, GLsizei count, T* value) { - if (location == -1) - return; + if (location == -1) return; auto programObject = MG_State::pGLContext->GetCurrentProgram(); if (programObject == nullptr) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "There is no current program object.")); + MakeShared("MG_Impl/GLImpl", __func__, "There is no current program object.")); return; } @@ -516,7 +477,8 @@ namespace MobileGL { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, MakeShared("MG_Impl/GLImpl", __func__, - "`location` is an invalid uniform location for the current program object and `location` is not equal to -1.")); + "`location` is an invalid uniform location for the current program " + "object and `location` is not equal to -1.")); return; } @@ -530,14 +492,14 @@ namespace MobileGL { // Input matrix is in column-major order (OpenGL default) // [0 2] // [1 3] - // + // // Output matrix should be in row-major order if transpose is true // [0 1] // [2 3] - output[0] = input[0]; // 0,0 element stays the same - output[1] = input[2]; // 0,1 element becomes 1,0 - output[2] = input[1]; // 1,0 element becomes 0,1 - output[3] = input[3]; // 1,1 element stays the same + output[0] = input[0]; // 0,0 element stays the same + output[1] = input[2]; // 0,1 element becomes 1,0 + output[2] = input[1]; // 1,0 element becomes 0,1 + output[3] = input[3]; // 1,1 element stays the same } // Helper function to transpose a 3x3 matrix @@ -546,20 +508,20 @@ namespace MobileGL { // [0 3 6] // [1 4 7] // [2 5 8] - // + // // Output matrix should be in row-major order if transpose is true // [0 1 2] // [3 4 5] // [6 7 8] - output[0] = input[0]; // 0,0 element stays the same - output[1] = input[3]; // 0,1 element becomes 1,0 - output[2] = input[6]; // 0,2 element becomes 2,0 - output[3] = input[1]; // 1,0 element becomes 0,1 - output[4] = input[4]; // 1,1 element stays the same - output[5] = input[7]; // 1,2 element becomes 2,1 - output[6] = input[2]; // 2,0 element becomes 0,2 - output[7] = input[5]; // 2,1 element becomes 1,2 - output[8] = input[8]; // 2,2 element stays the same + output[0] = input[0]; // 0,0 element stays the same + output[1] = input[3]; // 0,1 element becomes 1,0 + output[2] = input[6]; // 0,2 element becomes 2,0 + output[3] = input[1]; // 1,0 element becomes 0,1 + output[4] = input[4]; // 1,1 element stays the same + output[5] = input[7]; // 1,2 element becomes 2,1 + output[6] = input[2]; // 2,0 element becomes 0,2 + output[7] = input[5]; // 2,1 element becomes 1,2 + output[8] = input[8]; // 2,2 element stays the same } // Helper function to transpose a 4x4 matrix @@ -569,7 +531,7 @@ namespace MobileGL { // [1 5 9 13] // [2 6 10 14] // [3 7 11 15] - // + // // Output matrix should be in row-major order if transpose is true // [0 1 2 3] // [4 5 6 7] @@ -628,15 +590,13 @@ namespace MobileGL { void UniformMatrix2fv_State(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { // For 2x2 matrices, we have 4 elements per matrix // If transpose is GL_TRUE, we need to transpose the matrix data - if (location == -1) - return; + if (location == -1) return; auto programObject = MG_State::pGLContext->GetCurrentProgram(); if (programObject == nullptr) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "There is no current program object.")); + MakeShared("MG_Impl/GLImpl", __func__, "There is no current program object.")); return; } @@ -644,7 +604,8 @@ namespace MobileGL { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, MakeShared("MG_Impl/GLImpl", __func__, - "`location` is an invalid uniform location for the current program object and `location` is not equal to -1.")); + "`location` is an invalid uniform location for the current program " + "object and `location` is not equal to -1.")); return; } @@ -665,15 +626,13 @@ namespace MobileGL { void UniformMatrix3fv_State(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { // For 3x3 matrices, we have 9 elements per matrix // If transpose is GL_TRUE, we need to transpose the matrix data - if (location == -1) - return; + if (location == -1) return; auto programObject = MG_State::pGLContext->GetCurrentProgram(); if (programObject == nullptr) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "There is no current program object.")); + MakeShared("MG_Impl/GLImpl", __func__, "There is no current program object.")); return; } @@ -681,7 +640,8 @@ namespace MobileGL { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, MakeShared("MG_Impl/GLImpl", __func__, - "`location` is an invalid uniform location for the current program object and `location` is not equal to -1.")); + "`location` is an invalid uniform location for the current program " + "object and `location` is not equal to -1.")); return; } @@ -702,15 +662,13 @@ namespace MobileGL { void UniformMatrix4fv_State(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { // For 4x4 matrices, we have 16 elements per matrix // If transpose is GL_TRUE, we need to transpose the matrix data - if (location == -1) - return; + if (location == -1) return; auto programObject = MG_State::pGLContext->GetCurrentProgram(); if (programObject == nullptr) { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, - MakeShared("MG_Impl/GLImpl", __func__, - "There is no current program object.")); + MakeShared("MG_Impl/GLImpl", __func__, "There is no current program object.")); return; } @@ -718,7 +676,8 @@ namespace MobileGL { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, MakeShared("MG_Impl/GLImpl", __func__, - "`location` is an invalid uniform location for the current program object and `location` is not equal to -1.")); + "`location` is an invalid uniform location for the current program " + "object and `location` is not equal to -1.")); return; } @@ -820,7 +779,7 @@ namespace MobileGL { void GetUniformiv(GLuint program, GLint location, GLint* params) { GetUniformiv_State(program, location, params); } - + GLboolean IsProgram(GLuint program) { return IsProgram_State(program); } diff --git a/MobileGL/MG_State/GLState/ErrorState/ErrorCode.h b/MobileGL/MG_State/GLState/ErrorState/ErrorCode.h index daa0d87b..7d21cf18 100644 --- a/MobileGL/MG_State/GLState/ErrorState/ErrorCode.h +++ b/MobileGL/MG_State/GLState/ErrorState/ErrorCode.h @@ -11,4 +11,4 @@ namespace MobileGL { StackUnderflow, StackOverflow }; -} +} // namespace MobileGL diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index 656e9454..8df444e3 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -90,7 +90,7 @@ namespace MobileGL { auto location = uniform.layoutLocation(); m_uniformNames[location] = uniform.name; m_uniformTypes[location] = uniform.glDefineType; - m_uniformIsOpaqueType[location] = uniform.getType()->isOpaque(); + m_uniformIsOpaqueType[location] = uniform.getType()->isOpaque(); m_uniformArraySizes[location] = uniform.size; } @@ -108,12 +108,11 @@ namespace MobileGL { m_attribTypes[location] = inVar.glDefineType; } // Implement glBindAttribLocation semantics - for (auto& [name, location]: m_explicitAttribLocations) { + for (auto& [name, location] : m_explicitAttribLocations) { assert(location < m_attribs.size()); if (m_attribs[location] != name) { auto it = std::find(m_attribs.begin(), m_attribs.end(), name); - if (it == m_attribs.end()) - continue; + if (it == m_attribs.end()) continue; std::swap(m_attribs[location], m_attribs[std::distance(m_attribs.begin(), it)]); std::swap(m_attribTypes[location], m_attribTypes[std::distance(m_attribs.begin(), it)]); } @@ -139,24 +138,21 @@ namespace MobileGL { for (SizeT i = 0; i < m_shaders.size(); i++) { auto shaderType = ConvertGLShaderTypeByMGLShaderStage(m_shaders[i]->GetShaderStage()); shaderTypes[i] = shaderType; - ShaderAttrib attrib { - .shaderType = shaderType, - .sourceStr = m_shaders[i]->GetShaderSource(), - .flags = 0 - }; + ShaderAttrib attrib{ + .shaderType = shaderType, .sourceStr = m_shaders[i]->GetShaderSource(), .flags = 0}; auto res = ShaderCompiler::CompileShader(attrib); assert(res); shaders[i] = res.value(); } - ProgramAttrib attrib { + ProgramAttrib attrib{ .shaders = Move(shaders), }; auto programResult = ShaderCompiler::LinkProgram(attrib); assert(programResult); auto program = programResult.value(); - ProgramBinaryAttrib binaryAttrib { + ProgramBinaryAttrib binaryAttrib{ .shaderTypes = shaderTypes, .program = *program, }; @@ -187,10 +183,9 @@ namespace MobileGL { // assert(m_uniformSizesInBytes.size() == GetUniformCount()); } - void ProgramObject::WaitUntilGenerationCompleted() { - } + void ProgramObject::WaitUntilGenerationCompleted() {} - void ProgramObject::SetExplicitAttribLocation(Uint index, const char *name) { + void ProgramObject::SetExplicitAttribLocation(Uint index, const char* name) { m_explicitAttribLocations[name] = index; } @@ -257,35 +252,35 @@ namespace MobileGL { // } // // void ProgramObject::PostLink() { - // if (m_programBinary.empty()) { - // assert(false); - // return; - // } - // MG_Util::ShaderTranspiler::SpvcSession session(m_programBinary[0]); - // const char* src = nullptr; // we don't care the source atm - // auto result = session.Compile(&src); - // if (result != SPVC_SUCCESS) { - // assert(false); - // return; - // } - // m_metadata = session.GetMetadata(); - // auto& uniformOffsets = m_metadata.plainUniformOffsetsInUBO; - // for (const auto& [name, offset] : uniformOffsets) { - // assert(m_uniforms.find(name) != m_uniforms.end()); - // assert(m_uniforms[name] < m_uniformOffsets.size()); - // m_uniformOffsets[m_uniforms[name]] = offset; - // } - // m_uboScratch.resize(m_metadata.uboSize, 0); - // - // auto& types = m_metadata.plainUniformMemberTypes; - // - // assert(types.size() == m_uniformOffsets.size()); - // m_uniformTypes.resize(m_uniformOffsets.size()); - // for (const auto& [name, type] : types) { - // auto gltype = MG_Util::ConvertSpvcTypeToGLEnum(type); - // auto location = m_uniforms[name]; - // m_uniformTypes[location] = gltype; - // } + // if (m_programBinary.empty()) { + // assert(false); + // return; + // } + // MG_Util::ShaderTranspiler::SpvcSession session(m_programBinary[0]); + // const char* src = nullptr; // we don't care the source atm + // auto result = session.Compile(&src); + // if (result != SPVC_SUCCESS) { + // assert(false); + // return; + // } + // m_metadata = session.GetMetadata(); + // auto& uniformOffsets = m_metadata.plainUniformOffsetsInUBO; + // for (const auto& [name, offset] : uniformOffsets) { + // assert(m_uniforms.find(name) != m_uniforms.end()); + // assert(m_uniforms[name] < m_uniformOffsets.size()); + // m_uniformOffsets[m_uniforms[name]] = offset; + // } + // m_uboScratch.resize(m_metadata.uboSize, 0); + // + // auto& types = m_metadata.plainUniformMemberTypes; + // + // assert(types.size() == m_uniformOffsets.size()); + // m_uniformTypes.resize(m_uniformOffsets.size()); + // for (const auto& [name, type] : types) { + // auto gltype = MG_Util::ConvertSpvcTypeToGLEnum(type); + // auto location = m_uniforms[name]; + // m_uniformTypes[location] = gltype; + // } // } } // namespace GLState } // namespace MG_State diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h index afdcca0a..dcf265b2 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.h @@ -9,7 +9,7 @@ namespace MobileGL { namespace GLState { class ProgramObject { public: - ProgramObject(const Uint id): m_id(id) {} + ProgramObject(const Uint id) : m_id(id) {} bool ShaderIsAttached(SharedPtr shader); bool AttachShader(SharedPtr shader); SizeT DetachShader(SharedPtr shader); @@ -27,20 +27,12 @@ namespace MobileGL { const auto it = m_uniformLocations.find(name); return (it == m_uniformLocations.end()) ? -1 : (Int)it->second; } - GLenum GetUniformType(Uint index) const { - return m_uniformTypes[index]; - } + GLenum GetUniformType(Uint index) const { return m_uniformTypes[index]; } - Bool IsUniformOpaqueAtLocation(Uint location) const { - return m_uniformIsOpaqueType[location]; - } + Bool IsUniformOpaqueAtLocation(Uint location) const { return m_uniformIsOpaqueType[location]; } - const String& GetUniformName(Uint index) const { - return m_uniformNames[index]; - } - Uint GetUniformOffset(Uint location) const { - return m_uniformOffsets[location]; - } + const String& GetUniformName(Uint index) const { return m_uniformNames[index]; } + Uint GetUniformOffset(Uint location) const { return m_uniformOffsets[location]; } Uint GetUniformSizesInBytes(Uint location) const { return MG_Util::GetGLTypeSize(m_uniformTypes[location]); } @@ -49,15 +41,9 @@ namespace MobileGL { const auto it = std::find(m_attribs.begin(), m_attribs.end(), name); return (it == m_attribs.end()) ? -1 : std::distance(m_attribs.begin(), it); } - GLenum GetAttribType(Uint index) const { - return m_attribTypes[index]; - } - const String& GetAttribName(Uint index) const { - return m_attribs[index]; - } - void* MapUBO() { - return m_uboScratch.data(); - } + GLenum GetAttribType(Uint index) const { return m_attribTypes[index]; } + const String& GetAttribName(Uint index) const { return m_attribs[index]; } + void* MapUBO() { return m_uboScratch.data(); } Bool GetDeleteStatus() const { return m_deleteStatus; } Bool GetLinkStatus() const { return m_linkStatus; } @@ -67,6 +53,7 @@ namespace MobileGL { Int GetActiveUniformBlocksCount() const { return m_program->getNumUniformBlocks(); } Int GetActiveAttributesMaxLength() const { return m_attribInNameMaxLength; } Int GetActiveUniformBlocksMaxNameLength() const { return m_uniformBlockNameMaxLength; } + private: void DoReflection(); void GenerateBinary(); diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp index fb7f22eb..6101f773 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramState.cpp @@ -8,8 +8,7 @@ namespace MobileGL { m_programIndexGenerator.Generate(1, &programId); EnsureIndexAvail(programId, m_programObjects); auto programObject = MakeShared(programId); - if (programObject == nullptr) - return 0; + if (programObject == nullptr) return 0; m_programObjects[programId] = programObject; return programId; } @@ -34,8 +33,7 @@ namespace MobileGL { } void ProgramState::UseProgram(Uint program) { - if (program == 0) - m_currentProgram.reset(); + if (program == 0) m_currentProgram.reset(); if (!CheckIndexAvail(program, m_programObjects)) return; m_currentProgram = m_programObjects[program]; @@ -46,8 +44,7 @@ namespace MobileGL { m_shaderIndexGenerator.Generate(1, &shaderId); EnsureIndexAvail(shaderId, m_shaderObjects); auto shaderObject = MakeShared(stage, shaderId); - if (shaderObject == nullptr) - return 0; + if (shaderObject == nullptr) return 0; m_shaderObjects[shaderId] = shaderObject; return shaderId; } diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramState.h b/MobileGL/MG_State/GLState/ProgramState/ProgramState.h index 068792f3..52fb2c05 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramState.h +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramState.h @@ -22,9 +22,8 @@ namespace MobileGL { void MarkShaderObjectForDeletion(Uint shader); Bool ValidateShaderObject(Uint shader) const; - SharedPtr GetCurrentProgram() const { - return m_currentProgram; - } + SharedPtr GetCurrentProgram() const { return m_currentProgram; } + private: template static Bool CheckIndexAvail(const SizeT idx, const Vector& vec) { diff --git a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp index 145ef741..8027da4e 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.cpp @@ -10,7 +10,7 @@ namespace MobileGL { m_source = source; } - void ShaderObject::SetShaderSource(String &&source) { + void ShaderObject::SetShaderSource(String&& source) { m_source = Move(source); } @@ -24,11 +24,9 @@ namespace MobileGL { // Compile for OpenGL here, so that we can do validation and link // like a real OpenGL driver at linking stage // Will compile for other backends later. - ShaderAttrib attrib{ - .shaderType = ConvertGLShaderTypeByMGLShaderStage(m_stage), - .sourceStr = m_source, - .flags = ShaderCompileBits::CompileForOpenGL - }; + ShaderAttrib attrib{.shaderType = ConvertGLShaderTypeByMGLShaderStage(m_stage), + .sourceStr = m_source, + .flags = ShaderCompileBits::CompileForOpenGL}; auto result = ShaderCompiler::CompileShader(attrib); if (result) { diff --git a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h index 21818928..5e68c032 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h +++ b/MobileGL/MG_State/GLState/ProgramState/ShaderObject.h @@ -36,21 +36,21 @@ namespace MobileGL { inline static ShaderStage ConvertMGLShaderStageByGLShaderType(GLenum type) { switch (type) { - case GL_VERTEX_SHADER: - return ShaderStage::Vertex; - case GL_TESS_CONTROL_SHADER: - return ShaderStage::TessControl; - case GL_TESS_EVALUATION_SHADER: - return ShaderStage::TessEval; - case GL_GEOMETRY_SHADER: - return ShaderStage::Geometry; - case GL_FRAGMENT_SHADER: - return ShaderStage::Fragment; - case GL_COMPUTE_SHADER: - return ShaderStage::Compute; - default: - assert(false); - return ShaderStage::Unknown; + case GL_VERTEX_SHADER: + return ShaderStage::Vertex; + case GL_TESS_CONTROL_SHADER: + return ShaderStage::TessControl; + case GL_TESS_EVALUATION_SHADER: + return ShaderStage::TessEval; + case GL_GEOMETRY_SHADER: + return ShaderStage::Geometry; + case GL_FRAGMENT_SHADER: + return ShaderStage::Fragment; + case GL_COMPUTE_SHADER: + return ShaderStage::Compute; + default: + assert(false); + return ShaderStage::Unknown; } } @@ -70,6 +70,7 @@ namespace MobileGL { const UnorderedMap& GetUniformLocations() const { return m_uniforms; } Bool GetCompileStatus() const { return m_compileStatus; } Bool GetDeleteStatus() const { return m_deleteStatus; } + private: // bool DoReflection(); const Uint m_id = 0; diff --git a/MobileGL/MG_Test/Buffer/BufferTest.cpp b/MobileGL/MG_Test/Buffer/BufferTest.cpp index e3261e99..91132f96 100644 --- a/MobileGL/MG_Test/Buffer/BufferTest.cpp +++ b/MobileGL/MG_Test/Buffer/BufferTest.cpp @@ -50,12 +50,12 @@ TEST_F(BufferTest, PingPong) { auto bufWrite = writeSlot.GetBoundObject(); - Vector data { 1, 2, 3, 4, 5 }; + Vector data{1, 2, 3, 4, 5}; SizeT byteSize = data.size() * sizeof(Int); // Write data bufWrite->Resize(byteSize); - DataPtr ptr { .data = data.data(), .size = byteSize }; + DataPtr ptr{.data = data.data(), .size = byteSize}; bufWrite->UploadData(ptr, 0); // Readback @@ -70,20 +70,20 @@ TEST_F(BufferTest, PingPong) { } TEST_F(BufferTest, GenerateManyNames_NoPrematureCreation) { - const SizeT largeCount = 100000; // generate tons of buffer names + const SizeT largeCount = 100000; // generate tons of buffer names auto names = glContext.GenBufferNames(largeCount); - - std::vector indices = { 0, 600, 5000, 32768, 99999 }; // only create a few buffer objects + + std::vector indices = {0, 600, 5000, 32768, 99999}; // only create a few buffer objects for (SizeT idx : indices) { GLuint name = names[idx]; auto bufObj = glContext.CreateBufferObject(name); auto& slot = glContext.GetBufferBindingSlot(BufferTarget::Uniform); slot.Bind(bufObj); - Vector data = { static_cast(idx + 1), static_cast(idx + 2) }; + Vector data = {static_cast(idx + 1), static_cast(idx + 2)}; SizeT byteSize = data.size() * sizeof(Int); bufObj->Resize(byteSize); - DataPtr ptr{ .data = data.data(), .size = byteSize }; + DataPtr ptr{.data = data.data(), .size = byteSize}; bufObj->UploadData(ptr, 0); Vector actual(data.size()); @@ -98,10 +98,10 @@ TEST_F(BufferTest, AcquireMemory) { auto bufferNames = glContext.GenBufferNames(1); auto bufObj = glContext.CreateBufferObject(bufferNames[0]); slot.Bind(bufObj); - Vector initData{ 10, 20, 30, 40, 50 }; + Vector initData{10, 20, 30, 40, 50}; SizeT byteSize = initData.size() * sizeof(Int); bufObj->Resize(byteSize); - DataPtr ptr{ .data = initData.data(), .size = byteSize }; + DataPtr ptr{.data = initData.data(), .size = byteSize}; bufObj->UploadData(ptr, 0); bufObj->ClearDirty(); Int* mappedPtr = static_cast(bufObj->AcquireMemory(true, true, true)); @@ -109,7 +109,7 @@ TEST_F(BufferTest, AcquireMemory) { mappedPtr[1] = 200; mappedPtr[2] = 300; bufObj->ReleaseMemory(); - Vector expected{ 100, 200, 300, 40, 50 }; + Vector expected{100, 200, 300, 40, 50}; Vector actual(5); void* p = bufObj->AcquireMemory(false, true, false); memcpy(actual.data(), p, byteSize); @@ -117,7 +117,7 @@ TEST_F(BufferTest, AcquireMemory) { auto dirty = bufObj->GetDirtyRange(); ASSERT_EQ(dirty.start, 0); - ASSERT_EQ(dirty.end, sizeof(Int) * 5); + ASSERT_EQ(dirty.end, sizeof(Int) * 5); } TEST_F(BufferTest, AcquireMemoryRangeWithoutExplicit) { @@ -125,32 +125,26 @@ TEST_F(BufferTest, AcquireMemoryRangeWithoutExplicit) { auto bufferNames = glContext.GenBufferNames(1); auto bufObj = glContext.CreateBufferObject(bufferNames[0]); slot.Bind(bufObj); - Vector initData{ 10, 20, 30, 40, 50 }; + Vector initData{10, 20, 30, 40, 50}; SizeT byteSize = initData.size() * sizeof(Int); bufObj->Resize(byteSize); - DataPtr ptr{ .data = initData.data(), .size = byteSize }; + DataPtr ptr{.data = initData.data(), .size = byteSize}; bufObj->UploadData(ptr, 0); bufObj->ClearDirty(); - Range1D mapRange{ - .start = sizeof(Int), - .end = sizeof(Int) * 4 - }; - Int* mappedPtr = static_cast(bufObj->AcquireMemoryRange( - mapRange, - BufferMappingAccessBit::Write - )); + Range1D mapRange{.start = sizeof(Int), .end = sizeof(Int) * 4}; + Int* mappedPtr = static_cast(bufObj->AcquireMemoryRange(mapRange, BufferMappingAccessBit::Write)); mappedPtr[0] = 200; mappedPtr[1] = 300; bufObj->ReleaseMemory(); - Vector expected{ 10, 200, 300, 40, 50 }; + Vector expected{10, 200, 300, 40, 50}; Vector actual(5); void* p = bufObj->AcquireMemory(false, true, false); memcpy(actual.data(), p, byteSize); ASSERT_EQ(actual, expected); auto dirty = bufObj->GetDirtyRange(); ASSERT_EQ(dirty.start, sizeof(Int)); - ASSERT_EQ(dirty.end, sizeof(Int) * 4); + ASSERT_EQ(dirty.end, sizeof(Int) * 4); } TEST_F(BufferTest, AcquireMemoryRangeWithExplicit) { @@ -159,30 +153,25 @@ TEST_F(BufferTest, AcquireMemoryRangeWithExplicit) { auto bufObj = glContext.CreateBufferObject(bufferNames[0]); slot.Bind(bufObj); - Vector initData{ 10, 20, 30, 40, 50 }; + Vector initData{10, 20, 30, 40, 50}; SizeT byteSize = initData.size() * sizeof(Int); bufObj->Resize(byteSize); - DataPtr ptr{ .data = initData.data(), .size = byteSize }; + DataPtr ptr{.data = initData.data(), .size = byteSize}; bufObj->UploadData(ptr, 0); bufObj->ClearDirty(); - Range1D mapRange{ - .start = sizeof(Int), - .end = sizeof(Int) * 4 - }; - Int* mappedPtr = static_cast(bufObj->AcquireMemoryRange( - mapRange, - BufferMappingAccessBit::Write | BufferMappingAccessBit::FlushExplicit - )); + Range1D mapRange{.start = sizeof(Int), .end = sizeof(Int) * 4}; + Int* mappedPtr = static_cast( + bufObj->AcquireMemoryRange(mapRange, BufferMappingAccessBit::Write | BufferMappingAccessBit::FlushExplicit)); mappedPtr[0] = 200; mappedPtr[1] = 300; bufObj->FlushMemoryRange(0, sizeof(Int)); auto dirty = bufObj->GetDirtyRange(); - ASSERT_EQ(dirty.start, sizeof(Int)); - ASSERT_EQ(dirty.end, sizeof(Int) * 2); + ASSERT_EQ(dirty.start, sizeof(Int)); + ASSERT_EQ(dirty.end, sizeof(Int) * 2); bufObj->ReleaseMemory(); @@ -190,7 +179,7 @@ TEST_F(BufferTest, AcquireMemoryRangeWithExplicit) { ASSERT_EQ(dirty.start, sizeof(Int)); ASSERT_EQ(dirty.end, sizeof(Int) * 2); - Vector expected{ 10, 200, 30, 40, 50 }; + Vector expected{10, 200, 30, 40, 50}; Vector actual(5); void* p = bufObj->AcquireMemory(false, true, false); memcpy(actual.data(), p, byteSize); @@ -198,7 +187,7 @@ TEST_F(BufferTest, AcquireMemoryRangeWithExplicit) { dirty = bufObj->GetDirtyRange(); ASSERT_EQ(dirty.start, sizeof(Int)); - ASSERT_EQ(dirty.end, sizeof(Int) * 2); + ASSERT_EQ(dirty.end, sizeof(Int) * 2); } TEST_F(BufferTest, CopyBufferSubData) { @@ -209,10 +198,10 @@ TEST_F(BufferTest, CopyBufferSubData) { auto srcObj = glContext.CreateBufferObject(srcNames[0]); srcSlot.Bind(srcObj); - Vector srcData{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + Vector srcData{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; SizeT srcSize = srcData.size() * sizeof(Int); srcObj->Resize(srcSize); - DataPtr srcPtr{ .data = srcData.data(), .size = srcSize }; + DataPtr srcPtr{.data = srcData.data(), .size = srcSize}; srcObj->UploadData(srcPtr, 0); auto dstNames = glContext.GenBufferNames(1); @@ -222,22 +211,15 @@ TEST_F(BufferTest, CopyBufferSubData) { Vector dstData(15, 0); SizeT dstSize = dstData.size() * sizeof(Int); dstObj->Resize(dstSize); - DataPtr dstPtr{ .data = dstData.data(), .size = dstSize }; + DataPtr dstPtr{.data = dstData.data(), .size = dstSize}; dstObj->UploadData(dstPtr, 0); srcObj->ClearDirty(); dstObj->ClearDirty(); - dstObj->CopyDataFrom(srcObj, - 2 * sizeof(Int), - 5 * sizeof(Int), - 4 * sizeof(Int)); + dstObj->CopyDataFrom(srcObj, 2 * sizeof(Int), 5 * sizeof(Int), 4 * sizeof(Int)); - Vector expected{ - 0, 0, 0, 0, 0, - 3, 4, 5, 6, - 0, 0, 0, 0, 0, 0 - }; + Vector expected{0, 0, 0, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0}; Vector actual(15); void* p = dstObj->AcquireMemory(false, true, false); @@ -268,7 +250,7 @@ TEST_F(BufferTest, WriteWhileMapped) { bufObj->ReleaseMemory(); - Vector expected{ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90 }; + Vector expected{0, 10, 20, 30, 40, 50, 60, 70, 80, 90}; Vector actual(10); void* p = bufObj->AcquireMemory(false, true, false); memcpy(actual.data(), p, byteSize); @@ -286,20 +268,17 @@ TEST_F(BufferTest, PartialUpdate) { auto bufObj = glContext.CreateBufferObject(bufferNames[0]); slot.Bind(bufObj); - Vector initData{ 100, 200, 300, 400, 500 }; + Vector initData{100, 200, 300, 400, 500}; SizeT byteSize = initData.size() * sizeof(Int); bufObj->Resize(byteSize); - DataPtr ptr{ .data = initData.data(), .size = byteSize }; + DataPtr ptr{.data = initData.data(), .size = byteSize}; bufObj->UploadData(ptr, 0); - bufObj->ClearDirty(); + bufObj->ClearDirty(); - Vector update{ 999, 888 }; - bufObj->UploadSubData( - { (void*)(update.data()), (SizeT)(update.size() * sizeof(Int)) }, - sizeof(Int) - ); + Vector update{999, 888}; + bufObj->UploadSubData({(void*)(update.data()), (SizeT)(update.size() * sizeof(Int))}, sizeof(Int)); - Vector expected{ 100, 999, 888, 400, 500 }; + Vector expected{100, 999, 888, 400, 500}; Vector actual(5); void* p = bufObj->AcquireMemory(false, true, false); memcpy(actual.data(), p, byteSize); @@ -326,9 +305,7 @@ using namespace MobileGL::MG_Impl::GLImpl; class GeneralBufferTest : public ::testing::Test { protected: - void SetUp() override { - MG_State::pGLContext = new MG_State::GLState::GLContext(); - } + void SetUp() override { MG_State::pGLContext = new MG_State::GLState::GLContext(); } GLuint CreateBoundBuffer(GLenum target, GLsizeiptr size, GLenum usage) { GLuint buffer; @@ -361,7 +338,7 @@ TEST_F(GeneralBufferTest, General_BufferLifecycle) { TEST_F(GeneralBufferTest, General_BufferDataOperations) { GLuint buffer = CreateBoundBuffer(GL_ARRAY_BUFFER, 100, GL_STATIC_DRAW); - const char initData[100] = { 0 }; + const char initData[100] = {0}; char readBack[100]; void* mapped = MapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY); ASSERT_NE(mapped, nullptr); @@ -414,16 +391,14 @@ TEST_F(GeneralBufferTest, General_BufferMapping) { strcpy((char*)fullMap, " Full mapping test"); EXPECT_TRUE(UnmapBuffer(GL_ARRAY_BUFFER)); - void* partialMap = MapBufferRange(GL_ARRAY_BUFFER, 0, 30, - GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); + void* partialMap = MapBufferRange(GL_ARRAY_BUFFER, 0, 30, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); ASSERT_NE(partialMap, nullptr); strcpy((char*)partialMap, "Partial (not valid value)"); FlushMappedBufferRange(GL_ARRAY_BUFFER, 0, 7); EXPECT_TRUE(UnmapBuffer(GL_ARRAY_BUFFER)); - partialMap = MapBufferRange(GL_ARRAY_BUFFER, 20, 40, - GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); + partialMap = MapBufferRange(GL_ARRAY_BUFFER, 20, 40, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); ASSERT_NE(partialMap, nullptr); strcpy((char*)partialMap, ": modified data (not valid value)"); @@ -465,8 +440,7 @@ TEST_F(GeneralBufferTest, General_MapFlags) { EXPECT_TRUE(UnmapBuffer(GL_ARRAY_BUFFER)); - void* nosyncMap = MapBufferRange(GL_ARRAY_BUFFER, 0, 100, - GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); + void* nosyncMap = MapBufferRange(GL_ARRAY_BUFFER, 0, 100, GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); ASSERT_NE(nosyncMap, nullptr); memset(nosyncMap, 0xAA, 100); EXPECT_TRUE(UnmapBuffer(GL_ARRAY_BUFFER)); @@ -484,37 +458,33 @@ TEST_F(GeneralBufferTest, General_GeneralTest_1) { BindBuffer(GL_ARRAY_BUFFER, vbo); BufferData(GL_ARRAY_BUFFER, 64, nullptr, GL_STATIC_DRAW); - const float vertexData[] = { 0.1f, 0.2f, 0.3f, 1.0f }; + const float vertexData[] = {0.1f, 0.2f, 0.3f, 1.0f}; BufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertexData), vertexData); BindBuffer(GL_UNIFORM_BUFFER, ibo); - const uint16_t indexData[] = { 0, 1, 2, 3, 0 }; + const uint16_t indexData[] = {0, 1, 2, 3, 0}; BufferData(GL_UNIFORM_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW); - const uint16_t newIndices[] = { 4, 5 }; - BufferSubData(GL_UNIFORM_BUFFER, 2 * sizeof(uint16_t), - sizeof(newIndices), newIndices); + const uint16_t newIndices[] = {4, 5}; + BufferSubData(GL_UNIFORM_BUFFER, 2 * sizeof(uint16_t), sizeof(newIndices), newIndices); BindBuffer(GL_COPY_READ_BUFFER, staging); const char stagingData[] = "StagingBufferData"; BufferData(GL_COPY_READ_BUFFER, sizeof(stagingData), stagingData, GL_STREAM_COPY); - CopyBufferSubData(GL_COPY_READ_BUFFER, GL_ARRAY_BUFFER, - 0, 40, sizeof(stagingData)); + CopyBufferSubData(GL_COPY_READ_BUFFER, GL_ARRAY_BUFFER, 0, 40, sizeof(stagingData)); BindBuffer(GL_UNIFORM_BUFFER, ibo); void* fullMap = MapBuffer(GL_UNIFORM_BUFFER, GL_READ_WRITE); ASSERT_NE(fullMap, nullptr); uint16_t* indices = static_cast(fullMap); - indices[0] = 10; + indices[0] = 10; EXPECT_TRUE(UnmapBuffer(GL_UNIFORM_BUFFER)); BindBuffer(GL_ARRAY_BUFFER, vbo); - void* partialMap = MapBufferRange(GL_ARRAY_BUFFER, 20, 8, - GL_MAP_WRITE_BIT | - GL_MAP_FLUSH_EXPLICIT_BIT); + void* partialMap = MapBufferRange(GL_ARRAY_BUFFER, 20, 8, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT); ASSERT_NE(partialMap, nullptr); const char partialWriteData[] = "PARTIAL"; // 7 chars + '\0' = 8 bytes @@ -552,8 +522,8 @@ TEST_F(GeneralBufferTest, General_GeneralTest_1) { GLenum err = GetError(); EXPECT_EQ(err, GL_INVALID_OPERATION); - GLuint toDelete[] = { vbo, ibo }; - DeleteBuffers(2, toDelete); + GLuint toDelete[] = {vbo, ibo}; + DeleteBuffers(2, toDelete); EXPECT_EQ(GetError(), GL_NO_ERROR); } \ No newline at end of file diff --git a/MobileGL/MG_Test/Program/ProgramTest.cpp b/MobileGL/MG_Test/Program/ProgramTest.cpp index 8d69bbc6..214e99cb 100644 --- a/MobileGL/MG_Test/Program/ProgramTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramTest.cpp @@ -8,13 +8,9 @@ using namespace MobileGL::MG_Impl::GLImpl; class ProgramTest : public ::testing::Test { protected: - void SetUp() override { - MG_State::pGLContext = new MG_State::GLState::GLContext(); - } + void SetUp() override { MG_State::pGLContext = new MG_State::GLState::GLContext(); } - void TearDown() override { - delete MG_State::pGLContext; - } + void TearDown() override { delete MG_State::pGLContext; } }; TEST_F(ProgramTest, Sanity) { @@ -94,7 +90,6 @@ void main() { fragColor = vec4(OutColor, float(intVal)); })"; - TEST_F(ProgramTest, CompileVertex) { GLuint vs = CreateShader(GL_VERTEX_SHADER); ShaderSource(vs, 1, &vsSrc, NULL); @@ -215,32 +210,24 @@ TEST_F(ProgramTest, UniformMatrixFunctions) { // Test UniformMatrix2fv auto locProjMat = GetUniformLocation(program, "ProjMat"); ASSERT_NE(locProjMat, -1); - + // 4x4 matrix (16 elements) - identity matrix - GLfloat matrix4x4[16] = { - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - }; - + GLfloat matrix4x4[16] = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + // Test UniformMatrix4fv with count = 1 and transpose = GL_FALSE UniformMatrix4fv(locProjMat, 1, GL_FALSE, matrix4x4); - + // Test UniformMatrix4fv with count = 1 and transpose = GL_TRUE UniformMatrix4fv(locProjMat, 1, GL_TRUE, matrix4x4); - + // Test with a non-identity matrix - GLfloat nonIdentityMatrix[16] = { - 1.0f, 2.0f, 3.0f, 4.0f, - 5.0f, 6.0f, 7.0f, 8.0f, - 9.0f, 10.0f, 11.0f, 12.0f, - 13.0f, 14.0f, 15.0f, 16.0f - }; - + GLfloat nonIdentityMatrix[16] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, + 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f}; + // Test with transpose = GL_FALSE UniformMatrix4fv(locProjMat, 1, GL_FALSE, nonIdentityMatrix); - + // Test with transpose = GL_TRUE UniformMatrix4fv(locProjMat, 1, GL_TRUE, nonIdentityMatrix); } @@ -288,8 +275,8 @@ TEST_F(ProgramTest, UniformMatrixTranspose) { // [1 3] // [2 4] GLfloat matrix2x2[4] = { - 1.0f, 2.0f, // First column - 3.0f, 4.0f // Second column + 1.0f, 2.0f, // First column + 3.0f, 4.0f // Second column }; // Expected values when transpose = GL_FALSE (no transpose): @@ -318,7 +305,7 @@ TEST_F(ProgramTest, UniformMatrixTranspose) { for (int i = 0; i < 4; i++) { EXPECT_FLOAT_EQ(result2x2_transpose[i], expected2x2_transpose[i]); } - + // Test 3x3 matrix transpose auto locMat3 = GetUniformLocation(program, "TestMat3"); ASSERT_NE(locMat3, -1); @@ -327,9 +314,9 @@ TEST_F(ProgramTest, UniformMatrixTranspose) { // [2 5 8] // [3 6 9] GLfloat matrix3x3[9] = { - 1.0f, 2.0f, 3.0f, // First column - 4.0f, 5.0f, 6.0f, // Second column - 7.0f, 8.0f, 9.0f // Third column + 1.0f, 2.0f, 3.0f, // First column + 4.0f, 5.0f, 6.0f, // Second column + 7.0f, 8.0f, 9.0f // Third column }; // Expected values when transpose = GL_FALSE (no transpose): @@ -360,40 +347,40 @@ TEST_F(ProgramTest, UniformMatrixTranspose) { for (int i = 0; i < 9; i++) { EXPECT_FLOAT_EQ(result3x3_transpose[i], expected3x3_transpose[i]); } - + // Test 4x4 matrix transpose auto locProjMat = GetUniformLocation(program, "ProjMat"); ASSERT_NE(locProjMat, -1); - + // Test matrix (column-major as expected by OpenGL): // [1 5 9 13] // [2 6 10 14] // [3 7 11 15] // [4 8 12 16] GLfloat matrix4x4[16] = { - 1.0f, 2.0f, 3.0f, 4.0f, // First column - 5.0f, 6.0f, 7.0f, 8.0f, // Second column - 9.0f, 10.0f, 11.0f, 12.0f, // Third column - 13.0f, 14.0f, 15.0f, 16.0f // Fourth column + 1.0f, 2.0f, 3.0f, 4.0f, // First column + 5.0f, 6.0f, 7.0f, 8.0f, // Second column + 9.0f, 10.0f, 11.0f, 12.0f, // Third column + 13.0f, 14.0f, 15.0f, 16.0f // Fourth column }; - + // Expected values when transpose = GL_FALSE (no transpose): // [1 5 9 13] // [2 6 10 14] // [3 7 11 15] // [4 8 12 16] - GLfloat expected4x4_no_transpose[16] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, - 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f}; - + GLfloat expected4x4_no_transpose[16] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, + 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f}; + // Expected values when transpose = GL_TRUE (transposed): // [1 2 3 4] // [5 6 7 8] // [9 10 11 12] // [13 14 15 16] // Stored in column-major order - GLfloat expected4x4_transpose[16] = {1.0f, 5.0f, 9.0f, 13.0f, 2.0f, 6.0f, 10.0f, 14.0f, - 3.0f, 7.0f, 11.0f, 15.0f, 4.0f, 8.0f, 12.0f, 16.0f}; - + GLfloat expected4x4_transpose[16] = {1.0f, 5.0f, 9.0f, 13.0f, 2.0f, 6.0f, 10.0f, 14.0f, + 3.0f, 7.0f, 11.0f, 15.0f, 4.0f, 8.0f, 12.0f, 16.0f}; + // Test with transpose = GL_FALSE UniformMatrix4fv(locProjMat, 1, GL_FALSE, matrix4x4); GLfloat result4x4_no_transpose[16]; @@ -401,7 +388,7 @@ TEST_F(ProgramTest, UniformMatrixTranspose) { for (int i = 0; i < 16; i++) { EXPECT_FLOAT_EQ(result4x4_no_transpose[i], expected4x4_no_transpose[i]); } - + // Test with transpose = GL_TRUE UniformMatrix4fv(locProjMat, 1, GL_TRUE, matrix4x4); GLfloat result4x4_transpose[16]; @@ -444,29 +431,25 @@ TEST_F(ProgramTest, UniformLocationGaps) { // Test that uniform locations are correctly assigned even with gaps // ProjMat is at location 0 ASSERT_EQ(GetUniformLocation(program, "ProjMat"), 0); - + // TestMat3 is at location 10 (gap from 1-9) ASSERT_EQ(GetUniformLocation(program, "TestMat3"), 10); - + // TestMat2 is at location 20 (gap from 11-19) ASSERT_EQ(GetUniformLocation(program, "TestMat2"), 20); - + // Gray is at location 1 (no gap) ASSERT_EQ(GetUniformLocation(program, "Gray"), 1); - + // Saturation is at location 6 (gap from 2-5) ASSERT_EQ(GetUniformLocation(program, "Saturation"), 6); - + // Verify that locations in gaps correctly return -1 ASSERT_EQ(GetUniformLocation(program, "NonExistentUniform"), -1); - + // Test uniform operations on locations with gaps - GLfloat matrix3[9] = { - 1.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 1.0f - }; - + GLfloat matrix3[9] = {1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f}; + // Test setting and getting uniform at location 10 (TestMat3) UniformMatrix3fv(10, 1, GL_FALSE, matrix3); GLfloat result[9]; @@ -474,19 +457,16 @@ TEST_F(ProgramTest, UniformLocationGaps) { for (int i = 0; i < 9; i++) { EXPECT_FLOAT_EQ(result[i], matrix3[i]); } - + // Test setting and getting uniform at location 20 (TestMat2) - GLfloat matrix2[4] = { - 1.0f, 0.0f, - 0.0f, 1.0f - }; + GLfloat matrix2[4] = {1.0f, 0.0f, 0.0f, 1.0f}; UniformMatrix2fv(20, 1, GL_FALSE, matrix2); GLfloat result2[4]; GetUniformfv(program, 20, result2); for (int i = 0; i < 4; i++) { EXPECT_FLOAT_EQ(result2[i], matrix2[i]); } - + // Test that accessing a gap location (e.g., 5) doesn't cause issues // This should not crash or cause undefined behavior Uniform1i(5, 114514); // Just to make sure we don't crash diff --git a/MobileGL/MG_Test/Program/ProgramUtilTest.cpp b/MobileGL/MG_Test/Program/ProgramUtilTest.cpp index 6de004e3..4097e5e5 100644 --- a/MobileGL/MG_Test/Program/ProgramUtilTest.cpp +++ b/MobileGL/MG_Test/Program/ProgramUtilTest.cpp @@ -41,10 +41,7 @@ void main(){ TEST_F(ProgramUtilTest, CompileSimpleVertexShader) { using namespace MG_Util::ShaderTranspiler; - ShaderAttrib attrib { - .shaderType = GL_VERTEX_SHADER, - .sourceStr = vs - }; + ShaderAttrib attrib{.shaderType = GL_VERTEX_SHADER, .sourceStr = vs}; auto res = ShaderCompiler::CompileShader(attrib); if (!res) { ASSERT_NE(res.error().errc, 0); @@ -93,10 +90,7 @@ void main() { TEST_F(ProgramUtilTest, CompileSimpleFragmentShader) { using namespace MG_Util::ShaderTranspiler; - ShaderAttrib attrib { - .shaderType = GL_FRAGMENT_SHADER, - .sourceStr = fs - }; + ShaderAttrib attrib{.shaderType = GL_FRAGMENT_SHADER, .sourceStr = fs}; auto res = ShaderCompiler::CompileShader(attrib); if (!res) { ASSERT_NE(res.error().errc, 0); @@ -122,20 +116,15 @@ void main() { TEST_F(ProgramUtilTest, CompileFragmentShaderWithDiscard) { using namespace MG_Util::ShaderTranspiler; - ShaderAttrib attrib { - .shaderType = GL_FRAGMENT_SHADER, - .sourceStr = position_color_fsh -}; + ShaderAttrib attrib{.shaderType = GL_FRAGMENT_SHADER, .sourceStr = position_color_fsh}; auto res = ShaderCompiler::CompileShader(attrib); if (!res) { ASSERT_NE(res.error().errc, 0); FAIL() << "errc: " << res.error().errc << "\nlog: " << res.error().log; } - ProgramAttrib programAttrib { - // .shaderTypes = { GL_FRAGMENT_SHADER }, - .shaders = { res.value() } - }; + ProgramAttrib programAttrib{// .shaderTypes = { GL_FRAGMENT_SHADER }, + .shaders = {res.value()}}; auto program_res = ShaderCompiler::LinkProgram(programAttrib); if (!program_res) { @@ -145,8 +134,8 @@ TEST_F(ProgramUtilTest, CompileFragmentShaderWithDiscard) { auto program = program_res.value(); - ProgramBinaryAttrib binaryAttrib { - .shaderTypes = { GL_FRAGMENT_SHADER }, + ProgramBinaryAttrib binaryAttrib{ + .shaderTypes = {GL_FRAGMENT_SHADER}, .program = *program, }; auto bin_res = ShaderCompiler::GetSpirvBinaryFromProgram(binaryAttrib); @@ -196,11 +185,8 @@ void main(){ TEST_F(ProgramUtilTest, CompileVertexShaderWithLocation) { using namespace MG_Util::ShaderTranspiler; - ShaderAttrib attrib { - .shaderType = GL_VERTEX_SHADER, - .sourceStr = vs_location, - .flags = ShaderCompileBits::CompileForOpenGL - }; + ShaderAttrib attrib{ + .shaderType = GL_VERTEX_SHADER, .sourceStr = vs_location, .flags = ShaderCompileBits::CompileForOpenGL}; auto res = ShaderCompiler::CompileShader(attrib); if (!res) { ASSERT_NE(res.error().errc, 0); @@ -224,30 +210,22 @@ TEST_F(ProgramUtilTest, CompileVertexShaderWithLocation) { TEST_F(ProgramUtilTest, CompileAndLinkProgram) { using namespace MG_Util::ShaderTranspiler; - ShaderAttrib vs_attrib { - .shaderType = GL_VERTEX_SHADER, - .sourceStr = vs - }; + ShaderAttrib vs_attrib{.shaderType = GL_VERTEX_SHADER, .sourceStr = vs}; auto vs_res = ShaderCompiler::CompileShader(vs_attrib); if (!vs_res) { ASSERT_NE(vs_res.error().errc, 0); FAIL() << "errc: " << vs_res.error().errc << "\nlog: " << vs_res.error().log; } - ShaderAttrib fs_attrib { - .shaderType = GL_FRAGMENT_SHADER, - .sourceStr = fs -}; + ShaderAttrib fs_attrib{.shaderType = GL_FRAGMENT_SHADER, .sourceStr = fs}; auto fs_res = ShaderCompiler::CompileShader(fs_attrib); if (!fs_res) { ASSERT_NE(fs_res.error().errc, 0); FAIL() << "errc: " << fs_res.error().errc << "\nlog: " << fs_res.error().log; } - ProgramAttrib programAttrib { - // .shaderTypes = { GL_VERTEX_SHADER, GL_FRAGMENT_SHADER }, - .shaders = { vs_res.value(), fs_res.value() } - }; + ProgramAttrib programAttrib{// .shaderTypes = { GL_VERTEX_SHADER, GL_FRAGMENT_SHADER }, + .shaders = {vs_res.value(), fs_res.value()}}; auto program_res = ShaderCompiler::LinkProgram(programAttrib); if (!program_res) { @@ -258,30 +236,22 @@ TEST_F(ProgramUtilTest, CompileAndLinkProgram) { TEST_F(ProgramUtilTest, DecompProgram) { using namespace MG_Util::ShaderTranspiler; - ShaderAttrib vs_attrib { - .shaderType = GL_VERTEX_SHADER, - .sourceStr = vs - }; + ShaderAttrib vs_attrib{.shaderType = GL_VERTEX_SHADER, .sourceStr = vs}; auto vs_res = ShaderCompiler::CompileShader(vs_attrib); if (!vs_res) { ASSERT_NE(vs_res.error().errc, 0); FAIL() << "errc: " << vs_res.error().errc << "\nlog: " << vs_res.error().log; } - ShaderAttrib fs_attrib { - .shaderType = GL_FRAGMENT_SHADER, - .sourceStr = fs -}; + ShaderAttrib fs_attrib{.shaderType = GL_FRAGMENT_SHADER, .sourceStr = fs}; auto fs_res = ShaderCompiler::CompileShader(fs_attrib); if (!fs_res) { ASSERT_NE(fs_res.error().errc, 0); FAIL() << "errc: " << fs_res.error().errc << "\nlog: " << fs_res.error().log; } - ProgramAttrib programAttrib { - // .shaderTypes = { GL_VERTEX_SHADER, GL_FRAGMENT_SHADER }, - .shaders = { vs_res.value(), fs_res.value() } - }; + ProgramAttrib programAttrib{// .shaderTypes = { GL_VERTEX_SHADER, GL_FRAGMENT_SHADER }, + .shaders = {vs_res.value(), fs_res.value()}}; auto program_res = ShaderCompiler::LinkProgram(programAttrib); if (!program_res) { @@ -289,8 +259,8 @@ TEST_F(ProgramUtilTest, DecompProgram) { FAIL() << "errc: " << program_res.error().errc << "\nlog: " << program_res.error().log; } - ProgramBinaryAttrib binaryAttrib { - .shaderTypes = { GL_VERTEX_SHADER, GL_FRAGMENT_SHADER }, + ProgramBinaryAttrib binaryAttrib{ + .shaderTypes = {GL_VERTEX_SHADER, GL_FRAGMENT_SHADER}, .program = *program_res.value(), }; auto bin_res = ShaderCompiler::GetSpirvBinaryFromProgram(binaryAttrib); @@ -322,7 +292,7 @@ TEST_F(ProgramUtilTest, DecompProgram) { for (size_t i = 0; i < vs_outputs.size(); ++i) { EXPECT_EQ(vs_outputs[i].location, fs_inputs[i].location); } - + auto vs_uniforms = sessions[0].GetShaderInterface(SPVC_RESOURCE_TYPE_GL_PLAIN_UNIFORM); auto fs_uniforms = sessions[1].GetShaderInterface(SPVC_RESOURCE_TYPE_GL_PLAIN_UNIFORM); diff --git a/MobileGL/MG_Test/SanityTest.cpp b/MobileGL/MG_Test/SanityTest.cpp index 2c0a7fb8..20043908 100644 --- a/MobileGL/MG_Test/SanityTest.cpp +++ b/MobileGL/MG_Test/SanityTest.cpp @@ -1,8 +1,8 @@ #include TEST(Sanity, BasicAssertions) { - // Expect two strings not to be equal. - EXPECT_STRNE("hello", "world"); - // Expect equality. - EXPECT_EQ(7 * 6, 42); + // Expect two strings not to be equal. + EXPECT_STRNE("hello", "world"); + // Expect equality. + EXPECT_EQ(7 * 6, 42); } \ No newline at end of file diff --git a/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp b/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp index 0c6d04b9..2c072a32 100644 --- a/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp +++ b/MobileGL/MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.cpp @@ -19,106 +19,111 @@ namespace MobileGL { if (matCol > 1) { switch (baseType) { - case GL_FLOAT: - if (vecSize == 4 && matCol == 4) return GL_FLOAT_MAT4; - if (vecSize == 3 && matCol == 3) return GL_FLOAT_MAT3; - if (vecSize == 2 && matCol == 2) return GL_FLOAT_MAT2; - if (vecSize == 2 && matCol == 3) return GL_FLOAT_MAT3x2; - if (vecSize == 2 && matCol == 4) return GL_FLOAT_MAT4x2; - if (vecSize == 3 && matCol == 2) return GL_FLOAT_MAT2x3; - if (vecSize == 3 && matCol == 4) return GL_FLOAT_MAT4x3; - if (vecSize == 4 && matCol == 2) return GL_FLOAT_MAT2x4; - if (vecSize == 4 && matCol == 3) return GL_FLOAT_MAT3x4; - break; - case GL_DOUBLE: - if (vecSize == 4 && matCol == 4) return GL_DOUBLE_MAT4; - if (vecSize == 3 && matCol == 3) return GL_DOUBLE_MAT3; - if (vecSize == 2 && matCol == 2) return GL_DOUBLE_MAT2; - if (vecSize == 2 && matCol == 3) return GL_DOUBLE_MAT3x2; - if (vecSize == 2 && matCol == 4) return GL_DOUBLE_MAT4x2; - if (vecSize == 3 && matCol == 2) return GL_DOUBLE_MAT2x3; - if (vecSize == 3 && matCol == 4) return GL_DOUBLE_MAT4x3; - if (vecSize == 4 && matCol == 2) return GL_DOUBLE_MAT2x4; - if (vecSize == 4 && matCol == 3) return GL_DOUBLE_MAT3x4; - break; - default: - return GL_FALSE; + case GL_FLOAT: + if (vecSize == 4 && matCol == 4) return GL_FLOAT_MAT4; + if (vecSize == 3 && matCol == 3) return GL_FLOAT_MAT3; + if (vecSize == 2 && matCol == 2) return GL_FLOAT_MAT2; + if (vecSize == 2 && matCol == 3) return GL_FLOAT_MAT3x2; + if (vecSize == 2 && matCol == 4) return GL_FLOAT_MAT4x2; + if (vecSize == 3 && matCol == 2) return GL_FLOAT_MAT2x3; + if (vecSize == 3 && matCol == 4) return GL_FLOAT_MAT4x3; + if (vecSize == 4 && matCol == 2) return GL_FLOAT_MAT2x4; + if (vecSize == 4 && matCol == 3) return GL_FLOAT_MAT3x4; + break; + case GL_DOUBLE: + if (vecSize == 4 && matCol == 4) return GL_DOUBLE_MAT4; + if (vecSize == 3 && matCol == 3) return GL_DOUBLE_MAT3; + if (vecSize == 2 && matCol == 2) return GL_DOUBLE_MAT2; + if (vecSize == 2 && matCol == 3) return GL_DOUBLE_MAT3x2; + if (vecSize == 2 && matCol == 4) return GL_DOUBLE_MAT4x2; + if (vecSize == 3 && matCol == 2) return GL_DOUBLE_MAT2x3; + if (vecSize == 3 && matCol == 4) return GL_DOUBLE_MAT4x3; + if (vecSize == 4 && matCol == 2) return GL_DOUBLE_MAT2x4; + if (vecSize == 4 && matCol == 3) return GL_DOUBLE_MAT3x4; + break; + default: + return GL_FALSE; } } else if (matCol == 1) { switch (baseType) { - case GL_BOOL: - switch (vecSize) { - case 4: return GL_BOOL_VEC4; - case 3: return GL_BOOL_VEC3; - case 2: return GL_BOOL_VEC2; - } - case GL_FLOAT: - return GL_FLOAT_VEC2 + (vecSize - 2); // GL_FLOAT_VEC* is contiguous - case GL_DOUBLE: - switch (vecSize) { - case 4: return GL_DOUBLE_VEC4; - case 3: return GL_DOUBLE_VEC3; - case 2: return GL_DOUBLE_VEC2; - } - break; - case GL_INT: - return GL_INT_VEC2 + (vecSize - 2); // GL_INT_VEC* is contiguous - case GL_UNSIGNED_INT: - return GL_UNSIGNED_INT_VEC2 + (vecSize - 2); // GL_UNSIGNED_INT_VEC* is contiguous + case GL_BOOL: + switch (vecSize) { + case 4: + return GL_BOOL_VEC4; + case 3: + return GL_BOOL_VEC3; + case 2: + return GL_BOOL_VEC2; + } + case GL_FLOAT: + return GL_FLOAT_VEC2 + (vecSize - 2); // GL_FLOAT_VEC* is contiguous + case GL_DOUBLE: + switch (vecSize) { + case 4: + return GL_DOUBLE_VEC4; + case 3: + return GL_DOUBLE_VEC3; + case 2: + return GL_DOUBLE_VEC2; + } + break; + case GL_INT: + return GL_INT_VEC2 + (vecSize - 2); // GL_INT_VEC* is contiguous + case GL_UNSIGNED_INT: + return GL_UNSIGNED_INT_VEC2 + (vecSize - 2); // GL_UNSIGNED_INT_VEC* is contiguous } } return GL_FALSE; } - GLenum ConvertSpvcTypeToGLEnum(const ShaderTranspiler::SpvcType& spvcType) { switch (spvcType.basetype) { - case SPVC_BASETYPE_BOOLEAN: - return ConvertBaseTypeToType(GL_BOOL, spvcType.vectorSize, spvcType.matCol); - case SPVC_BASETYPE_INT8: - return ConvertBaseTypeToType(GL_BYTE, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_BOOLEAN: + return ConvertBaseTypeToType(GL_BOOL, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_INT8: + return ConvertBaseTypeToType(GL_BYTE, spvcType.vectorSize, spvcType.matCol); - case SPVC_BASETYPE_INT16: - case SPVC_BASETYPE_INT32: - case SPVC_BASETYPE_INT64: - return ConvertBaseTypeToType(GL_INT, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_INT16: + case SPVC_BASETYPE_INT32: + case SPVC_BASETYPE_INT64: + return ConvertBaseTypeToType(GL_INT, spvcType.vectorSize, spvcType.matCol); - case SPVC_BASETYPE_UINT8: - return ConvertBaseTypeToType(GL_UNSIGNED_BYTE, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_UINT8: + return ConvertBaseTypeToType(GL_UNSIGNED_BYTE, spvcType.vectorSize, spvcType.matCol); - case SPVC_BASETYPE_UINT16: - case SPVC_BASETYPE_UINT32: - case SPVC_BASETYPE_UINT64: - return ConvertBaseTypeToType(GL_UNSIGNED_INT, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_UINT16: + case SPVC_BASETYPE_UINT32: + case SPVC_BASETYPE_UINT64: + return ConvertBaseTypeToType(GL_UNSIGNED_INT, spvcType.vectorSize, spvcType.matCol); - case SPVC_BASETYPE_ATOMIC_COUNTER: - return GL_UNSIGNED_INT_ATOMIC_COUNTER; + case SPVC_BASETYPE_ATOMIC_COUNTER: + return GL_UNSIGNED_INT_ATOMIC_COUNTER; - case SPVC_BASETYPE_FP16: - case SPVC_BASETYPE_FP32: - return ConvertBaseTypeToType(GL_FLOAT, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_FP16: + case SPVC_BASETYPE_FP32: + return ConvertBaseTypeToType(GL_FLOAT, spvcType.vectorSize, spvcType.matCol); - case SPVC_BASETYPE_FP64: - return ConvertBaseTypeToType(GL_DOUBLE, spvcType.vectorSize, spvcType.matCol); + case SPVC_BASETYPE_FP64: + return ConvertBaseTypeToType(GL_DOUBLE, spvcType.vectorSize, spvcType.matCol); - // FIXME: likely wrong conversions! - case SPVC_BASETYPE_IMAGE: - return GL_IMAGE_2D; - case SPVC_BASETYPE_SAMPLED_IMAGE: - return GL_IMAGE_2D; - case SPVC_BASETYPE_SAMPLER: - return GL_SAMPLER_2D; + // FIXME: likely wrong conversions! + case SPVC_BASETYPE_IMAGE: + return GL_IMAGE_2D; + case SPVC_BASETYPE_SAMPLED_IMAGE: + return GL_IMAGE_2D; + case SPVC_BASETYPE_SAMPLER: + return GL_SAMPLER_2D; - case SPVC_BASETYPE_STRUCT: - case SPVC_BASETYPE_VOID: - case SPVC_BASETYPE_UNKNOWN: - case SPVC_BASETYPE_ACCELERATION_STRUCTURE: - default: - return GL_FALSE; + case SPVC_BASETYPE_STRUCT: + case SPVC_BASETYPE_VOID: + case SPVC_BASETYPE_UNKNOWN: + case SPVC_BASETYPE_ACCELERATION_STRUCTURE: + default: + return GL_FALSE; } } - } -} + } // namespace MG_Util +} // namespace MobileGL diff --git a/MobileGL/MG_Util/Debug/Log.cpp b/MobileGL/MG_Util/Debug/Log.cpp index 759acd37..b96bb624 100644 --- a/MobileGL/MG_Util/Debug/Log.cpp +++ b/MobileGL/MG_Util/Debug/Log.cpp @@ -20,7 +20,7 @@ namespace MobileGL { } std::string GetThreadName() { - char buffer[64] = { 0 }; + char buffer[64] = {0}; #if defined(_WIN32) && !defined(__MINGW32__) PWSTR desc = nullptr; if (SUCCEEDED(GetThreadDescription(GetCurrentThread(), &desc))) { @@ -37,7 +37,7 @@ namespace MobileGL { using namespace std::chrono; auto now = system_clock::now(); std::time_t tt = system_clock::to_time_t(now); - struct tm tm {}; + struct tm tm{}; #if defined(_WIN32) localtime_s(&tm, &tt); #else @@ -69,7 +69,8 @@ namespace MobileGL { void Log(const char* levelTag, android_LogPriority androidLogLevel, const char* fmt, ...) { std::lock_guard lock(s_mutex); - std::string header = "[" + GetCurrentTime() + "] [" + GetOSName() + " " + GetThreadName() + "/" + levelTag + "]: "; + std::string header = + "[" + GetCurrentTime() + "] [" + GetOSName() + " " + GetThreadName() + "/" + levelTag + "]: "; char buffer[1024]; va_list args; @@ -98,5 +99,5 @@ namespace MobileGL { } #endif } - } -} \ No newline at end of file + } // namespace MG_Util::Debug +} // namespace MobileGL \ No newline at end of file diff --git a/MobileGL/MG_Util/GLExtensions.h b/MobileGL/MG_Util/GLExtensions.h index 87fb02e4..757dd53e 100644 --- a/MobileGL/MG_Util/GLExtensions.h +++ b/MobileGL/MG_Util/GLExtensions.h @@ -1,766 +1,766 @@ #pragma once namespace MobileGL { - enum GLExtension { - V_OpenGL10 , - V_OpenGL11 , - V_OpenGL12 , - V_OpenGL13 , - V_OpenGL14 , - V_OpenGL15 , - V_OpenGL20 , - V_OpenGL21 , - V_OpenGL30 , - V_OpenGL31 , - V_OpenGL32 , - V_OpenGL33 , - V_OpenGL40 , - V_OpenGL41 , - V_OpenGL42 , - V_OpenGL43 , - V_OpenGL44 , - V_OpenGL45 , - V_OpenGL46 , - E_GL_EXT_shader_samples_identical , - E_GL_ARB_multitexture , - E_GLX_ARB_get_proc_address , - E_GL_ARB_transpose_matrix , - E_WGL_ARB_buffer_region , - E_GL_ARB_multisample , - E_GLX_ARB_multisample , - E_WGL_ARB_multisample , - E_GL_ARB_texture_env_add , - E_GL_ARB_texture_cube_map , - E_WGL_ARB_extensions_string , - E_WGL_ARB_pixel_format , - E_WGL_ARB_make_current_read , - E_WGL_ARB_pbuffer , - E_GL_ARB_texture_compression , - E_GL_ARB_texture_border_clamp , - E_GL_ARB_point_parameters , - E_GL_ARB_vertex_blend , - E_GL_ARB_matrix_palette , - E_GL_ARB_texture_env_combine , - E_GL_ARB_texture_env_crossbar , - E_GL_ARB_texture_env_dot3 , - E_WGL_ARB_render_texture , - E_GL_ARB_texture_mirrored_repeat , - E_GL_ARB_depth_texture , - E_GL_ARB_shadow , - E_GL_ARB_shadow_ambient , - E_GL_ARB_window_pos , - E_GL_ARB_vertex_program , - E_GL_ARB_fragment_program , - E_GL_ARB_vertex_buffer_object , - E_GLX_ARB_vertex_buffer_object , - E_GL_ARB_occlusion_query , - E_GL_ARB_shader_objects , - E_GL_ARB_vertex_shader , - E_GL_ARB_fragment_shader , - E_GL_ARB_shading_language_100 , - E_GL_ARB_texture_non_power_of_two , - E_GL_ARB_point_sprite , - E_GL_ARB_fragment_program_shadow , - E_GL_ARB_draw_buffers , - E_GL_ARB_texture_rectangle , - E_GL_ARB_color_buffer_float , - E_GLX_ARB_fbconfig_float , - E_WGL_ARB_pixel_format_float , - E_GL_ARB_half_float_pixel , - E_GL_ARB_texture_float , - E_GL_ARB_pixel_buffer_object , - E_GL_ARB_depth_buffer_float , - E_GL_ARB_draw_instanced , - E_GL_ARB_framebuffer_object , - E_GL_ARB_framebuffer_sRGB , - E_GLX_ARB_framebuffer_sRGB , - E_WGL_ARB_framebuffer_sRGB , - E_GL_ARB_geometry_shader4 , - E_GL_ARB_half_float_vertex , - E_GL_ARB_instanced_arrays , - E_GL_ARB_map_buffer_range , - E_GL_ARB_texture_buffer_object , - E_GL_ARB_texture_compression_rgtc , - E_GL_ARB_texture_rg , - E_GL_ARB_vertex_array_object , - E_WGL_ARB_create_context , - E_GLX_ARB_create_context , - E_GL_ARB_uniform_buffer_object , - E_GL_ARB_compatibility , - E_GL_ARB_copy_buffer , - E_GL_ARB_shader_texture_lod , - E_GL_ARB_depth_clamp , - E_GL_ARB_draw_elements_base_vertex , - E_GL_ARB_fragment_coord_conventions , - E_GL_ARB_provoking_vertex , - E_GL_ARB_seamless_cube_map , - E_GL_ARB_sync , - E_GL_ARB_texture_multisample , - E_GL_ARB_vertex_array_bgra , - E_GL_ARB_draw_buffers_blend , - E_GL_ARB_sample_shading , - E_GL_ARB_texture_cube_map_array , - E_GL_ARB_texture_gather , - E_GL_ARB_texture_query_lod , - E_WGL_ARB_create_context_profile , - E_GLX_ARB_create_context_profile , - E_GL_ARB_shading_language_include , - E_GL_ARB_texture_compression_bptc , - E_GL_ARB_blend_func_extended , - E_GL_ARB_explicit_attrib_location , - E_GL_ARB_occlusion_query2 , - E_GL_ARB_sampler_objects , - E_GL_ARB_shader_bit_encoding , - E_GL_ARB_texture_rgb10_a2ui , - E_GL_ARB_texture_swizzle , - E_GL_ARB_timer_query , - E_GL_ARB_vertex_type_2_10_10_10_rev , - E_GL_ARB_draw_indirect , - E_GL_ARB_gpu_shader5 , - E_GL_ARB_gpu_shader_fp64 , - E_GL_ARB_shader_subroutine , - E_GL_ARB_tessellation_shader , - E_GL_ARB_texture_buffer_object_rgb32 , - E_GL_ARB_transform_feedback2 , - E_GL_ARB_transform_feedback3 , - E_GL_ARB_ES2_compatibility , - E_GL_ARB_get_program_binary , - E_GL_ARB_separate_shader_objects , - E_GL_ARB_shader_precision , - E_GL_ARB_vertex_attrib_64bit , - E_GL_ARB_viewport_array , - E_GLX_ARB_create_context_robustness , - E_WGL_ARB_create_context_robustness , - E_GL_ARB_cl_event , - E_GL_ARB_debug_output , - E_GL_ARB_robustness , - E_GL_ARB_shader_stencil_export , - E_GL_ARB_base_instance , - E_GL_ARB_shading_language_420pack , - E_GL_ARB_transform_feedback_instanced , - E_GL_ARB_compressed_texture_pixel_storage , - E_GL_ARB_conservative_depth , - E_GL_ARB_internalformat_query , - E_GL_ARB_map_buffer_alignment , - E_GL_ARB_shader_atomic_counters , - E_GL_ARB_shader_image_load_store , - E_GL_ARB_shading_language_packing , - E_GL_ARB_texture_storage , - E_GL_KHR_texture_compression_astc_hdr , - E_GL_KHR_texture_compression_astc_ldr , - E_GL_KHR_debug , - E_GL_ARB_arrays_of_arrays , - E_GL_ARB_clear_buffer_object , - E_GL_ARB_compute_shader , - E_GL_ARB_copy_image , - E_GL_ARB_texture_view , - E_GL_ARB_vertex_attrib_binding , - E_GL_ARB_robustness_isolation , - E_GL_ARB_robustness_share_group_isolation , - E_GL_ARB_ES3_compatibility , - E_GL_ARB_explicit_uniform_location , - E_GL_ARB_fragment_layer_viewport , - E_GL_ARB_framebuffer_no_attachments , - E_GL_ARB_internalformat_query2 , - E_GL_ARB_invalidate_subdata , - E_GL_ARB_multi_draw_indirect , - E_GL_ARB_program_interface_query , - E_GL_ARB_robust_buffer_access_behavior , - E_GL_ARB_shader_image_size , - E_GL_ARB_shader_storage_buffer_object , - E_GL_ARB_stencil_texturing , - E_GL_ARB_texture_buffer_range , - E_GL_ARB_texture_query_levels , - E_GL_ARB_texture_storage_multisample , - E_GLX_ARB_robustness_application_isolation , - E_GLX_ARB_robustness_share_group_isolation , - E_WGL_ARB_robustness_application_isolation , - E_WGL_ARB_robustness_share_group_isolation , - E_GL_ARB_buffer_storage , - E_GL_ARB_clear_texture , - E_GL_ARB_enhanced_layouts , - E_GL_ARB_multi_bind , - E_GL_ARB_query_buffer_object , - E_GL_ARB_texture_mirror_clamp_to_edge , - E_GL_ARB_texture_stencil8 , - E_GL_ARB_vertex_type_10f_11f_11f_rev , - E_GL_ARB_bindless_texture , - E_GL_ARB_compute_variable_group_size , - E_GL_ARB_indirect_parameters , - E_GL_ARB_seamless_cubemap_per_texture , - E_GL_ARB_shader_draw_parameters , - E_GL_ARB_shader_group_vote , - E_GL_ARB_sparse_texture , - E_GL_ARB_ES3_1_compatibility , - E_GL_ARB_clip_control , - E_GL_ARB_conditional_render_inverted , - E_GL_ARB_cull_distance , - E_GL_ARB_derivative_control , - E_GL_ARB_direct_state_access , - E_GL_ARB_get_texture_sub_image , - E_GL_ARB_shader_texture_image_samples , - E_GL_ARB_texture_barrier , - E_GL_KHR_context_flush_control , - E_GLX_ARB_context_flush_control , - E_WGL_ARB_context_flush_control , - E_GL_KHR_robust_buffer_access_behavior , - E_GL_KHR_robustness , - E_GL_ARB_pipeline_statistics_query , - E_GL_ARB_sparse_buffer , - E_GL_ARB_transform_feedback_overflow_query , - E_GL_KHR_blend_equation_advanced , - E_GL_KHR_blend_equation_advanced_coherent , - E_GL_KHR_no_error , - E_GL_ARB_ES3_2_compatibility , - E_GL_ARB_fragment_shader_interlock , - E_GL_ARB_gpu_shader_int64 , - E_GL_ARB_parallel_shader_compile , - E_GL_ARB_post_depth_coverage , - E_GL_ARB_sample_locations , - E_GL_ARB_shader_atomic_counter_ops , - E_GL_ARB_shader_ballot , - E_GL_ARB_shader_clock , - E_GL_ARB_shader_viewport_layer_array , - E_GL_ARB_sparse_texture2 , - E_GL_ARB_sparse_texture_clamp , - E_GL_ARB_texture_filter_minmax , - E_GL_KHR_texture_compression_astc_sliced_3d , - E_GL_ARB_gl_spirv , - E_GLX_ARB_create_context_no_error , - E_WGL_ARB_create_context_no_error , - E_GL_KHR_parallel_shader_compile , - E_GL_ARB_polygon_offset_clamp , - E_GL_ARB_spirv_extensions , - E_GL_ARB_texture_filter_anisotropic , - E_GL_KHR_shader_subgroup , - E_GL_EXT_abgr , - E_GL_EXT_blend_color , - E_GL_EXT_polygon_offset , - E_GL_EXT_texture , - E_GL_EXT_texture3D , - E_GL_SGIS_texture_filter4 , - E_GL_EXT_subtexture , - E_GL_EXT_copy_texture , - E_GL_EXT_histogram , - E_GL_EXT_convolution , - E_GL_SGI_color_matrix , - E_GL_SGI_color_table , - E_GL_SGIS_pixel_texture , - E_GL_SGIS_texture4D , - E_GL_SGI_texture_color_table , - E_GL_EXT_cmyka , - E_GL_EXT_texture_object , - E_GL_SGIS_detail_texture , - E_GL_SGIS_sharpen_texture , - E_GL_EXT_packed_pixels , - E_GL_SGIS_texture_lod , - E_GL_SGIS_multisample , - E_GLX_SGIS_multisample , - E_GL_EXT_rescale_normal , - E_GLX_EXT_visual_info , - E_GL_EXT_vertex_array , - E_GL_EXT_misc_attribute , - E_GL_SGIS_generate_mipmap , - E_GL_SGIX_clipmap , - E_GL_SGIX_shadow , - E_GL_SGIS_texture_edge_clamp , - E_GL_SGIS_texture_border_clamp , - E_GL_EXT_blend_minmax , - E_GL_EXT_blend_subtract , - E_GL_EXT_blend_logic_op , - E_GLX_SGI_swap_control , - E_GLX_SGI_video_sync , - E_GLX_SGI_make_current_read , - E_GLX_SGIX_video_source , - E_GLX_EXT_visual_rating , - E_GL_SGIX_interlace , - E_GLX_EXT_import_context , - E_GLX_SGIX_fbconfig , - E_GLX_SGIX_pbuffer , - E_GL_SGIS_texture_select , - E_GL_SGIX_sprite , - E_GL_SGIX_texture_multi_buffer , - E_GL_EXT_point_parameters , - E_GL_SGIX_instruments , - E_GL_SGIX_texture_scale_bias , - E_GL_SGIX_framezoom , - E_GL_SGIX_tag_sample_buffer , - E_GL_SGIX_reference_plane , - E_GL_SGIX_flush_raster , - E_GLX_SGI_cushion , - E_GL_SGIX_depth_texture , - E_GL_SGIS_fog_function , - E_GL_SGIX_fog_offset , - E_GL_HP_image_transform , - E_GL_HP_convolution_border_modes , - E_GL_SGIX_texture_add_env , - E_GL_EXT_color_subtable , - E_GLU_EXT_object_space_tess , - E_GL_PGI_vertex_hints , - E_GL_PGI_misc_hints , - E_GL_EXT_paletted_texture , - E_GL_EXT_clip_volume_hint , - E_GL_SGIX_list_priority , - E_GL_SGIX_ir_instrument1 , - E_GLX_SGIX_video_resize , - E_GL_SGIX_texture_lod_bias , - E_GLU_SGI_filter4_parameters , - E_GLX_SGIX_dm_buffer , - E_GL_SGIX_shadow_ambient , - E_GLX_SGIX_swap_group , - E_GLX_SGIX_swap_barrier , - E_GL_EXT_index_texture , - E_GL_EXT_index_material , - E_GL_EXT_index_func , - E_GL_EXT_index_array_formats , - E_GL_EXT_compiled_vertex_array , - E_GL_EXT_cull_vertex , - E_GLU_EXT_nurbs_tessellator , - E_GL_SGIX_ycrcb , - E_GL_EXT_fragment_lighting , - E_GL_IBM_rasterpos_clip , - E_GL_HP_texture_lighting , - E_GL_EXT_draw_range_elements , - E_GL_WIN_phong_shading , - E_GL_WIN_specular_fog , - E_GLX_SGIS_color_range , - E_GL_SGIS_color_range , - E_GL_EXT_light_texture , - E_GL_SGIX_blend_alpha_minmax , - E_GL_EXT_scene_marker , - E_GLX_EXT_scene_marker , - E_GL_SGIX_pixel_texture_bits , - E_GL_EXT_bgra , - E_GL_SGIX_async , - E_GL_SGIX_async_pixel , - E_GL_SGIX_async_histogram , - E_GL_INTEL_texture_scissor , - E_GL_INTEL_parallel_arrays , - E_GL_HP_occlusion_test , - E_GL_EXT_pixel_transform , - E_GL_EXT_pixel_transform_color_table , - E_GL_EXT_shared_texture_palette , - E_GLX_SGIS_blended_overlay , - E_GL_EXT_separate_specular_color , - E_GL_EXT_secondary_color , - E_GL_EXT_texture_env , - E_GL_EXT_texture_perturb_normal , - E_GL_EXT_multi_draw_arrays , - E_GL_SUN_multi_draw_arrays , - E_GL_EXT_fog_coord , - E_GL_REND_screen_coordinates , - E_GL_EXT_coordinate_frame , - E_GL_EXT_texture_env_combine , - E_GL_APPLE_specular_vector , - E_GL_APPLE_transform_hint , - E_GL_SUNX_constant_data , - E_GL_SUN_global_alpha , - E_GL_SUN_triangle_list , - E_GL_SUN_vertex , - E_WGL_EXT_display_color_table , - E_WGL_EXT_extensions_string , - E_WGL_EXT_make_current_read , - E_WGL_EXT_pixel_format , - E_WGL_EXT_pbuffer , - E_WGL_EXT_swap_control , - E_GL_EXT_blend_func_separate , - E_GL_INGR_color_clamp , - E_GL_INGR_interlace_read , - E_GL_EXT_stencil_wrap , - E_WGL_EXT_depth_float , - E_GL_EXT_422_pixels , - E_GL_NV_texgen_reflection , - E_GL_SGIX_texture_range , - E_GL_SUN_convolution_border_modes , - E_GLX_SUN_get_transparent_index , - E_GLX_SGIX_video_resize_float , - E_GL_EXT_texture_env_add , - E_GL_EXT_texture_lod_bias , - E_GL_EXT_texture_filter_anisotropic , - E_GL_EXT_vertex_weighting , - E_GL_NV_light_max_exponent , - E_GL_NV_vertex_array_range , - E_GL_NV_register_combiners , - E_GL_NV_fog_distance , - E_GL_NV_texgen_emboss , - E_GL_NV_blend_square , - E_GL_NV_texture_env_combine4 , - E_GL_MESA_resize_buffers , - E_GL_MESA_window_pos , - E_GL_EXT_texture_compression_s3tc , - E_GL_IBM_cull_vertex , - E_GL_IBM_multimode_draw_arrays , - E_GL_IBM_vertex_array_lists , - E_GL_3DFX_texture_compression_FXT1 , - E_GL_3DFX_multisample , - E_GL_3DFX_tbuffer , - E_WGL_EXT_multisample , - E_GL_EXT_multisample , - E_GL_SGIX_vertex_preclip , - E_GL_SGIX_vertex_preclip_hint , - E_GL_SGIX_convolution_accuracy , - E_GL_SGIX_resample , - E_GL_SGIS_point_line_texgen , - E_GL_SGIS_texture_color_mask , - E_GLX_MESA_copy_sub_buffer , - E_GLX_MESA_pixmap_colormap , - E_GLX_MESA_release_buffers , - E_GLX_MESA_set_3dfx_mode , - E_GL_EXT_texture_env_dot3 , - E_GL_ATI_texture_mirror_once , - E_GL_NV_fence , - E_GL_IBM_static_data , - E_GL_IBM_texture_mirrored_repeat , - E_GL_NV_evaluators , - E_GL_NV_packed_depth_stencil , - E_GL_NV_register_combiners2 , - E_GL_NV_texture_compression_vtc , - E_GL_NV_texture_rectangle , - E_GL_NV_texture_shader , - E_GL_NV_texture_shader2 , - E_GL_NV_vertex_array_range2 , - E_GL_NV_vertex_program , - E_GLX_SGIX_visual_select_group , - E_GL_SGIX_texture_coordinate_clamp , - E_GLX_OML_swap_method , - E_GLX_OML_sync_control , - E_GL_OML_interlace , - E_GL_OML_subsample , - E_GL_OML_resample , - E_WGL_OML_sync_control , - E_GL_NV_copy_depth_to_color , - E_GL_ATI_envmap_bumpmap , - E_GL_ATI_fragment_shader , - E_GL_ATI_pn_triangles , - E_GL_ATI_vertex_array_object , - E_GL_EXT_vertex_shader , - E_GL_ATI_vertex_streams , - E_WGL_I3D_digital_video_control , - E_WGL_I3D_gamma , - E_WGL_I3D_genlock , - E_WGL_I3D_image_buffer , - E_WGL_I3D_swap_frame_lock , - E_WGL_I3D_swap_frame_usage , - E_GL_ATI_element_array , - E_GL_SUN_mesh_array , - E_GL_SUN_slice_accum , - E_GL_NV_multisample_filter_hint , - E_GL_NV_depth_clamp , - E_GL_NV_occlusion_query , - E_GL_NV_point_sprite , - E_WGL_NV_render_depth_texture , - E_WGL_NV_render_texture_rectangle , - E_GL_NV_texture_shader3 , - E_GL_NV_vertex_program1_1 , - E_GL_EXT_shadow_funcs , - E_GL_EXT_stencil_two_side , - E_GL_ATI_text_fragment_shader , - E_GL_APPLE_client_storage , - E_GL_APPLE_element_array , - E_GL_APPLE_fence , - E_GL_APPLE_vertex_array_object , - E_GL_APPLE_vertex_array_range , - E_GL_APPLE_ycbcr_422 , - E_GL_S3_s3tc , - E_GL_ATI_draw_buffers , - E_WGL_ATI_pixel_format_float , - E_GL_ATI_texture_env_combine3 , - E_GL_ATI_texture_float , - E_GL_NV_float_buffer , - E_WGL_NV_float_buffer , - E_GL_NV_fragment_program , - E_GL_NV_half_float , - E_GL_NV_pixel_data_range , - E_GL_NV_primitive_restart , - E_GL_NV_texture_expand_normal , - E_GL_NV_vertex_program2 , - E_GL_ATI_map_object_buffer , - E_GL_ATI_separate_stencil , - E_GL_ATI_vertex_attrib_array_object , - E_GL_OES_byte_coordinates , - E_GL_OES_fixed_point , - E_GL_OES_single_precision , - E_GL_OES_compressed_paletted_texture , - E_GL_OES_read_format , - E_GL_OES_query_matrix , - E_GL_EXT_depth_bounds_test , - E_GL_EXT_texture_mirror_clamp , - E_GL_EXT_blend_equation_separate , - E_GL_MESA_pack_invert , - E_GL_MESA_ycbcr_texture , - E_GL_EXT_pixel_buffer_object , - E_GL_NV_fragment_program_option , - E_GL_NV_fragment_program2 , - E_GL_NV_vertex_program2_option , - E_GL_NV_vertex_program3 , - E_GLX_SGIX_hyperpipe , - E_GLX_MESA_agp_offset , - E_GL_EXT_texture_compression_dxt1 , - E_GL_EXT_framebuffer_object , - E_GL_GREMEDY_string_marker , - E_GL_EXT_packed_depth_stencil , - E_WGL_3DL_stereo_control , - E_GL_EXT_stencil_clear_tag , - E_GL_EXT_texture_sRGB , - E_GL_EXT_framebuffer_blit , - E_GL_EXT_framebuffer_multisample , - E_GL_MESAX_texture_stack , - E_GL_EXT_timer_query , - E_GL_EXT_gpu_program_parameters , - E_GL_APPLE_flush_buffer_range , - E_GL_NV_gpu_program4 , - E_GL_NV_geometry_program4 , - E_GL_EXT_geometry_shader4 , - E_GL_NV_vertex_program4 , - E_GL_EXT_gpu_shader4 , - E_GL_EXT_draw_instanced , - E_GL_EXT_packed_float , - E_GLX_EXT_fbconfig_packed_float , - E_WGL_EXT_pixel_format_packed_float , - E_GL_EXT_texture_array , - E_GL_EXT_texture_buffer_object , - E_GL_EXT_texture_compression_latc , - E_GL_EXT_texture_compression_rgtc , - E_GL_EXT_texture_shared_exponent , - E_GL_NV_depth_buffer_float , - E_GL_NV_fragment_program4 , - E_GL_NV_framebuffer_multisample_coverage , - E_GL_EXT_framebuffer_sRGB , - E_GLX_EXT_framebuffer_sRGB , - E_WGL_EXT_framebuffer_sRGB , - E_GL_NV_geometry_shader4 , - E_GL_NV_parameter_buffer_object , - E_GL_EXT_draw_buffers2 , - E_GL_NV_transform_feedback , - E_GL_EXT_bindable_uniform , - E_GL_EXT_texture_integer , - E_GLX_EXT_texture_from_pixmap , - E_GL_GREMEDY_frame_terminator , - E_GL_NV_conditional_render , - E_GL_NV_present_video , - E_GLX_NV_present_video , - E_WGL_NV_present_video , - E_GLX_NV_video_out , - E_WGL_NV_video_output , - E_GLX_NV_swap_group , - E_WGL_NV_swap_group , - E_GL_EXT_transform_feedback , - E_GL_EXT_direct_state_access , - E_GL_EXT_vertex_array_bgra , - E_WGL_NV_gpu_affinity , - E_GL_EXT_texture_swizzle , - E_GL_NV_explicit_multisample , - E_GL_NV_transform_feedback2 , - E_GL_ATI_meminfo , - E_GL_AMD_performance_monitor , - E_WGL_AMD_gpu_association , - E_GL_AMD_texture_texture4 , - E_GL_AMD_vertex_shader_tessellator , - E_GL_EXT_provoking_vertex , - E_GL_EXT_texture_snorm , - E_GL_AMD_draw_buffers_blend , - E_GL_APPLE_texture_range , - E_GL_APPLE_float_pixels , - E_GL_APPLE_vertex_program_evaluators , - E_GL_APPLE_aux_depth_stencil , - E_GL_APPLE_object_purgeable , - E_GL_APPLE_row_bytes , - E_GL_APPLE_rgb_422 , - E_GL_NV_video_capture , - E_GLX_NV_video_capture , - E_WGL_NV_video_capture , - E_GL_EXT_swap_control , - E_GL_NV_copy_image , - E_GLX_NV_copy_image , - E_WGL_NV_copy_image , - E_GL_EXT_separate_shader_objects , - E_GL_NV_parameter_buffer_object2 , - E_GL_NV_shader_buffer_load , - E_GL_NV_vertex_buffer_unified_memory , - E_GL_NV_texture_barrier , - E_GL_AMD_shader_stencil_export , - E_GL_AMD_seamless_cubemap_per_texture , - E_GLX_INTEL_swap_event , - E_GL_AMD_conservative_depth , - E_GL_EXT_shader_image_load_store , - E_GL_EXT_vertex_attrib_64bit , - E_GL_NV_gpu_program5 , - E_GL_NV_gpu_shader5 , - E_GL_NV_shader_buffer_store , - E_GL_NV_tessellation_program5 , - E_GL_NV_vertex_attrib_integer_64bit , - E_GL_NV_multisample_coverage , - E_GL_AMD_name_gen_delete , - E_GL_AMD_debug_output , - E_GL_NV_vdpau_interop , - E_GL_AMD_transform_feedback3_lines_triangles , - E_GLX_AMD_gpu_association , - E_GLX_EXT_create_context_es2_profile , - E_GLX_EXT_create_context_es_profile , - E_WGL_EXT_create_context_es2_profile , - E_WGL_EXT_create_context_es_profile , - E_GL_AMD_depth_clamp_separate , - E_GL_EXT_texture_sRGB_decode , - E_GL_NV_texture_multisample , - E_GL_AMD_blend_minmax_factor , - E_GL_AMD_sample_positions , - E_GL_EXT_x11_sync_object , - E_WGL_NV_DX_interop , - E_GL_AMD_multi_draw_indirect , - E_GL_EXT_framebuffer_multisample_blit_scaled , - E_GL_NV_path_rendering , - E_GL_AMD_pinned_memory , - E_WGL_NV_DX_interop2 , - E_GL_AMD_stencil_operation_extended , - E_GLX_EXT_swap_control_tear , - E_WGL_EXT_swap_control_tear , - E_GL_AMD_vertex_shader_viewport_index , - E_GL_AMD_vertex_shader_layer , - E_GL_NV_bindless_texture , - E_GL_NV_shader_atomic_float , - E_GL_AMD_query_buffer_object , - E_GL_NV_compute_program5 , - E_GL_NV_shader_storage_buffer_object , - E_GL_NV_shader_atomic_counters , - E_GL_NV_deep_texture3D , - E_GL_NVX_conditional_render , - E_GL_AMD_sparse_texture , - E_GLX_EXT_buffer_age , - E_GL_AMD_shader_trinary_minmax , - E_GL_INTEL_map_texture , - E_GL_NV_draw_texture , - E_GL_AMD_interleaved_elements , - E_GL_NV_bindless_multi_draw_indirect , - E_GL_NV_blend_equation_advanced , - E_GL_NV_blend_equation_advanced_coherent , - E_GL_NV_gpu_program5_mem_extended , - E_GL_AMD_shader_atomic_counter_ops , - E_WGL_NV_delay_before_swap , - E_GL_EXT_shader_integer_mix , - E_GL_NVX_gpu_memory_info , - E_GL_EXT_debug_label , - E_GL_EXT_debug_marker , - E_GL_INTEL_fragment_shader_ordering , - E_GL_AMD_occlusion_query_event , - E_GL_INTEL_performance_query , - E_GL_AMD_shader_stencil_value_export , - E_GLX_NV_delay_before_swap , - E_GLX_MESA_query_renderer , - E_GL_NV_shader_thread_group , - E_GL_NV_shader_thread_shuffle , - E_GL_EXT_shader_image_load_formatted , - E_GL_AMD_transform_feedback4 , - E_GL_AMD_gpu_shader_int64 , - E_GLX_EXT_stereo_tree , - E_GL_AMD_gcn_shader , - E_GL_AMD_framebuffer_sample_positions , - E_GL_NV_shader_atomic_int64 , - E_GL_NV_bindless_multi_draw_indirect_count , - E_GLX_NV_copy_buffer , - E_GL_NV_uniform_buffer_unified_memory , - E_GL_EXT_polygon_offset_clamp , - E_GL_EXT_post_depth_coverage , - E_GL_EXT_raster_multisample , - E_GL_EXT_sparse_texture2 , - E_GL_EXT_texture_filter_minmax , - E_GL_NV_conservative_raster , - E_GL_NV_fill_rectangle , - E_GL_NV_fragment_coverage_to_color , - E_GL_NV_fragment_shader_interlock , - E_GL_NV_framebuffer_mixed_samples , - E_GL_NV_geometry_shader_passthrough , - E_GL_NV_path_rendering_shared_edge , - E_GL_NV_sample_locations , - E_GL_NV_sample_mask_override_coverage , - E_GL_NV_shader_atomic_fp16_vector , - E_GL_NV_internalformat_sample_query , - E_GL_NV_viewport_array2 , - E_GL_NV_command_list , - E_GL_OVR_multiview , - E_GL_OVR_multiview2 , - E_GL_NV_conservative_raster_dilate , - E_GL_INTEL_framebuffer_CMAA , - E_GLX_EXT_libglvnd , - E_GL_NV_viewport_swizzle , - E_GL_NV_robustness_video_memory_purge , - E_GL_AMD_shader_explicit_vertex_parameter , - E_GL_NV_clip_space_w_scaling , - E_GL_NV_conservative_raster_pre_snap_triangles , - E_GL_NV_shader_atomic_float64 , - E_GL_NV_stereo_view_rendering , - E_GL_EXT_window_rectangles , - E_GL_INTEL_conservative_rasterization , - E_GL_NVX_blend_equation_advanced_multi_draw_buffers , - E_GL_NVX_linked_gpu_multicast , - E_GL_NV_gpu_multicast , - E_GL_MESA_shader_integer_functions , - E_GL_AMD_gpu_shader_half_float , - E_GL_AMD_shader_ballot , - E_WGL_EXT_colorspace , - E_GL_SGIX_pixel_texture , - E_GL_NV_alpha_to_coverage_dither_control , - E_GL_NV_draw_vulkan_image , - E_GL_AMD_texture_gather_bias_lod , - E_GL_EXT_memory_object , - E_GL_EXT_semaphore , - E_GL_EXT_memory_object_fd , - E_GL_EXT_semaphore_fd , - E_GL_EXT_memory_object_win32 , - E_GL_EXT_semaphore_win32 , - E_GL_EXT_win32_keyed_mutex , - E_GL_AMD_gpu_shader_int16 , - E_GL_EXT_external_buffer , - E_GL_NV_texture_rectangle_compressed , - E_GL_NV_blend_minmax_factor , - E_GL_NV_query_resource , - E_GL_NV_query_resource_tag , - E_GL_AMD_shader_image_load_store_lod , - E_GLX_MESA_swap_control , - E_GL_MESA_tile_raster_order , - E_GL_MESA_program_binary_formats , - E_GL_NV_conservative_raster_pre_snap , - E_GL_NV_conservative_raster_underestimation , - E_GL_AMD_gpu_shader_half_float_fetch , - E_GL_EXT_shader_framebuffer_fetch , - E_GL_EXT_shader_framebuffer_fetch_non_coherent , - E_GL_INTEL_blackhole_render , - E_GL_EXT_EGL_image_storage , - E_GL_AMD_framebuffer_multisample_advanced , - E_GL_NV_memory_attachment , - E_GL_NV_compute_shader_derivatives , - E_GL_NV_fragment_shader_barycentric , - E_GL_NV_mesh_shader , - E_GL_NV_representative_fragment_test , - E_GL_NV_scissor_exclusive , - E_GL_NV_shader_texture_footprint , - E_GL_NV_shading_rate_image , - E_WGL_ATI_render_texture_rectangle , - E_GL_NV_vdpau_interop2 , - E_GL_EXT_texture_sRGB_R8 , - E_GLX_EXT_context_priority , - E_GL_EXT_multiview_timer_query , - E_GL_EXT_multiview_texture_multisample , - E_GL_EXT_multiview_tessellation_geometry_shader , - E_GL_EXT_texture_shadow_lod , - E_GL_MESA_framebuffer_flip_y , - E_GL_NVX_progress_fence , - E_WGL_NV_multigpu_context , - E_GL_NVX_gpu_multicast2 , - E_GL_NV_shader_subgroup_partitioned , - E_GLX_NV_multigpu_context , - E_GL_EXT_EGL_sync , - E_GL_INTEL_shader_integer_functions2 , - E_GL_MESA_framebuffer_flip_x , - E_GL_MESA_framebuffer_swap_xy , - E_GL_NV_memory_object_sparse , - E_GL_NV_timeline_semaphore , - E_GLX_EXT_get_drawable_type , - E_GLX_EXT_no_config_context , - E_GL_NV_primitive_shading_rate , - E_GL_EXT_texture_sRGB_RG8 , - E_GL_EXT_texture_storage , - E_GL_EXT_framebuffer_blit_layers , - E_GL_NV_uniform_buffer_std430_layout , - E_GL_MESA_texture_const_bandwidth - }; -} + enum GLExtension { + V_OpenGL10, + V_OpenGL11, + V_OpenGL12, + V_OpenGL13, + V_OpenGL14, + V_OpenGL15, + V_OpenGL20, + V_OpenGL21, + V_OpenGL30, + V_OpenGL31, + V_OpenGL32, + V_OpenGL33, + V_OpenGL40, + V_OpenGL41, + V_OpenGL42, + V_OpenGL43, + V_OpenGL44, + V_OpenGL45, + V_OpenGL46, + E_GL_EXT_shader_samples_identical, + E_GL_ARB_multitexture, + E_GLX_ARB_get_proc_address, + E_GL_ARB_transpose_matrix, + E_WGL_ARB_buffer_region, + E_GL_ARB_multisample, + E_GLX_ARB_multisample, + E_WGL_ARB_multisample, + E_GL_ARB_texture_env_add, + E_GL_ARB_texture_cube_map, + E_WGL_ARB_extensions_string, + E_WGL_ARB_pixel_format, + E_WGL_ARB_make_current_read, + E_WGL_ARB_pbuffer, + E_GL_ARB_texture_compression, + E_GL_ARB_texture_border_clamp, + E_GL_ARB_point_parameters, + E_GL_ARB_vertex_blend, + E_GL_ARB_matrix_palette, + E_GL_ARB_texture_env_combine, + E_GL_ARB_texture_env_crossbar, + E_GL_ARB_texture_env_dot3, + E_WGL_ARB_render_texture, + E_GL_ARB_texture_mirrored_repeat, + E_GL_ARB_depth_texture, + E_GL_ARB_shadow, + E_GL_ARB_shadow_ambient, + E_GL_ARB_window_pos, + E_GL_ARB_vertex_program, + E_GL_ARB_fragment_program, + E_GL_ARB_vertex_buffer_object, + E_GLX_ARB_vertex_buffer_object, + E_GL_ARB_occlusion_query, + E_GL_ARB_shader_objects, + E_GL_ARB_vertex_shader, + E_GL_ARB_fragment_shader, + E_GL_ARB_shading_language_100, + E_GL_ARB_texture_non_power_of_two, + E_GL_ARB_point_sprite, + E_GL_ARB_fragment_program_shadow, + E_GL_ARB_draw_buffers, + E_GL_ARB_texture_rectangle, + E_GL_ARB_color_buffer_float, + E_GLX_ARB_fbconfig_float, + E_WGL_ARB_pixel_format_float, + E_GL_ARB_half_float_pixel, + E_GL_ARB_texture_float, + E_GL_ARB_pixel_buffer_object, + E_GL_ARB_depth_buffer_float, + E_GL_ARB_draw_instanced, + E_GL_ARB_framebuffer_object, + E_GL_ARB_framebuffer_sRGB, + E_GLX_ARB_framebuffer_sRGB, + E_WGL_ARB_framebuffer_sRGB, + E_GL_ARB_geometry_shader4, + E_GL_ARB_half_float_vertex, + E_GL_ARB_instanced_arrays, + E_GL_ARB_map_buffer_range, + E_GL_ARB_texture_buffer_object, + E_GL_ARB_texture_compression_rgtc, + E_GL_ARB_texture_rg, + E_GL_ARB_vertex_array_object, + E_WGL_ARB_create_context, + E_GLX_ARB_create_context, + E_GL_ARB_uniform_buffer_object, + E_GL_ARB_compatibility, + E_GL_ARB_copy_buffer, + E_GL_ARB_shader_texture_lod, + E_GL_ARB_depth_clamp, + E_GL_ARB_draw_elements_base_vertex, + E_GL_ARB_fragment_coord_conventions, + E_GL_ARB_provoking_vertex, + E_GL_ARB_seamless_cube_map, + E_GL_ARB_sync, + E_GL_ARB_texture_multisample, + E_GL_ARB_vertex_array_bgra, + E_GL_ARB_draw_buffers_blend, + E_GL_ARB_sample_shading, + E_GL_ARB_texture_cube_map_array, + E_GL_ARB_texture_gather, + E_GL_ARB_texture_query_lod, + E_WGL_ARB_create_context_profile, + E_GLX_ARB_create_context_profile, + E_GL_ARB_shading_language_include, + E_GL_ARB_texture_compression_bptc, + E_GL_ARB_blend_func_extended, + E_GL_ARB_explicit_attrib_location, + E_GL_ARB_occlusion_query2, + E_GL_ARB_sampler_objects, + E_GL_ARB_shader_bit_encoding, + E_GL_ARB_texture_rgb10_a2ui, + E_GL_ARB_texture_swizzle, + E_GL_ARB_timer_query, + E_GL_ARB_vertex_type_2_10_10_10_rev, + E_GL_ARB_draw_indirect, + E_GL_ARB_gpu_shader5, + E_GL_ARB_gpu_shader_fp64, + E_GL_ARB_shader_subroutine, + E_GL_ARB_tessellation_shader, + E_GL_ARB_texture_buffer_object_rgb32, + E_GL_ARB_transform_feedback2, + E_GL_ARB_transform_feedback3, + E_GL_ARB_ES2_compatibility, + E_GL_ARB_get_program_binary, + E_GL_ARB_separate_shader_objects, + E_GL_ARB_shader_precision, + E_GL_ARB_vertex_attrib_64bit, + E_GL_ARB_viewport_array, + E_GLX_ARB_create_context_robustness, + E_WGL_ARB_create_context_robustness, + E_GL_ARB_cl_event, + E_GL_ARB_debug_output, + E_GL_ARB_robustness, + E_GL_ARB_shader_stencil_export, + E_GL_ARB_base_instance, + E_GL_ARB_shading_language_420pack, + E_GL_ARB_transform_feedback_instanced, + E_GL_ARB_compressed_texture_pixel_storage, + E_GL_ARB_conservative_depth, + E_GL_ARB_internalformat_query, + E_GL_ARB_map_buffer_alignment, + E_GL_ARB_shader_atomic_counters, + E_GL_ARB_shader_image_load_store, + E_GL_ARB_shading_language_packing, + E_GL_ARB_texture_storage, + E_GL_KHR_texture_compression_astc_hdr, + E_GL_KHR_texture_compression_astc_ldr, + E_GL_KHR_debug, + E_GL_ARB_arrays_of_arrays, + E_GL_ARB_clear_buffer_object, + E_GL_ARB_compute_shader, + E_GL_ARB_copy_image, + E_GL_ARB_texture_view, + E_GL_ARB_vertex_attrib_binding, + E_GL_ARB_robustness_isolation, + E_GL_ARB_robustness_share_group_isolation, + E_GL_ARB_ES3_compatibility, + E_GL_ARB_explicit_uniform_location, + E_GL_ARB_fragment_layer_viewport, + E_GL_ARB_framebuffer_no_attachments, + E_GL_ARB_internalformat_query2, + E_GL_ARB_invalidate_subdata, + E_GL_ARB_multi_draw_indirect, + E_GL_ARB_program_interface_query, + E_GL_ARB_robust_buffer_access_behavior, + E_GL_ARB_shader_image_size, + E_GL_ARB_shader_storage_buffer_object, + E_GL_ARB_stencil_texturing, + E_GL_ARB_texture_buffer_range, + E_GL_ARB_texture_query_levels, + E_GL_ARB_texture_storage_multisample, + E_GLX_ARB_robustness_application_isolation, + E_GLX_ARB_robustness_share_group_isolation, + E_WGL_ARB_robustness_application_isolation, + E_WGL_ARB_robustness_share_group_isolation, + E_GL_ARB_buffer_storage, + E_GL_ARB_clear_texture, + E_GL_ARB_enhanced_layouts, + E_GL_ARB_multi_bind, + E_GL_ARB_query_buffer_object, + E_GL_ARB_texture_mirror_clamp_to_edge, + E_GL_ARB_texture_stencil8, + E_GL_ARB_vertex_type_10f_11f_11f_rev, + E_GL_ARB_bindless_texture, + E_GL_ARB_compute_variable_group_size, + E_GL_ARB_indirect_parameters, + E_GL_ARB_seamless_cubemap_per_texture, + E_GL_ARB_shader_draw_parameters, + E_GL_ARB_shader_group_vote, + E_GL_ARB_sparse_texture, + E_GL_ARB_ES3_1_compatibility, + E_GL_ARB_clip_control, + E_GL_ARB_conditional_render_inverted, + E_GL_ARB_cull_distance, + E_GL_ARB_derivative_control, + E_GL_ARB_direct_state_access, + E_GL_ARB_get_texture_sub_image, + E_GL_ARB_shader_texture_image_samples, + E_GL_ARB_texture_barrier, + E_GL_KHR_context_flush_control, + E_GLX_ARB_context_flush_control, + E_WGL_ARB_context_flush_control, + E_GL_KHR_robust_buffer_access_behavior, + E_GL_KHR_robustness, + E_GL_ARB_pipeline_statistics_query, + E_GL_ARB_sparse_buffer, + E_GL_ARB_transform_feedback_overflow_query, + E_GL_KHR_blend_equation_advanced, + E_GL_KHR_blend_equation_advanced_coherent, + E_GL_KHR_no_error, + E_GL_ARB_ES3_2_compatibility, + E_GL_ARB_fragment_shader_interlock, + E_GL_ARB_gpu_shader_int64, + E_GL_ARB_parallel_shader_compile, + E_GL_ARB_post_depth_coverage, + E_GL_ARB_sample_locations, + E_GL_ARB_shader_atomic_counter_ops, + E_GL_ARB_shader_ballot, + E_GL_ARB_shader_clock, + E_GL_ARB_shader_viewport_layer_array, + E_GL_ARB_sparse_texture2, + E_GL_ARB_sparse_texture_clamp, + E_GL_ARB_texture_filter_minmax, + E_GL_KHR_texture_compression_astc_sliced_3d, + E_GL_ARB_gl_spirv, + E_GLX_ARB_create_context_no_error, + E_WGL_ARB_create_context_no_error, + E_GL_KHR_parallel_shader_compile, + E_GL_ARB_polygon_offset_clamp, + E_GL_ARB_spirv_extensions, + E_GL_ARB_texture_filter_anisotropic, + E_GL_KHR_shader_subgroup, + E_GL_EXT_abgr, + E_GL_EXT_blend_color, + E_GL_EXT_polygon_offset, + E_GL_EXT_texture, + E_GL_EXT_texture3D, + E_GL_SGIS_texture_filter4, + E_GL_EXT_subtexture, + E_GL_EXT_copy_texture, + E_GL_EXT_histogram, + E_GL_EXT_convolution, + E_GL_SGI_color_matrix, + E_GL_SGI_color_table, + E_GL_SGIS_pixel_texture, + E_GL_SGIS_texture4D, + E_GL_SGI_texture_color_table, + E_GL_EXT_cmyka, + E_GL_EXT_texture_object, + E_GL_SGIS_detail_texture, + E_GL_SGIS_sharpen_texture, + E_GL_EXT_packed_pixels, + E_GL_SGIS_texture_lod, + E_GL_SGIS_multisample, + E_GLX_SGIS_multisample, + E_GL_EXT_rescale_normal, + E_GLX_EXT_visual_info, + E_GL_EXT_vertex_array, + E_GL_EXT_misc_attribute, + E_GL_SGIS_generate_mipmap, + E_GL_SGIX_clipmap, + E_GL_SGIX_shadow, + E_GL_SGIS_texture_edge_clamp, + E_GL_SGIS_texture_border_clamp, + E_GL_EXT_blend_minmax, + E_GL_EXT_blend_subtract, + E_GL_EXT_blend_logic_op, + E_GLX_SGI_swap_control, + E_GLX_SGI_video_sync, + E_GLX_SGI_make_current_read, + E_GLX_SGIX_video_source, + E_GLX_EXT_visual_rating, + E_GL_SGIX_interlace, + E_GLX_EXT_import_context, + E_GLX_SGIX_fbconfig, + E_GLX_SGIX_pbuffer, + E_GL_SGIS_texture_select, + E_GL_SGIX_sprite, + E_GL_SGIX_texture_multi_buffer, + E_GL_EXT_point_parameters, + E_GL_SGIX_instruments, + E_GL_SGIX_texture_scale_bias, + E_GL_SGIX_framezoom, + E_GL_SGIX_tag_sample_buffer, + E_GL_SGIX_reference_plane, + E_GL_SGIX_flush_raster, + E_GLX_SGI_cushion, + E_GL_SGIX_depth_texture, + E_GL_SGIS_fog_function, + E_GL_SGIX_fog_offset, + E_GL_HP_image_transform, + E_GL_HP_convolution_border_modes, + E_GL_SGIX_texture_add_env, + E_GL_EXT_color_subtable, + E_GLU_EXT_object_space_tess, + E_GL_PGI_vertex_hints, + E_GL_PGI_misc_hints, + E_GL_EXT_paletted_texture, + E_GL_EXT_clip_volume_hint, + E_GL_SGIX_list_priority, + E_GL_SGIX_ir_instrument1, + E_GLX_SGIX_video_resize, + E_GL_SGIX_texture_lod_bias, + E_GLU_SGI_filter4_parameters, + E_GLX_SGIX_dm_buffer, + E_GL_SGIX_shadow_ambient, + E_GLX_SGIX_swap_group, + E_GLX_SGIX_swap_barrier, + E_GL_EXT_index_texture, + E_GL_EXT_index_material, + E_GL_EXT_index_func, + E_GL_EXT_index_array_formats, + E_GL_EXT_compiled_vertex_array, + E_GL_EXT_cull_vertex, + E_GLU_EXT_nurbs_tessellator, + E_GL_SGIX_ycrcb, + E_GL_EXT_fragment_lighting, + E_GL_IBM_rasterpos_clip, + E_GL_HP_texture_lighting, + E_GL_EXT_draw_range_elements, + E_GL_WIN_phong_shading, + E_GL_WIN_specular_fog, + E_GLX_SGIS_color_range, + E_GL_SGIS_color_range, + E_GL_EXT_light_texture, + E_GL_SGIX_blend_alpha_minmax, + E_GL_EXT_scene_marker, + E_GLX_EXT_scene_marker, + E_GL_SGIX_pixel_texture_bits, + E_GL_EXT_bgra, + E_GL_SGIX_async, + E_GL_SGIX_async_pixel, + E_GL_SGIX_async_histogram, + E_GL_INTEL_texture_scissor, + E_GL_INTEL_parallel_arrays, + E_GL_HP_occlusion_test, + E_GL_EXT_pixel_transform, + E_GL_EXT_pixel_transform_color_table, + E_GL_EXT_shared_texture_palette, + E_GLX_SGIS_blended_overlay, + E_GL_EXT_separate_specular_color, + E_GL_EXT_secondary_color, + E_GL_EXT_texture_env, + E_GL_EXT_texture_perturb_normal, + E_GL_EXT_multi_draw_arrays, + E_GL_SUN_multi_draw_arrays, + E_GL_EXT_fog_coord, + E_GL_REND_screen_coordinates, + E_GL_EXT_coordinate_frame, + E_GL_EXT_texture_env_combine, + E_GL_APPLE_specular_vector, + E_GL_APPLE_transform_hint, + E_GL_SUNX_constant_data, + E_GL_SUN_global_alpha, + E_GL_SUN_triangle_list, + E_GL_SUN_vertex, + E_WGL_EXT_display_color_table, + E_WGL_EXT_extensions_string, + E_WGL_EXT_make_current_read, + E_WGL_EXT_pixel_format, + E_WGL_EXT_pbuffer, + E_WGL_EXT_swap_control, + E_GL_EXT_blend_func_separate, + E_GL_INGR_color_clamp, + E_GL_INGR_interlace_read, + E_GL_EXT_stencil_wrap, + E_WGL_EXT_depth_float, + E_GL_EXT_422_pixels, + E_GL_NV_texgen_reflection, + E_GL_SGIX_texture_range, + E_GL_SUN_convolution_border_modes, + E_GLX_SUN_get_transparent_index, + E_GLX_SGIX_video_resize_float, + E_GL_EXT_texture_env_add, + E_GL_EXT_texture_lod_bias, + E_GL_EXT_texture_filter_anisotropic, + E_GL_EXT_vertex_weighting, + E_GL_NV_light_max_exponent, + E_GL_NV_vertex_array_range, + E_GL_NV_register_combiners, + E_GL_NV_fog_distance, + E_GL_NV_texgen_emboss, + E_GL_NV_blend_square, + E_GL_NV_texture_env_combine4, + E_GL_MESA_resize_buffers, + E_GL_MESA_window_pos, + E_GL_EXT_texture_compression_s3tc, + E_GL_IBM_cull_vertex, + E_GL_IBM_multimode_draw_arrays, + E_GL_IBM_vertex_array_lists, + E_GL_3DFX_texture_compression_FXT1, + E_GL_3DFX_multisample, + E_GL_3DFX_tbuffer, + E_WGL_EXT_multisample, + E_GL_EXT_multisample, + E_GL_SGIX_vertex_preclip, + E_GL_SGIX_vertex_preclip_hint, + E_GL_SGIX_convolution_accuracy, + E_GL_SGIX_resample, + E_GL_SGIS_point_line_texgen, + E_GL_SGIS_texture_color_mask, + E_GLX_MESA_copy_sub_buffer, + E_GLX_MESA_pixmap_colormap, + E_GLX_MESA_release_buffers, + E_GLX_MESA_set_3dfx_mode, + E_GL_EXT_texture_env_dot3, + E_GL_ATI_texture_mirror_once, + E_GL_NV_fence, + E_GL_IBM_static_data, + E_GL_IBM_texture_mirrored_repeat, + E_GL_NV_evaluators, + E_GL_NV_packed_depth_stencil, + E_GL_NV_register_combiners2, + E_GL_NV_texture_compression_vtc, + E_GL_NV_texture_rectangle, + E_GL_NV_texture_shader, + E_GL_NV_texture_shader2, + E_GL_NV_vertex_array_range2, + E_GL_NV_vertex_program, + E_GLX_SGIX_visual_select_group, + E_GL_SGIX_texture_coordinate_clamp, + E_GLX_OML_swap_method, + E_GLX_OML_sync_control, + E_GL_OML_interlace, + E_GL_OML_subsample, + E_GL_OML_resample, + E_WGL_OML_sync_control, + E_GL_NV_copy_depth_to_color, + E_GL_ATI_envmap_bumpmap, + E_GL_ATI_fragment_shader, + E_GL_ATI_pn_triangles, + E_GL_ATI_vertex_array_object, + E_GL_EXT_vertex_shader, + E_GL_ATI_vertex_streams, + E_WGL_I3D_digital_video_control, + E_WGL_I3D_gamma, + E_WGL_I3D_genlock, + E_WGL_I3D_image_buffer, + E_WGL_I3D_swap_frame_lock, + E_WGL_I3D_swap_frame_usage, + E_GL_ATI_element_array, + E_GL_SUN_mesh_array, + E_GL_SUN_slice_accum, + E_GL_NV_multisample_filter_hint, + E_GL_NV_depth_clamp, + E_GL_NV_occlusion_query, + E_GL_NV_point_sprite, + E_WGL_NV_render_depth_texture, + E_WGL_NV_render_texture_rectangle, + E_GL_NV_texture_shader3, + E_GL_NV_vertex_program1_1, + E_GL_EXT_shadow_funcs, + E_GL_EXT_stencil_two_side, + E_GL_ATI_text_fragment_shader, + E_GL_APPLE_client_storage, + E_GL_APPLE_element_array, + E_GL_APPLE_fence, + E_GL_APPLE_vertex_array_object, + E_GL_APPLE_vertex_array_range, + E_GL_APPLE_ycbcr_422, + E_GL_S3_s3tc, + E_GL_ATI_draw_buffers, + E_WGL_ATI_pixel_format_float, + E_GL_ATI_texture_env_combine3, + E_GL_ATI_texture_float, + E_GL_NV_float_buffer, + E_WGL_NV_float_buffer, + E_GL_NV_fragment_program, + E_GL_NV_half_float, + E_GL_NV_pixel_data_range, + E_GL_NV_primitive_restart, + E_GL_NV_texture_expand_normal, + E_GL_NV_vertex_program2, + E_GL_ATI_map_object_buffer, + E_GL_ATI_separate_stencil, + E_GL_ATI_vertex_attrib_array_object, + E_GL_OES_byte_coordinates, + E_GL_OES_fixed_point, + E_GL_OES_single_precision, + E_GL_OES_compressed_paletted_texture, + E_GL_OES_read_format, + E_GL_OES_query_matrix, + E_GL_EXT_depth_bounds_test, + E_GL_EXT_texture_mirror_clamp, + E_GL_EXT_blend_equation_separate, + E_GL_MESA_pack_invert, + E_GL_MESA_ycbcr_texture, + E_GL_EXT_pixel_buffer_object, + E_GL_NV_fragment_program_option, + E_GL_NV_fragment_program2, + E_GL_NV_vertex_program2_option, + E_GL_NV_vertex_program3, + E_GLX_SGIX_hyperpipe, + E_GLX_MESA_agp_offset, + E_GL_EXT_texture_compression_dxt1, + E_GL_EXT_framebuffer_object, + E_GL_GREMEDY_string_marker, + E_GL_EXT_packed_depth_stencil, + E_WGL_3DL_stereo_control, + E_GL_EXT_stencil_clear_tag, + E_GL_EXT_texture_sRGB, + E_GL_EXT_framebuffer_blit, + E_GL_EXT_framebuffer_multisample, + E_GL_MESAX_texture_stack, + E_GL_EXT_timer_query, + E_GL_EXT_gpu_program_parameters, + E_GL_APPLE_flush_buffer_range, + E_GL_NV_gpu_program4, + E_GL_NV_geometry_program4, + E_GL_EXT_geometry_shader4, + E_GL_NV_vertex_program4, + E_GL_EXT_gpu_shader4, + E_GL_EXT_draw_instanced, + E_GL_EXT_packed_float, + E_GLX_EXT_fbconfig_packed_float, + E_WGL_EXT_pixel_format_packed_float, + E_GL_EXT_texture_array, + E_GL_EXT_texture_buffer_object, + E_GL_EXT_texture_compression_latc, + E_GL_EXT_texture_compression_rgtc, + E_GL_EXT_texture_shared_exponent, + E_GL_NV_depth_buffer_float, + E_GL_NV_fragment_program4, + E_GL_NV_framebuffer_multisample_coverage, + E_GL_EXT_framebuffer_sRGB, + E_GLX_EXT_framebuffer_sRGB, + E_WGL_EXT_framebuffer_sRGB, + E_GL_NV_geometry_shader4, + E_GL_NV_parameter_buffer_object, + E_GL_EXT_draw_buffers2, + E_GL_NV_transform_feedback, + E_GL_EXT_bindable_uniform, + E_GL_EXT_texture_integer, + E_GLX_EXT_texture_from_pixmap, + E_GL_GREMEDY_frame_terminator, + E_GL_NV_conditional_render, + E_GL_NV_present_video, + E_GLX_NV_present_video, + E_WGL_NV_present_video, + E_GLX_NV_video_out, + E_WGL_NV_video_output, + E_GLX_NV_swap_group, + E_WGL_NV_swap_group, + E_GL_EXT_transform_feedback, + E_GL_EXT_direct_state_access, + E_GL_EXT_vertex_array_bgra, + E_WGL_NV_gpu_affinity, + E_GL_EXT_texture_swizzle, + E_GL_NV_explicit_multisample, + E_GL_NV_transform_feedback2, + E_GL_ATI_meminfo, + E_GL_AMD_performance_monitor, + E_WGL_AMD_gpu_association, + E_GL_AMD_texture_texture4, + E_GL_AMD_vertex_shader_tessellator, + E_GL_EXT_provoking_vertex, + E_GL_EXT_texture_snorm, + E_GL_AMD_draw_buffers_blend, + E_GL_APPLE_texture_range, + E_GL_APPLE_float_pixels, + E_GL_APPLE_vertex_program_evaluators, + E_GL_APPLE_aux_depth_stencil, + E_GL_APPLE_object_purgeable, + E_GL_APPLE_row_bytes, + E_GL_APPLE_rgb_422, + E_GL_NV_video_capture, + E_GLX_NV_video_capture, + E_WGL_NV_video_capture, + E_GL_EXT_swap_control, + E_GL_NV_copy_image, + E_GLX_NV_copy_image, + E_WGL_NV_copy_image, + E_GL_EXT_separate_shader_objects, + E_GL_NV_parameter_buffer_object2, + E_GL_NV_shader_buffer_load, + E_GL_NV_vertex_buffer_unified_memory, + E_GL_NV_texture_barrier, + E_GL_AMD_shader_stencil_export, + E_GL_AMD_seamless_cubemap_per_texture, + E_GLX_INTEL_swap_event, + E_GL_AMD_conservative_depth, + E_GL_EXT_shader_image_load_store, + E_GL_EXT_vertex_attrib_64bit, + E_GL_NV_gpu_program5, + E_GL_NV_gpu_shader5, + E_GL_NV_shader_buffer_store, + E_GL_NV_tessellation_program5, + E_GL_NV_vertex_attrib_integer_64bit, + E_GL_NV_multisample_coverage, + E_GL_AMD_name_gen_delete, + E_GL_AMD_debug_output, + E_GL_NV_vdpau_interop, + E_GL_AMD_transform_feedback3_lines_triangles, + E_GLX_AMD_gpu_association, + E_GLX_EXT_create_context_es2_profile, + E_GLX_EXT_create_context_es_profile, + E_WGL_EXT_create_context_es2_profile, + E_WGL_EXT_create_context_es_profile, + E_GL_AMD_depth_clamp_separate, + E_GL_EXT_texture_sRGB_decode, + E_GL_NV_texture_multisample, + E_GL_AMD_blend_minmax_factor, + E_GL_AMD_sample_positions, + E_GL_EXT_x11_sync_object, + E_WGL_NV_DX_interop, + E_GL_AMD_multi_draw_indirect, + E_GL_EXT_framebuffer_multisample_blit_scaled, + E_GL_NV_path_rendering, + E_GL_AMD_pinned_memory, + E_WGL_NV_DX_interop2, + E_GL_AMD_stencil_operation_extended, + E_GLX_EXT_swap_control_tear, + E_WGL_EXT_swap_control_tear, + E_GL_AMD_vertex_shader_viewport_index, + E_GL_AMD_vertex_shader_layer, + E_GL_NV_bindless_texture, + E_GL_NV_shader_atomic_float, + E_GL_AMD_query_buffer_object, + E_GL_NV_compute_program5, + E_GL_NV_shader_storage_buffer_object, + E_GL_NV_shader_atomic_counters, + E_GL_NV_deep_texture3D, + E_GL_NVX_conditional_render, + E_GL_AMD_sparse_texture, + E_GLX_EXT_buffer_age, + E_GL_AMD_shader_trinary_minmax, + E_GL_INTEL_map_texture, + E_GL_NV_draw_texture, + E_GL_AMD_interleaved_elements, + E_GL_NV_bindless_multi_draw_indirect, + E_GL_NV_blend_equation_advanced, + E_GL_NV_blend_equation_advanced_coherent, + E_GL_NV_gpu_program5_mem_extended, + E_GL_AMD_shader_atomic_counter_ops, + E_WGL_NV_delay_before_swap, + E_GL_EXT_shader_integer_mix, + E_GL_NVX_gpu_memory_info, + E_GL_EXT_debug_label, + E_GL_EXT_debug_marker, + E_GL_INTEL_fragment_shader_ordering, + E_GL_AMD_occlusion_query_event, + E_GL_INTEL_performance_query, + E_GL_AMD_shader_stencil_value_export, + E_GLX_NV_delay_before_swap, + E_GLX_MESA_query_renderer, + E_GL_NV_shader_thread_group, + E_GL_NV_shader_thread_shuffle, + E_GL_EXT_shader_image_load_formatted, + E_GL_AMD_transform_feedback4, + E_GL_AMD_gpu_shader_int64, + E_GLX_EXT_stereo_tree, + E_GL_AMD_gcn_shader, + E_GL_AMD_framebuffer_sample_positions, + E_GL_NV_shader_atomic_int64, + E_GL_NV_bindless_multi_draw_indirect_count, + E_GLX_NV_copy_buffer, + E_GL_NV_uniform_buffer_unified_memory, + E_GL_EXT_polygon_offset_clamp, + E_GL_EXT_post_depth_coverage, + E_GL_EXT_raster_multisample, + E_GL_EXT_sparse_texture2, + E_GL_EXT_texture_filter_minmax, + E_GL_NV_conservative_raster, + E_GL_NV_fill_rectangle, + E_GL_NV_fragment_coverage_to_color, + E_GL_NV_fragment_shader_interlock, + E_GL_NV_framebuffer_mixed_samples, + E_GL_NV_geometry_shader_passthrough, + E_GL_NV_path_rendering_shared_edge, + E_GL_NV_sample_locations, + E_GL_NV_sample_mask_override_coverage, + E_GL_NV_shader_atomic_fp16_vector, + E_GL_NV_internalformat_sample_query, + E_GL_NV_viewport_array2, + E_GL_NV_command_list, + E_GL_OVR_multiview, + E_GL_OVR_multiview2, + E_GL_NV_conservative_raster_dilate, + E_GL_INTEL_framebuffer_CMAA, + E_GLX_EXT_libglvnd, + E_GL_NV_viewport_swizzle, + E_GL_NV_robustness_video_memory_purge, + E_GL_AMD_shader_explicit_vertex_parameter, + E_GL_NV_clip_space_w_scaling, + E_GL_NV_conservative_raster_pre_snap_triangles, + E_GL_NV_shader_atomic_float64, + E_GL_NV_stereo_view_rendering, + E_GL_EXT_window_rectangles, + E_GL_INTEL_conservative_rasterization, + E_GL_NVX_blend_equation_advanced_multi_draw_buffers, + E_GL_NVX_linked_gpu_multicast, + E_GL_NV_gpu_multicast, + E_GL_MESA_shader_integer_functions, + E_GL_AMD_gpu_shader_half_float, + E_GL_AMD_shader_ballot, + E_WGL_EXT_colorspace, + E_GL_SGIX_pixel_texture, + E_GL_NV_alpha_to_coverage_dither_control, + E_GL_NV_draw_vulkan_image, + E_GL_AMD_texture_gather_bias_lod, + E_GL_EXT_memory_object, + E_GL_EXT_semaphore, + E_GL_EXT_memory_object_fd, + E_GL_EXT_semaphore_fd, + E_GL_EXT_memory_object_win32, + E_GL_EXT_semaphore_win32, + E_GL_EXT_win32_keyed_mutex, + E_GL_AMD_gpu_shader_int16, + E_GL_EXT_external_buffer, + E_GL_NV_texture_rectangle_compressed, + E_GL_NV_blend_minmax_factor, + E_GL_NV_query_resource, + E_GL_NV_query_resource_tag, + E_GL_AMD_shader_image_load_store_lod, + E_GLX_MESA_swap_control, + E_GL_MESA_tile_raster_order, + E_GL_MESA_program_binary_formats, + E_GL_NV_conservative_raster_pre_snap, + E_GL_NV_conservative_raster_underestimation, + E_GL_AMD_gpu_shader_half_float_fetch, + E_GL_EXT_shader_framebuffer_fetch, + E_GL_EXT_shader_framebuffer_fetch_non_coherent, + E_GL_INTEL_blackhole_render, + E_GL_EXT_EGL_image_storage, + E_GL_AMD_framebuffer_multisample_advanced, + E_GL_NV_memory_attachment, + E_GL_NV_compute_shader_derivatives, + E_GL_NV_fragment_shader_barycentric, + E_GL_NV_mesh_shader, + E_GL_NV_representative_fragment_test, + E_GL_NV_scissor_exclusive, + E_GL_NV_shader_texture_footprint, + E_GL_NV_shading_rate_image, + E_WGL_ATI_render_texture_rectangle, + E_GL_NV_vdpau_interop2, + E_GL_EXT_texture_sRGB_R8, + E_GLX_EXT_context_priority, + E_GL_EXT_multiview_timer_query, + E_GL_EXT_multiview_texture_multisample, + E_GL_EXT_multiview_tessellation_geometry_shader, + E_GL_EXT_texture_shadow_lod, + E_GL_MESA_framebuffer_flip_y, + E_GL_NVX_progress_fence, + E_WGL_NV_multigpu_context, + E_GL_NVX_gpu_multicast2, + E_GL_NV_shader_subgroup_partitioned, + E_GLX_NV_multigpu_context, + E_GL_EXT_EGL_sync, + E_GL_INTEL_shader_integer_functions2, + E_GL_MESA_framebuffer_flip_x, + E_GL_MESA_framebuffer_swap_xy, + E_GL_NV_memory_object_sparse, + E_GL_NV_timeline_semaphore, + E_GLX_EXT_get_drawable_type, + E_GLX_EXT_no_config_context, + E_GL_NV_primitive_shading_rate, + E_GL_EXT_texture_sRGB_RG8, + E_GL_EXT_texture_storage, + E_GL_EXT_framebuffer_blit_layers, + E_GL_NV_uniform_buffer_std430_layout, + E_GL_MESA_texture_const_bandwidth + }; +} // namespace MobileGL diff --git a/MobileGL/MG_Util/Metrics/BufferMetrics.cpp b/MobileGL/MG_Util/Metrics/BufferMetrics.cpp index 5b275112..8834add2 100644 --- a/MobileGL/MG_Util/Metrics/BufferMetrics.cpp +++ b/MobileGL/MG_Util/Metrics/BufferMetrics.cpp @@ -5,9 +5,9 @@ #include "BufferMetrics.h" namespace MobileGL { -namespace MG_Util { - SizeT GetGLTypeSize(GLenum type) { - switch (type) { + namespace MG_Util { + SizeT GetGLTypeSize(GLenum type) { + switch (type) { // Scalars case GL_BYTE: case GL_UNSIGNED_BYTE: @@ -30,10 +30,10 @@ namespace MG_Util { case GL_UNSIGNED_INT_5_9_9_9_REV: return 4; case GL_DOUBLE: - #ifdef GL_ARB_gpu_shader_int64 +#ifdef GL_ARB_gpu_shader_int64 case GL_UNSIGNED_INT64_ARB: case GL_INT64_ARB: - #endif +#endif return 8; // ---- Vector Types ---- @@ -72,7 +72,7 @@ namespace MG_Util { return 3 * 3 * sizeof(GLfloat); case GL_FLOAT_MAT4: return 4 * 4 * sizeof(GLfloat); - + // Float non-square case GL_FLOAT_MAT2x3: return 2 * 3 * sizeof(GLfloat); @@ -111,7 +111,7 @@ namespace MG_Util { default: return -1; + } } - } -} -} + } // namespace MG_Util +} // namespace MobileGL diff --git a/MobileGL/MG_Util/Metrics/BufferMetrics.h b/MobileGL/MG_Util/Metrics/BufferMetrics.h index 8b218978..4dacb9a7 100644 --- a/MobileGL/MG_Util/Metrics/BufferMetrics.h +++ b/MobileGL/MG_Util/Metrics/BufferMetrics.h @@ -8,9 +8,9 @@ #include namespace MobileGL { -namespace MG_Util { - SizeT GetGLTypeSize(GLenum type); -} -} + namespace MG_Util { + SizeT GetGLTypeSize(GLenum type); + } +} // namespace MobileGL -#endif //BUFFERMETRICS_H +#endif // BUFFERMETRICS_H diff --git a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp index f9971ea3..15fabe9e 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/ShaderCompiler.cpp @@ -139,7 +139,9 @@ namespace MobileGL { tshader->setEnvInput(glslang::EShSourceGlsl, lang, glslang::EShClientVulkan, 450); tshader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_3); tshader->setEnvTarget(glslang::EShTargetSpv, - ((attrib.flags & ShaderCompileBits::EmitDiscardAsDemote) ? glslang::EShTargetSpv_1_6 : glslang::EShTargetSpv_1_5)); + ((attrib.flags & ShaderCompileBits::EmitDiscardAsDemote) + ? glslang::EShTargetSpv_1_6 + : glslang::EShTargetSpv_1_5)); } tshader->setAutoMapLocations(true); tshader->setAutoMapBindings(true); @@ -192,7 +194,8 @@ namespace MobileGL { return program; } - Result>> ShaderCompiler::GetSpirvBinaryFromProgram(const ProgramBinaryAttrib &attrib) { + Result>> ShaderCompiler::GetSpirvBinaryFromProgram( + const ProgramBinaryAttrib& attrib) { glslang::SpvOptions spvOptions; spvOptions.disableOptimizer = false; diff --git a/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp b/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp index b0c2cc2a..d14c2b85 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.cpp @@ -93,7 +93,8 @@ namespace MobileGL { SPVC_CHK_RESULT(spvc_compiler_type_struct_member_offset(compiler, type, j, &memberOffset);) metadata.plainUniformOffsetsInUBO[memberName] = memberOffset; SizeT memberSize = 0; - SPVC_CHK_RESULT(spvc_compiler_get_declared_struct_member_size(compiler, type, j, &memberSize);) + SPVC_CHK_RESULT( + spvc_compiler_get_declared_struct_member_size(compiler, type, j, &memberSize);) metadata.plainUniformMemberSizesInBytes[memberName] = memberSize; auto memberTypeId = spvc_type_get_member_type(type, j); diff --git a/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.h b/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.h index 62a20da7..a72d5ba8 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.h +++ b/MobileGL/MG_Util/ShaderTranspiler/SpvcSession.h @@ -26,26 +26,25 @@ namespace MobileGL { static Uint32 getByteSizeOfBaseType(const spvc_basetype type) { switch (type) { - case SPVC_BASETYPE_INT8: - case SPVC_BASETYPE_UINT8: - return 1; - case SPVC_BASETYPE_INT16: - case SPVC_BASETYPE_UINT16: - case SPVC_BASETYPE_FP16: - return 2; - case SPVC_BASETYPE_INT32: - case SPVC_BASETYPE_UINT32: - case SPVC_BASETYPE_FP32: - return 4; - case SPVC_BASETYPE_INT64: - case SPVC_BASETYPE_UINT64: - case SPVC_BASETYPE_FP64: - return 8; - default: - return 0; + case SPVC_BASETYPE_INT8: + case SPVC_BASETYPE_UINT8: + return 1; + case SPVC_BASETYPE_INT16: + case SPVC_BASETYPE_UINT16: + case SPVC_BASETYPE_FP16: + return 2; + case SPVC_BASETYPE_INT32: + case SPVC_BASETYPE_UINT32: + case SPVC_BASETYPE_FP32: + return 4; + case SPVC_BASETYPE_INT64: + case SPVC_BASETYPE_UINT64: + case SPVC_BASETYPE_FP64: + return 8; + default: + return 0; } } - }; struct SpvcMetadata { diff --git a/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp b/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp index ee44bf54..610ae2f1 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.cpp @@ -5,36 +5,34 @@ #include "UniformTraverser.h" namespace MobileGL { -namespace MG_Util { -namespace ShaderTranspiler { - void UniformTraverser::visitSymbol(glslang::TIntermSymbol *symbol) { - auto parent = getParentNode(); - if (!parent) - return; - auto parentAgg = parent->getAsAggregate(); - if (!parentAgg || parentAgg->getOp() != glslang::EOpLinkerObjects) - return; + namespace MG_Util { + namespace ShaderTranspiler { + void UniformTraverser::visitSymbol(glslang::TIntermSymbol* symbol) { + auto parent = getParentNode(); + if (!parent) return; + auto parentAgg = parent->getAsAggregate(); + if (!parentAgg || parentAgg->getOp() != glslang::EOpLinkerObjects) return; - const auto &type = symbol->getType(); - if (symbol->getQualifier().isUniform() && type.getBasicType() != glslang::EbtSampler) { - m_collectedSymbols.emplace_back(symbol); - // auto& name = symbol->getName(); - // auto qualifier = symbol->getQualifier(); - // - // printf("layout(location = %d) uniform %s\n", qualifier.layoutLocation, name.c_str()); - // auto &uniform = uniforms.emplace_back(); - // uniform.name = name; - // uniform.storageQualifier = qualifier.storage; - // uniform.layoutLocation = qualifier.layoutLocation; - // uniform.layoutBinding = qualifier.layoutBinding; - // uniform.layoutPacking = qualifier.layoutPacking; - } - // else if (type.getBasicType() == glslang::EbtSampler) { - // auto &uniform = samplers.emplace_back(); - // uniform.name = symbol->getName(); - // uniform.sampler = type.getSampler(); - // } - } -} -} -} + const auto& type = symbol->getType(); + if (symbol->getQualifier().isUniform() && type.getBasicType() != glslang::EbtSampler) { + m_collectedSymbols.emplace_back(symbol); + // auto& name = symbol->getName(); + // auto qualifier = symbol->getQualifier(); + // + // printf("layout(location = %d) uniform %s\n", qualifier.layoutLocation, name.c_str()); + // auto &uniform = uniforms.emplace_back(); + // uniform.name = name; + // uniform.storageQualifier = qualifier.storage; + // uniform.layoutLocation = qualifier.layoutLocation; + // uniform.layoutBinding = qualifier.layoutBinding; + // uniform.layoutPacking = qualifier.layoutPacking; + } + // else if (type.getBasicType() == glslang::EbtSampler) { + // auto &uniform = samplers.emplace_back(); + // uniform.name = symbol->getName(); + // uniform.sampler = type.getSampler(); + // } + } + } // namespace ShaderTranspiler + } // namespace MG_Util +} // namespace MobileGL diff --git a/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.h b/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.h index bcc5a84a..39eb59be 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.h +++ b/MobileGL/MG_Util/ShaderTranspiler/glslang/UniformTraverser.h @@ -8,17 +8,18 @@ #include "Includes.h" namespace MobileGL { -namespace MG_Util { -namespace ShaderTranspiler { - class UniformTraverser : public glslang::TIntermTraverser { - public: - void visitSymbol(glslang::TIntermSymbol *symbol) override; - Vector& GetCollectedSymbols() { return m_collectedSymbols; } - private: - Vector m_collectedSymbols; - }; -} -} -} + namespace MG_Util { + namespace ShaderTranspiler { + class UniformTraverser : public glslang::TIntermTraverser { + public: + void visitSymbol(glslang::TIntermSymbol* symbol) override; + Vector& GetCollectedSymbols() { return m_collectedSymbols; } -#endif //MOBILEGL_UNIFORMTRAVERSER_H + private: + Vector m_collectedSymbols; + }; + } // namespace ShaderTranspiler + } // namespace MG_Util +} // namespace MobileGL + +#endif // MOBILEGL_UNIFORMTRAVERSER_H