WebGPURenderStates.js 811 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { LightsNode } from 'three/nodes';
  2. class WebGPURenderState {
  3. constructor() {
  4. this.lightsNode = new LightsNode();
  5. this.lightsArray = [];
  6. }
  7. init() {
  8. this.lightsArray.length = 0;
  9. }
  10. pushLight( light ) {
  11. this.lightsArray.push( light );
  12. }
  13. getLightsNode() {
  14. return this.lightsNode.fromLights( this.lightsArray );
  15. }
  16. }
  17. class WebGPURenderStates {
  18. constructor() {
  19. this.renderStates = new WeakMap();
  20. }
  21. get( scene, /* camera */ ) {
  22. const renderStates = this.renderStates;
  23. let renderState = renderStates.get( scene );
  24. if ( renderState === undefined ) {
  25. renderState = new WebGPURenderState();
  26. renderStates.set( scene, renderState );
  27. }
  28. return renderState;
  29. }
  30. dispose() {
  31. this.renderStates = new WeakMap();
  32. }
  33. }
  34. export default WebGPURenderStates;