import { Texture } from "./Texture";
export type ShadowFilterMode = "none" | "pcf";
export type ShadowFilterDistribution = "grid" | "poisson";
export interface ShadowFilterSample {
    readonly x: number;
    readonly y: number;
    readonly weight: number;
}
export interface ShadowFilterKernel {
    readonly mode: ShadowFilterMode;
    readonly distribution: ShadowFilterDistribution;
    readonly radius: number;
    readonly samples: readonly ShadowFilterSample[];
}
export interface ShadowMapOptions {
    readonly size?: number;
    readonly bias?: number;
    readonly filter?: ShadowFilterMode;
    readonly pcfRadius?: number;
    readonly pcfSamples?: number;
    readonly pcfDistribution?: ShadowFilterDistribution;
    readonly label?: string;
}
export interface ShadowAtlasRequest {
    readonly id: string;
    readonly size: number;
    readonly cascadeIndex?: number;
}
export interface ShadowAtlasAllocation extends ShadowAtlasRequest {
    readonly x: number;
    readonly y: number;
    readonly width: number;
    readonly height: number;
}
export interface ShadowAtlasLayout {
    readonly atlasSize: number;
    readonly allocations: readonly ShadowAtlasAllocation[];
    readonly utilization: number;
}
export declare class ShadowMap {
    readonly texture: Texture;
    readonly bias: number;
    readonly filterKernel: ShadowFilterKernel;
    constructor(options?: ShadowMapOptions);
    get size(): number;
    resize(size: number): ShadowMap;
    dispose(): void;
}
export declare function createShadowAtlasLayout(requests: readonly ShadowAtlasRequest[], atlasSize: number): ShadowAtlasLayout;
export declare function createShadowFilterKernel(options?: Pick<ShadowMapOptions, "filter" | "pcfRadius" | "pcfSamples" | "pcfDistribution">): ShadowFilterKernel;
export declare function createPoissonDiskShadowKernel(sampleCount?: number, radius?: number): readonly ShadowFilterSample[];
export declare function computeShadowDepthBias(options: {
    readonly baseBias: number;
    readonly slopeScale?: number;
    readonly normalDotLight: number;
    readonly texelSize?: number;
}): number;
//# sourceMappingURL=ShadowMap.d.ts.map