@@ -26,8 +26,18 @@ function vtkWebGPUOpaquePass(publicAPI, model) {
2626 ? viewNode . getSampleCount ( )
2727 : 1 ;
2828
29+ // If sampleCount changed since last render, tear down and recreate
30+ if ( model . renderEncoder && model . _currentSampleCount !== sampleCount ) {
31+ model . renderEncoder = null ;
32+ model . colorTexture = null ;
33+ model . depthTexture = null ;
34+ model . resolveColorTexture = null ;
35+ model . _resolveColorTextureView = null ;
36+ }
37+
2938 if ( ! model . renderEncoder ) {
3039 publicAPI . createRenderEncoder ( sampleCount ) ;
40+ model . _currentSampleCount = sampleCount ;
3141
3242 const width = viewNode . getCanvas ( ) . width ;
3343 const height = viewNode . getCanvas ( ) . height ;
@@ -67,9 +77,10 @@ function vtkWebGPUOpaquePass(publicAPI, model) {
6777 GPUTextureUsage . TEXTURE_BINDING |
6878 GPUTextureUsage . COPY_SRC ,
6979 } ) ;
70- const resolveView = model . resolveColorTexture . createView (
80+ model . _resolveColorTextureView = model . resolveColorTexture . createView (
7181 'opaquePassColorTexture'
7282 ) ;
83+ const resolveView = model . _resolveColorTextureView ;
7384 model . renderEncoder . setResolveTextureView ( 0 , resolveView ) ;
7485 }
7586
@@ -112,8 +123,8 @@ function vtkWebGPUOpaquePass(publicAPI, model) {
112123 // When MSAA is active, downstream passes must sample from the resolved
113124 // (1-sample) texture, not the multisampled one
114125 publicAPI . getColorTextureView = ( ) => {
115- if ( model . resolveColorTexture ) {
116- return model . resolveColorTexture . createView ( 'opaquePassColorTexture' ) ;
126+ if ( model . _resolveColorTextureView ) {
127+ return model . _resolveColorTextureView ;
117128 }
118129 return model . renderEncoder . getColorTextureViews ( ) [ 0 ] ;
119130 } ;
0 commit comments