WebGPURenderStates.js 879 B

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