123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import { WebGLLights } from './WebGLLights.js';
- function WebGLRenderState( extensions ) {
- const lights = new WebGLLights( extensions );
- const lightsArray = [];
- const shadowsArray = [];
- function init() {
- lightsArray.length = 0;
- shadowsArray.length = 0;
- }
- function pushLight( light ) {
- lightsArray.push( light );
- }
- function pushShadow( shadowLight ) {
- shadowsArray.push( shadowLight );
- }
- function setupLights( useLegacyLights ) {
- lights.setup( lightsArray, useLegacyLights );
- }
- function setupLightsView( camera ) {
- lights.setupView( lightsArray, camera );
- }
- const state = {
- lightsArray: lightsArray,
- shadowsArray: shadowsArray,
- lights: lights,
- transmissionRenderTarget: null
- };
- return {
- init: init,
- state: state,
- setupLights: setupLights,
- setupLightsView: setupLightsView,
- pushLight: pushLight,
- pushShadow: pushShadow
- };
- }
- function WebGLRenderStates( extensions ) {
- let renderStates = new WeakMap();
- function get( scene, renderCallDepth = 0 ) {
- const renderStateArray = renderStates.get( scene );
- let renderState;
- if ( renderStateArray === undefined ) {
- renderState = new WebGLRenderState( extensions );
- renderStates.set( scene, [ renderState ] );
- } else {
- if ( renderCallDepth >= renderStateArray.length ) {
- renderState = new WebGLRenderState( extensions );
- renderStateArray.push( renderState );
- } else {
- renderState = renderStateArray[ renderCallDepth ];
- }
- }
- return renderState;
- }
- function dispose() {
- renderStates = new WeakMap();
- }
- return {
- get: get,
- dispose: dispose
- };
- }
- export { WebGLRenderStates };
|