WebGPUNodes.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import WebGPUNodeBuilder from './WebGPUNodeBuilder.js';
  2. import NodeFrame from '../../nodes/core/NodeFrame.js';
  3. class WebGPUNodes {
  4. constructor( renderer ) {
  5. this.renderer = renderer;
  6. this.nodeFrame = new NodeFrame();
  7. this.builders = new WeakMap();
  8. }
  9. get( object, lightNode ) {
  10. let nodeBuilder = this.builders.get( object );
  11. if ( nodeBuilder === undefined ) {
  12. nodeBuilder = new WebGPUNodeBuilder( object.material, this.renderer, lightNode ).build();
  13. this.builders.set( object, nodeBuilder );
  14. }
  15. return nodeBuilder;
  16. }
  17. remove( object ) {
  18. this.builders.delete( object );
  19. }
  20. updateFrame() {
  21. this.nodeFrame.update();
  22. }
  23. update( object, camera, lightNode ) {
  24. const material = object.material;
  25. const nodeBuilder = this.get( object, lightNode );
  26. const nodeFrame = this.nodeFrame;
  27. nodeFrame.material = material;
  28. nodeFrame.camera = camera;
  29. nodeFrame.object = object;
  30. for ( const node of nodeBuilder.updateNodes ) {
  31. nodeFrame.updateNode( node );
  32. }
  33. }
  34. dispose() {
  35. this.builders = new WeakMap();
  36. }
  37. }
  38. export default WebGPUNodes;