@@ -288,16 +288,19 @@ class SwapChainWebGPUImpl::PresentCommand
288288 return WGPUSurfaceGetCurrentTextureStatus_Error;
289289 }
290290
291- WGPUBindGroupEntry wgpuBindGroupEntries[1 ]{};
292- wgpuBindGroupEntries[0 ].binding = 0 ;
293- wgpuBindGroupEntries[0 ].textureView = pTexture->GetWebGPUTextureView ();
291+ if (!m_wgpuBindGroup)
292+ {
293+ WGPUBindGroupEntry wgpuBindGroupEntries[1 ]{};
294+ wgpuBindGroupEntries[0 ].binding = 0 ;
295+ wgpuBindGroupEntries[0 ].textureView = pTexture->GetWebGPUTextureView ();
294296
295- WGPUBindGroupDescriptor wgpuBindGroupDesc{};
296- wgpuBindGroupDesc.entries = wgpuBindGroupEntries;
297- wgpuBindGroupDesc.entryCount = _countof (wgpuBindGroupEntries);
298- wgpuBindGroupDesc.layout = m_wgpuBindGroupLayout;
297+ WGPUBindGroupDescriptor wgpuBindGroupDesc{};
298+ wgpuBindGroupDesc.entries = wgpuBindGroupEntries;
299+ wgpuBindGroupDesc.entryCount = _countof (wgpuBindGroupEntries);
300+ wgpuBindGroupDesc.layout = m_wgpuBindGroupLayout;
299301
300- WebGPUBindGroupWrapper wgpuBindGroup{wgpuDeviceCreateBindGroup (m_pRenderDevice->GetWebGPUDevice (), &wgpuBindGroupDesc)};
302+ m_wgpuBindGroup.Reset (wgpuDeviceCreateBindGroup (m_pRenderDevice->GetWebGPUDevice (), &wgpuBindGroupDesc));
303+ }
301304
302305 WGPUCommandEncoderDescriptor wgpuCmdEncoderDesc{};
303306 WebGPUCommandEncoderWrapper wgpuCmdEncoder{wgpuDeviceCreateCommandEncoder (m_pRenderDevice->GetWebGPUDevice (), &wgpuCmdEncoderDesc)};
@@ -315,7 +318,7 @@ class SwapChainWebGPUImpl::PresentCommand
315318
316319 WebGPURenderPassEncoderWrapper wgpuRenderPassEncoder{wgpuCommandEncoderBeginRenderPass (wgpuCmdEncoder, &wgpuRenderPassDesc)};
317320 wgpuRenderPassEncoderSetPipeline (wgpuRenderPassEncoder, m_wgpuRenderPipeline);
318- wgpuRenderPassEncoderSetBindGroup (wgpuRenderPassEncoder, 0 , wgpuBindGroup , 0 , nullptr );
321+ wgpuRenderPassEncoderSetBindGroup (wgpuRenderPassEncoder, 0 , m_wgpuBindGroup , 0 , nullptr );
319322 wgpuRenderPassEncoderDraw (wgpuRenderPassEncoder, 3 , 1 , 0 , 0 );
320323 wgpuRenderPassEncoderEnd (wgpuRenderPassEncoder);
321324
@@ -333,9 +336,15 @@ class SwapChainWebGPUImpl::PresentCommand
333336 return wgpuSurfaceTexture.status ;
334337 }
335338
339+ void ReleaseSwapChainResources ()
340+ {
341+ m_wgpuBindGroup.Reset ();
342+ }
343+
336344private:
337345 RefCntAutoPtr<IRenderDeviceWebGPU> m_pRenderDevice;
338346 WebGPUBindGroupLayoutWrapper m_wgpuBindGroupLayout;
347+ WebGPUBindGroupWrapper m_wgpuBindGroup;
339348 WebGPUPipelineLayoutWrapper m_wgpuPipelineLayout;
340349 WebGPURenderPipelineWrapper m_wgpuRenderPipeline;
341350};
@@ -599,6 +608,7 @@ void SwapChainWebGPUImpl::ReleaseSwapChainResources()
599608 if (!m_wgpuSurface)
600609 return ;
601610
611+ m_pCmdPresent->ReleaseSwapChainResources ();
602612 m_pBackBufferSRV.Release ();
603613 m_pBackBufferRTV.Release ();
604614 m_pDepthBufferDSV.Release ();
0 commit comments