瀏覽代碼

WebGPURenderer: Fix RenderTarget dispose and MRT (#28912)

sunag 1 年之前
父節點
當前提交
379dddda6e
共有 3 個文件被更改,包括 17 次插入2 次删除
  1. 1 1
      src/renderers/common/RenderContexts.js
  2. 2 0
      src/renderers/common/Textures.js
  3. 14 1
      src/renderers/webgpu/WebGPUBackend.js

+ 1 - 1
src/renderers/common/RenderContexts.js

@@ -22,7 +22,7 @@ class RenderContexts {
 		} else {
 
 			const format = renderTarget.texture.format;
-			const count = renderTarget.count;
+			const count = renderTarget.textures.length;
 
 			attachmentState = `${ count }:${ format }:${ renderTarget.samples }:${ renderTarget.depthBuffer }:${ renderTarget.stencilBuffer }`;
 

+ 2 - 0
src/renderers/common/Textures.js

@@ -119,6 +119,8 @@ class Textures extends DataMap {
 
 				this._destroyTexture( depthTexture );
 
+				this.delete( renderTarget );
+
 			};
 
 			renderTarget.addEventListener( 'dispose', onDispose );

+ 14 - 1
src/renderers/webgpu/WebGPUBackend.js

@@ -204,11 +204,24 @@ class WebGPUBackend extends Backend {
 		if ( renderTargetData.width !== renderTarget.width ||
 			renderTargetData.height !== renderTarget.height ||
 			renderTargetData.activeMipmapLevel !== renderTarget.activeMipmapLevel ||
-			renderTargetData.samples !== renderTarget.samples
+			renderTargetData.samples !== renderTarget.samples ||
+			descriptors.length !== renderTarget.textures.length
 		) {
 
 			descriptors.length = 0;
 
+			// dispose
+
+			const onDispose = () => {
+
+				renderTarget.removeEventListener( 'dispose', onDispose );
+
+				this.delete( renderTarget );
+
+			};
+
+			renderTarget.addEventListener( 'dispose', onDispose );
+
 		}
 
 		let descriptor = descriptors[ renderContext.activeCubeFace ];