From 3f36992f981e183a48899a1e51c02712e0fe0436 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Thu, 6 Nov 2025 23:55:38 +0800 Subject: [PATCH] [Fix] (MG_State/ProgramObject): don't link when shader involved failed to compile --- .../MG_State/GLState/ProgramState/ProgramObject.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp index 6dc76e51..90738de8 100644 --- a/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp +++ b/MobileGL/MG_State/GLState/ProgramState/ProgramObject.cpp @@ -1,4 +1,5 @@ #include "ProgramObject.h" +#include "MG_Util/Converters/GLToStr/GLEnumConverter.h" #include #include #include @@ -28,9 +29,20 @@ namespace MobileGL { void ProgramObject::Link() { Vector shaderTypes(m_shaders.size()); Vector> shaders(m_shaders.size()); + MGLOG_D("%s: shaders to link: %d\n", __func__, m_shaders.size()); for (SizeT i = 0; i < m_shaders.size(); i++) { shaderTypes[i] = MG_Util::ConvertShaderStageToGLEnum(m_shaders[i]->GetShaderStage()); + if (!m_shaders[i]->GetCompileStatus()) { + m_infoLog = std::format("Linking a {} with compilation error, linking will now terminate. Shader error log:\n{}\nShader src:\n{}", + MG_Util::ConvertGLEnumToString(shaderTypes[i]).c_str(), + m_shaders[i]->GetInfoLog().c_str(), m_shaders[i]->GetShaderSource().c_str()); + m_linkStatus = false; + MGLOG_W("%s", m_infoLog.c_str()); + return; + } shaders[i] = m_shaders[i]->GetCompiledShader(); + MGLOG_D("%s: \n%s", + MG_Util::ConvertGLEnumToString(shaderTypes[i]).c_str(), m_shaders[i]->GetShaderSource().c_str()); } MG_Util::ShaderTranspiler::ProgramAttrib attrib{ @@ -44,6 +56,7 @@ namespace MobileGL { } else { m_linkStatus = false; m_infoLog = result.error().log; + MGLOG_W("%s", m_infoLog.c_str()); } DoReflection();