瀏覽代碼

provisional implementation of Material.dispose()

sunag 4 年之前
父節點
當前提交
4517e465c9

+ 6 - 0
examples/jsm/renderers/webgpu/WebGPUBindings.js

@@ -51,6 +51,12 @@ class WebGPUBindings {
 
 	}
 
+	remove( object ) {
+
+		this.uniformsData.delete( object );
+
+	}
+
 	getForCompute( param ) {
 
 		let data = this.uniformsData.get( param );

+ 9 - 3
examples/jsm/renderers/webgpu/WebGPURenderPipelines.js

@@ -99,8 +99,9 @@ class WebGPURenderPipelines {
 
 			const disposeCallback = onMaterialDispose.bind( this );
 			materialProperties.disposeCallback = disposeCallback;
+			materialProperties.object = object;
 
-			material.addEventListener( 'dispose', onMaterialDispose.bind( this ) );
+			material.addEventListener( 'dispose', disposeCallback );
 
 			// determine shader attributes
 
@@ -792,9 +793,10 @@ function onMaterialDispose( event ) {
 	const shaderModules = this.shaderModules;
 
 	const material = event.target;
+	const materialProperties = properties.get( material );
 	const nodeBuilder = nodes.get( material );
 
-	material.removeEventListener( 'dispose', onMaterialDispose );
+	material.removeEventListener( 'dispose', materialProperties.disposeCallback );
 
 	properties.remove( material );
 	nodes.remove( material );
@@ -802,7 +804,11 @@ function onMaterialDispose( event ) {
 	shaderModules.vertex.delete( nodeBuilder.vertexShader );
 	shaderModules.fragment.delete( nodeBuilder.fragmentShader );
 
-	// @TODO: need implement pipeline
+	// @TODO: draft implementation
+
+	this.renderer._bindings.remove( materialProperties.object );
+
+	this.pipelines.delete( materialProperties.object );
 
 }