WebGPUNodes.js 978 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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( material ) {
  10. let nodeBuilder = this.builders.get( material );
  11. if ( nodeBuilder === undefined ) {
  12. nodeBuilder = new WebGPUNodeBuilder( material, this.renderer ).build();
  13. this.builders.set( material, 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 ) {
  24. const material = object.material;
  25. const nodeBuilder = this.get( material );
  26. this.nodeFrame.material = object.material;
  27. for ( let node of nodeBuilder.updateNodes ) {
  28. this.nodeFrame.updateNode( node );
  29. }
  30. }
  31. dispose() {
  32. this.builders = new WeakMap();
  33. }
  34. }
  35. export default WebGPUNodes;