mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
[Fix] (MG_State/ProgramObject): don't link when shader involved failed to compile
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
#include "ProgramObject.h"
|
#include "ProgramObject.h"
|
||||||
|
#include "MG_Util/Converters/GLToStr/GLEnumConverter.h"
|
||||||
#include <MG_Util/ShaderTranspiler/ShaderCompiler.h>
|
#include <MG_Util/ShaderTranspiler/ShaderCompiler.h>
|
||||||
#include <MG_Util/Converters/MGToGL/ProgramEnumConverter.h>
|
#include <MG_Util/Converters/MGToGL/ProgramEnumConverter.h>
|
||||||
#include <MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.h>
|
#include <MG_Util/Converters/SPIRVCrossToGL/SpvcTypeConverter.h>
|
||||||
@@ -28,9 +29,20 @@ namespace MobileGL {
|
|||||||
void ProgramObject::Link() {
|
void ProgramObject::Link() {
|
||||||
Vector<GLenum> shaderTypes(m_shaders.size());
|
Vector<GLenum> shaderTypes(m_shaders.size());
|
||||||
Vector<SharedPtr<glslang::TShader>> shaders(m_shaders.size());
|
Vector<SharedPtr<glslang::TShader>> 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++) {
|
for (SizeT i = 0; i < m_shaders.size(); i++) {
|
||||||
shaderTypes[i] = MG_Util::ConvertShaderStageToGLEnum(m_shaders[i]->GetShaderStage());
|
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();
|
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{
|
MG_Util::ShaderTranspiler::ProgramAttrib attrib{
|
||||||
@@ -44,6 +56,7 @@ namespace MobileGL {
|
|||||||
} else {
|
} else {
|
||||||
m_linkStatus = false;
|
m_linkStatus = false;
|
||||||
m_infoLog = result.error().log;
|
m_infoLog = result.error().log;
|
||||||
|
MGLOG_W("%s", m_infoLog.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
DoReflection();
|
DoReflection();
|
||||||
|
|||||||
Reference in New Issue
Block a user