import WebGPUNodeBuilder from './WebGPUNodeBuilder.js'; import NodeFrame from '../../nodes/core/NodeFrame.js'; class WebGPUNodes { constructor( renderer ) { this.renderer = renderer; this.nodeFrame = new NodeFrame(); this.builders = new WeakMap(); } get( object, lightNode ) { let nodeBuilder = this.builders.get( object ); if ( nodeBuilder === undefined ) { nodeBuilder = new WebGPUNodeBuilder( object, this.renderer, lightNode ).build(); this.builders.set( object, nodeBuilder ); } return nodeBuilder; } remove( object ) { this.builders.delete( object ); } updateFrame() { this.nodeFrame.update(); } update( object, camera, lightNode ) { const renderer = this.renderer; const material = object.material; const nodeBuilder = this.get( object, lightNode ); const nodeFrame = this.nodeFrame; nodeFrame.material = material; nodeFrame.camera = camera; nodeFrame.object = object; nodeFrame.renderer = renderer; for ( const node of nodeBuilder.updateNodes ) { nodeFrame.updateNode( node ); } } dispose() { this.builders = new WeakMap(); } } export default WebGPUNodes;