WebGLRenderStates.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /**
  2. * @author Mugen87 / https://github.com/Mugen87
  3. */
  4. import { WebGLLights } from './WebGLLights.js';
  5. function WebGLRenderState() {
  6. var lights = new WebGLLights();
  7. var lightsArray = [];
  8. var shadowsArray = [];
  9. function init() {
  10. lightsArray.length = 0;
  11. shadowsArray.length = 0;
  12. }
  13. function pushLight( light ) {
  14. lightsArray.push( light );
  15. }
  16. function pushShadow( shadowLight ) {
  17. shadowsArray.push( shadowLight );
  18. }
  19. function setupLights( camera ) {
  20. lights.setup( lightsArray, shadowsArray, camera );
  21. }
  22. var state = {
  23. lightsArray: lightsArray,
  24. shadowsArray: shadowsArray,
  25. lights: lights
  26. };
  27. return {
  28. init: init,
  29. state: state,
  30. setupLights: setupLights,
  31. pushLight: pushLight,
  32. pushShadow: pushShadow
  33. };
  34. }
  35. function WebGLRenderStates() {
  36. var renderStates = new WeakMap();
  37. function onSceneDispose( event ) {
  38. var scene = event.target;
  39. scene.removeEventListener( 'dispose', onSceneDispose );
  40. renderStates.delete( scene );
  41. }
  42. function get( scene, camera ) {
  43. var renderState;
  44. if ( !renderStates.has( scene ) ) {
  45. renderState = new WebGLRenderState();
  46. renderStates.set( scene , new WeakMap());
  47. renderStates.get( scene ).set( camera , renderState);
  48. scene.addEventListener( 'dispose', onSceneDispose );
  49. } else {
  50. if ( !renderStates.get( scene ).has( camera ) ) {
  51. renderState = new WebGLRenderState();
  52. renderStates.get( scene ).set( camera , renderState);
  53. } else {
  54. renderState = renderStates.get( scene ).get( camera );
  55. }
  56. }
  57. return renderState;
  58. }
  59. function dispose() {
  60. renderStates = new WeakMap();
  61. }
  62. return {
  63. get: get,
  64. dispose: dispose
  65. };
  66. }
  67. export { WebGLRenderStates };