From 20f7c8bf290af04667ff0209b3c5f0061985e7c4 Mon Sep 17 00:00:00 2001 From: Jaswant Panchumarti <jaswant.panchumarti@kitware.com> Date: Wed, 20 Mar 2024 13:05:47 -0400 Subject: [PATCH] Fix shader debugging file logic - if shader failed to compile, restore the source strings to the last working code. - otherwise, the shader code was never refreshed even after fixing the errors. --- Rendering/OpenGL2/vtkShaderProgram.cxx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Rendering/OpenGL2/vtkShaderProgram.cxx b/Rendering/OpenGL2/vtkShaderProgram.cxx index 12126b9c3fa..aad8a38ef7d 100644 --- a/Rendering/OpenGL2/vtkShaderProgram.cxx +++ b/Rendering/OpenGL2/vtkShaderProgram.cxx @@ -417,8 +417,10 @@ bool vtkShaderProgram::Bind() { const char* exts[3] = { "VS.glsl", "FS.glsl", "GS.glsl" }; vtkShader* shaders[3] = { this->VertexShader, this->FragmentShader, this->GeometryShader }; + std::string sources[3] = {}; for (int cc = 0; cc < 3; cc++) { + sources[cc] = shaders[cc]->GetSource(); std::string fname = this->FileNamePrefixForDebugging; fname += exts[cc]; if (vtksys::SystemTools::FileExists(fname)) @@ -434,7 +436,15 @@ bool vtkShaderProgram::Bind() ofp << shaders[cc]->GetSource(); } } - this->CompileShader(); + if (!this->CompileShader()) + { + // fallback to previous source code. + vtkWarningMacro(<< "Falling back to last working source code"); + for (int cc = 0; cc < 3; cc++) + { + shaders[cc]->SetSource(sources[cc]); + } + } } if (!this->Linked && !this->Link()) { -- GitLab