three
Version:
JavaScript 3D library
113 lines (64 loc) • 1.67 kB
JavaScript
import { WebGLLights } from './WebGLLights.js';
function WebGLRenderState() {
const lights = new WebGLLights();
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( camera ) {
lights.setup( lightsArray, shadowsArray, camera );
}
const state = {
lightsArray: lightsArray,
shadowsArray: shadowsArray,
lights: lights
};
return {
init: init,
state: state,
setupLights: setupLights,
pushLight: pushLight,
pushShadow: pushShadow
};
}
function WebGLRenderStates() {
let renderStates = new WeakMap();
function onSceneDispose( event ) {
const scene = event.target;
scene.removeEventListener( 'dispose', onSceneDispose );
renderStates.delete( scene );
}
function get( scene, camera ) {
let renderState;
if ( renderStates.has( scene ) === false ) {
renderState = new WebGLRenderState();
renderStates.set( scene, new WeakMap() );
renderStates.get( scene ).set( camera, renderState );
scene.addEventListener( 'dispose', onSceneDispose );
} else {
if ( renderStates.get( scene ).has( camera ) === false ) {
renderState = new WebGLRenderState();
renderStates.get( scene ).set( camera, renderState );
} else {
renderState = renderStates.get( scene ).get( camera );
}
}
return renderState;
}
function dispose() {
renderStates = new WeakMap();
}
return {
get: get,
dispose: dispose
};
}
export { WebGLRenderStates };