@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
47 lines (44 loc) • 1.37 kB
text/typescript
import {IUniform, DirectionalLight} from 'three';
import {
PenumbraUniformElement,
updateUserDataPenumbra,
UniformsUpdateFunction,
ShadowUniformElement,
updateUserDataShadowBias,
} from './_Base';
export interface DirectionalLightRayMarchingUniformElement extends PenumbraUniformElement, ShadowUniformElement {}
interface DirectionalLightRayMarchingUniforms extends Array<DirectionalLightRayMarchingUniformElement> {
needsUpdate?: boolean;
}
export interface DirectionalLightRayMarchingUniform extends IUniform {
value: DirectionalLightRayMarchingUniforms;
}
export function _createDirectionalLightUniform(): DirectionalLightRayMarchingUniformElement {
return {
penumbra: 0,
shadowBiasAngle: 0,
shadowBiasDistance: 0,
};
}
let directionalLightIndex = 0;
export const _updateUniformsWithDirectionalLight: UniformsUpdateFunction<DirectionalLight> = (
object: DirectionalLight,
directionalLightsRayMarching: DirectionalLightRayMarchingUniform
) => {
updateUserDataPenumbra(
object as DirectionalLight,
directionalLightsRayMarching,
directionalLightIndex,
_createDirectionalLightUniform
);
updateUserDataShadowBias(
object as DirectionalLight,
directionalLightsRayMarching,
directionalLightIndex,
_createDirectionalLightUniform
);
directionalLightIndex++;
};
export function _resetDirectionalLightIndex() {
directionalLightIndex = 0;
}