WebGPUNodes.js 1.4 KB

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