diff --git a/Rendering/WebGPU/vtkWebGPUActor.cxx b/Rendering/WebGPU/vtkWebGPUActor.cxx
index 372a767bdd7516175103a8d2b632cd49dd0c102c..ef3e443c1d535ac0b1e6910c0ee28eb386856add 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 883e0e164f233a7ac6a56c77fb7f3050f3064ec4..f1127874a16297ef81d291bbe7c573889baf710a 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 cfdc04fa74ba3da70b008cd1871025946cd92493..76e7509142c46e44dca39bca8e5a2226b736c77e 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 86409c9417651965686542f4b1bb78cc1702a62f..08dd0687a1556d5d7d9ed308968e49c326096783 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 c7333743f84309b4196dd0733b9e1ddc0cc15970..04305df8648b72ad97bb08219582f7ea692c9f05 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;