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