12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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;
|