From 6e6594289143e25ebf1acb48dd46b82a73ca5b79 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Wed, 12 Nov 2025 18:03:29 +0800 Subject: [PATCH] [Chore] (MG_Util/ShaderSourceProcessor): trim unnecessary part of shader source --- .../GLState/ProgramState/ProgramObject.cpp | 6 +++++- .../ShaderTranspiler/ShaderSourceProcessor.cpp | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index 12d48132..5f8ff4a7 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -363,8 +363,12 @@ namespace MobileGL { MGLOG_E("ProgramObject %u: GenerateBinary - CompileShader failed for shader[%zu], aborting " "binary generation", m_externalIndex, i); - assert(res); // keep original assert but log first + MGLOG_E("ProgramObject %u: GenerateBinary - CompileShader return code %d, log:\n%s", + m_externalIndex, res.error().errc, res.error().log.c_str()); + MGLOG_E("ProgramObject %u: GenerateBinary - last compiled shader src: \n%s", + m_externalIndex, m_shaders[i]->GetShaderSource().c_str()); } + assert(res); // keep original assert but log first shaders[i] = res.value(); MGLOG_D("ProgramObject %u: GenerateBinary - compiled shader[%zu] -> TShader ptr %p", m_externalIndex, i, shaders[i].get()); diff --git a/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp b/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp index 116b3368..5a83a113 100644 --- a/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp +++ b/MobileGL/MG_Util/ShaderTranspiler/ShaderSourceProcessor.cpp @@ -4,6 +4,24 @@ namespace MobileGL { namespace MG_Util { namespace ShaderTranspiler { void PreprocessShaderSource(ShaderStage stage, String& source) { + // remove #line directives + SizeT linedirPos = source.find("#line"); + while (linedirPos != std::string::npos) { + SizeT newlinePos = source.find('\n', linedirPos); + source = source.replace(linedirPos, newlinePos - linedirPos, ""); + linedirPos = source.find("#line", linedirPos); + } + + // remove multi-line comment + size_t commentStartPos = source.find("/*"); + while (commentStartPos != std::string::npos) { + size_t commentEndPos = source.find("*/", commentStartPos); + // + length of "*/" + source = source.replace(commentStartPos, commentEndPos - commentStartPos + 2, ""); + commentStartPos = source.find("/*", commentStartPos); + } + + // force #version ShaderProfile profile = ShaderProfile::Core; SizeT versionPos = source.find("#version");