88
99#include < GLSLGenerator.h>
1010#include < HLSLParser.h>
11+ #include < Logging.hpp>
1112
1213#include < glm/gtc/matrix_transform.hpp>
1314#include < glm/mat4x4.hpp>
@@ -331,10 +332,15 @@ auto MilkdropShader::Shader() -> Renderer::Shader&
331332
332333void MilkdropShader::PreprocessPresetShader (std::string& program)
333334{
335+ std::string shaderTypeString = " composite" ;
336+ if (m_type == ShaderType::WarpShader)
337+ {
338+ shaderTypeString = " warp" ;
339+ }
334340
335341 if (program.length () <= 0 )
336342 {
337- throw Renderer::ShaderException (" Preset shader is declared, but empty." );
343+ throw Renderer::ShaderException (" [MilkdropShader] Preset " + shaderTypeString + " shader is declared, but empty." );
338344 }
339345
340346 size_t found;
@@ -391,7 +397,8 @@ void PS(float4 _vDiffuse : COLOR,
391397 }
392398 else
393399 {
394- throw Renderer::ShaderException (" Preset shader is missing \" shader_body\" entry point." );
400+ LOG_DEBUG (" [MilkdropShader] Failed " + shaderTypeString + " shader code:\n " + program);
401+ throw Renderer::ShaderException (" [MilkdropShader] Preset " + shaderTypeString + " shader is missing \" shader_body\" entry point." );
395402 }
396403
397404 // replace the "{" immediately following shader_body with some variable declarations
@@ -407,7 +414,8 @@ void PS(float4 _vDiffuse : COLOR,
407414 }
408415 else
409416 {
410- throw Renderer::ShaderException (" Preset shader has no opening braces." );
417+ LOG_DEBUG (" [MilkdropShader] Failed " + shaderTypeString + " shader code:\n " + program);
418+ throw Renderer::ShaderException (" [MilkdropShader] Preset " + shaderTypeString + " shader has no opening braces." );
411419 }
412420
413421 // replace "}" with return statement (this can probably be optimized for the GLSL conversion...)
@@ -419,7 +427,8 @@ void PS(float4 _vDiffuse : COLOR,
419427 }
420428 else
421429 {
422- throw Renderer::ShaderException (" Preset shader has no closing brace." );
430+ LOG_DEBUG (" [MilkdropShader] Failed " + shaderTypeString + " shader code:\n " + program);
431+ throw Renderer::ShaderException (" [MilkdropShader] Preset " + shaderTypeString + " shader has no closing brace." );
423432 }
424433
425434 // Find matching closing brace and cut off excess text after shader's main function
@@ -591,7 +600,8 @@ void MilkdropShader::TranspileHLSLShader(const PresetState& presetState, std::st
591600 std::string sourcePreprocessed;
592601 if (!parser.ApplyPreprocessor (" " , program.c_str (), program.size (), sourcePreprocessed))
593602 {
594- throw Renderer::ShaderException (" Error translating HLSL " + shaderTypeString + " shader: Preprocessing failed.\n Source:\n " + program);
603+ LOG_DEBUG (" [MilkdropShader] Failed " + shaderTypeString + " shader code:\n " + program);
604+ throw Renderer::ShaderException (" Error translating HLSL " + shaderTypeString + " shader: Preprocessing failed." );
595605 }
596606
597607 // Remove previous shader declarations
@@ -644,17 +654,23 @@ void MilkdropShader::TranspileHLSLShader(const PresetState& presetState, std::st
644654 // First, parse HLSL into a tree
645655 if (!parser.Parse (" " , sourcePreprocessed.c_str (), sourcePreprocessed.size ()))
646656 {
647- throw Renderer::ShaderException (" Error translating HLSL " + shaderTypeString + " shader: HLSL parsing failed.\n Source:\n " + sourcePreprocessed);
657+ LOG_DEBUG (" [MilkdropShader] Failed " + shaderTypeString + " shader code:\n " + program);
658+ LOG_DEBUG (" [MilkdropShader] Failed preprocessed " + shaderTypeString + " shader code:\n " + sourcePreprocessed);
659+ throw Renderer::ShaderException (" [MilkdropShader] Error translating HLSL " + shaderTypeString + " shader: HLSL parsing failed." );
648660 }
649661
650662 // Then generate GLSL from the resulting parser tree
651663 if (!generator.Generate (&tree, M4::GLSLGenerator::Target_FragmentShader,
652664 MilkdropStaticShaders::Get ()->GetGlslGeneratorVersion (),
653665 " PS" , M4::GLSLGenerator::Options (M4::GLSLGenerator::Flag_AlternateNanPropagation)))
654666 {
655- throw Renderer::ShaderException (" Error translating HLSL " + shaderTypeString + " shader: GLSL generating failed.\n Source:\n " + sourcePreprocessed);
667+ LOG_DEBUG (" [MilkdropShader] Failed " + shaderTypeString + " shader code:\n " + program);
668+ LOG_DEBUG (" [MilkdropShader] Failed preprocessed " + shaderTypeString + " shader code:\n " + sourcePreprocessed);
669+ throw Renderer::ShaderException (" [MilkdropShader] Error translating HLSL " + shaderTypeString + " shader: GLSL generating failed.\n Source:\n " + sourcePreprocessed);
656670 }
657671
672+ LOG_TRACE (" [MilkdropShader] Transpiled GLSL " + shaderTypeString + " shader code:\n " + std::string (generator.GetResult ()));
673+
658674 // Now we have GLSL source for the preset shader program (hopefully it's valid!)
659675 // Compile the preset shader fragment shader with the standard vertex shader and cross our fingers.
660676 if (m_type == ShaderType::WarpShader)
0 commit comments