/** * ShadowManager — owns all shadow pass state and orchestrates multi-shadow * rendering for up to 2 dir, 2 point, and 4 spot shadow casters. */ import type { Scene } from '@certe/atmos-core'; import type { Mat4Type } from '@certe/atmos-math'; import type { SceneLightData } from './light.js'; import { DirectionalLight } from './directional-light.js'; export interface ShadowManagerResult { bindGroup: GPUBindGroup; } export declare class ShadowManager { private readonly _device; private readonly _objectBGL; private readonly _shadowBGL; private _dirPairs; private _pointPasses; private _spotPasses; private _uniformBuffer; private readonly _uniformData; private _bindGroup; private _dummy; private _dirty; private readonly _dirSlotLights; private readonly _pointSlotLights; private readonly _spotSlotLights; private readonly _dirVP0; private readonly _dirVP1; constructor(device: GPUDevice, objectBGL: GPUBindGroupLayout, shadowBGL: GPUBindGroupLayout); update(encoder: GPUCommandEncoder, scene: Scene, cameraEye: Float32Array, sceneLights: SceneLightData, extraDraw: ((pass: GPURenderPassEncoder) => void) | undefined, computeCascadeVP: (out: Mat4Type, light: DirectionalLight, eye: Float32Array, size: number, dist: number) => void): ShadowManagerResult; /** Select up to MAX_DIR_SHADOW_SLOTS dir lights by highest intensity. */ private _selectDirLights; private _selectClosest; private _syncSlot; private _syncDirPasses; private _syncPointPasses; private _syncSpotPasses; private _executeDirPasses; private _executePointPasses; private _executeSpotPasses; private _writeUniforms; private _writeSlotMap; private _buildBindGroup; destroy(): void; } //# sourceMappingURL=shadow-manager.d.ts.map