From 87650a6b8aa5b71e2a986c460e545d690566769d Mon Sep 17 00:00:00 2001
From: Jaswant Panchumarti <jaswant.panchumarti@kitware.com>
Date: Wed, 4 Dec 2024 10:04:18 -0500
Subject: [PATCH] Rename vtkWebGPURenderer::BundleInvalidated to
 RebuildRenderBundle

- Replace setter with a function `vtkWebGPURenderer::InvalidateBundle()` that sets `RebuildRenderBundle` = True
---
 Rendering/WebGPU/vtkWebGPUActor.cxx              |  2 +-
 .../WebGPU/vtkWebGPUBatchedPolyDataMapper.cxx    |  2 +-
 Rendering/WebGPU/vtkWebGPUPolyDataMapper.cxx     |  4 ++--
 Rendering/WebGPU/vtkWebGPURenderer.cxx           | 16 +++++++++++++---
 Rendering/WebGPU/vtkWebGPURenderer.h             | 10 ++++------
 5 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/Rendering/WebGPU/vtkWebGPUActor.cxx b/Rendering/WebGPU/vtkWebGPUActor.cxx
index 372a767bdd7..ef3e443c1d5 100644
--- a/Rendering/WebGPU/vtkWebGPUActor.cxx
+++ b/Rendering/WebGPU/vtkWebGPUActor.cxx
@@ -98,7 +98,7 @@ void vtkWebGPUActor::Render(vtkRenderer* renderer, vtkMapper* mapper)
       case vtkWebGPURenderer::RecordingCommands:
         if (wgpuRenderer->GetUseRenderBundles() && this->SupportRenderBundles())
         {
-          if (wgpuRenderer->GetBundleInvalidated())
+          if (wgpuRenderer->GetRebuildRenderBundle())
           {
             wgpuRenderer->GetRenderBundleEncoder().SetBindGroup(1, this->ActorBindGroup);
             mapper->Render(renderer, this);
diff --git a/Rendering/WebGPU/vtkWebGPUBatchedPolyDataMapper.cxx b/Rendering/WebGPU/vtkWebGPUBatchedPolyDataMapper.cxx
index 883e0e164f2..f1127874a16 100644
--- a/Rendering/WebGPU/vtkWebGPUBatchedPolyDataMapper.cxx
+++ b/Rendering/WebGPU/vtkWebGPUBatchedPolyDataMapper.cxx
@@ -145,7 +145,7 @@ void vtkWebGPUBatchedPolyDataMapper::RenderPiece(vtkRenderer* renderer, vtkActor
   auto& batchElement = *(this->VTKPolyDataToBatchElement.begin()->second);
   if (this->LastBlockVisibility != batchElement.Visibility)
   {
-    wgpuRenderer->SetBundleInvalidated(true);
+    wgpuRenderer->InvalidateBundle();
   }
   this->LastBlockVisibility = batchElement.Visibility;
 
diff --git a/Rendering/WebGPU/vtkWebGPUPolyDataMapper.cxx b/Rendering/WebGPU/vtkWebGPUPolyDataMapper.cxx
index cfdc04fa74b..76e7509142c 100644
--- a/Rendering/WebGPU/vtkWebGPUPolyDataMapper.cxx
+++ b/Rendering/WebGPU/vtkWebGPUPolyDataMapper.cxx
@@ -306,13 +306,13 @@ void vtkWebGPUPolyDataMapper::RenderPiece(vtkRenderer* renderer, vtkActor* actor
       if (this->GetNeedToRebuildGraphicsPipelines(actor))
       {
         // render bundle must reference new bind groups and/or pipelines
-        wgpuRenderer->SetBundleInvalidated(true);
+        wgpuRenderer->InvalidateBundle();
         this->SetupGraphicsPipelines(device, renderer, actor);
       }
       // invalidate render bundle when any of the cached properties of an actor have changed.
       if (this->CacheActorProperties(actor))
       {
-        wgpuRenderer->SetBundleInvalidated(true);
+        wgpuRenderer->InvalidateBundle();
       }
       break;
     }
diff --git a/Rendering/WebGPU/vtkWebGPURenderer.cxx b/Rendering/WebGPU/vtkWebGPURenderer.cxx
index 86409c94176..08dd0687a15 100644
--- a/Rendering/WebGPU/vtkWebGPURenderer.cxx
+++ b/Rendering/WebGPU/vtkWebGPURenderer.cxx
@@ -160,8 +160,18 @@ void vtkWebGPURenderer::UpdateBuffers()
   this->UpdateLightGeometry();
   this->UpdateLights();
 
-  // if any mapper's commands need rebundling, that mapper will set this flag.
-  this->BundleInvalidated = false;
+  // Render bundle is rebuilt if any mapper needs to re-record render commands.
+  if (this->UseRenderBundles)
+  {
+    if (this->Bundle != nullptr)
+    {
+      this->RebuildRenderBundle = false;
+    }
+    else
+    {
+      this->RebuildRenderBundle = true;
+    }
+  }
   this->UpdateGeometry(); // mappers prepare geometry SSBO and pipeline layout.
 
   this->CreateBuffers();
@@ -695,7 +705,7 @@ void vtkWebGPURenderer::BeginRecording()
   this->WGPURenderEncoder.PushDebugGroup("Renderer start encoding");
 #endif
   this->WGPURenderEncoder.SetBindGroup(0, this->SceneBindGroup);
-  if (this->BundleInvalidated)
+  if (this->RebuildRenderBundle)
   {
     // destroy previous bundle.
     this->Bundle = nullptr;
diff --git a/Rendering/WebGPU/vtkWebGPURenderer.h b/Rendering/WebGPU/vtkWebGPURenderer.h
index c7333743f84..04305df8648 100644
--- a/Rendering/WebGPU/vtkWebGPURenderer.h
+++ b/Rendering/WebGPU/vtkWebGPURenderer.h
@@ -10,8 +10,6 @@
 #include "vtkWebGPUComputePipeline.h" // for the compute pipelines used by this renderer
 #include "vtk_wgpu.h"                 // for webgpu
 
-#include <string>        // for ivar
-#include <unordered_map> // for ivar
 #include <unordered_set> // for the set of actors rendered last frame
 
 class vtkAbstractMapper;
@@ -169,12 +167,12 @@ public:
    * @note This does not use vtkSetMacro because the actor MTime should not be affected when a
    * render bundle is invalidated.
    */
-  inline void SetBundleInvalidated(bool value) { this->BundleInvalidated = value; }
+  inline void InvalidateBundle() { this->RebuildRenderBundle = true; }
 
   /**
    * Get whether the render bundle associated with this actor must be reset by the renderer.
    */
-  vtkGetMacro(BundleInvalidated, bool);
+  vtkGetMacro(RebuildRenderBundle, bool);
 
 protected:
   vtkWebGPURenderer();
@@ -216,9 +214,9 @@ protected:
 #ifdef __EMSCRIPTEN__
   bool UseRenderBundles = true;
 #else
-  bool UseRenderBundles = true;
+  bool UseRenderBundles = false;
 #endif
-  bool BundleInvalidated = false;
+  bool RebuildRenderBundle = false;
   // the commands in bundle get reused every frame.
   wgpu::RenderBundle Bundle;
 
-- 
GitLab