import { Geometry } from "./Geometry";
import { type CollectedLight } from "./LightCollector";
import { Material } from "./Material";
import { MaterialInstance } from "./MaterialInstance";
import { type MorphTargetDelta } from "./MorphTarget";
import { BaseRenderPass, type RenderPassContext } from "./RenderPass";
import { type ShaderLibrary } from "./ShaderLibrary";
import { type ShadowFilterKernel } from "./ShadowMap";
import { TextureBinding } from "./TextureBinding";
export interface RenderItem {
    readonly geometry: Geometry;
    readonly material?: RenderMaterial;
    readonly label?: string;
    readonly drawRange?: RenderItemDrawRange;
    readonly includeInAutoFrame?: boolean;
    readonly modelMatrix?: Float32Array | readonly number[];
    readonly normalMatrix?: Float32Array | readonly number[];
    readonly modelViewProjectionMatrix?: Float32Array | readonly number[];
    readonly skinning?: SkinningPaletteBinding;
    readonly morphTargets?: readonly MorphTargetDelta[];
    readonly morphWeights?: readonly number[];
    readonly instanceTransforms?: Float32Array | readonly number[];
    readonly instanceColors?: Float32Array | readonly number[];
    readonly instanceAttributes?: readonly RenderItemInstanceAttribute[];
}
export interface RenderItemDrawRange {
    readonly start: number;
    readonly count: number;
}
export interface RenderItemInstanceAttribute {
    readonly shaderName: string;
    readonly components: 1 | 2 | 3 | 4;
    readonly data: Float32Array | readonly number[];
    readonly normalized?: boolean;
    readonly divisor?: number;
}
export type RenderMaterial = Material | MaterialInstance;
export interface SkinningPaletteBinding {
    readonly jointCount: number;
    readonly matrices: Float32Array;
}
export declare const MAX_GPU_MORPH_VERTICES = 64;
export declare const MAX_GPU_MORPH_TARGETS = 4;
export declare const MAX_GPU_INSTANCES = 64;
export interface ForwardPassOptions {
    readonly items: readonly RenderItem[];
    readonly lights?: readonly CollectedLight[];
    readonly environmentLighting?: EnvironmentLightingOptions;
    readonly environmentFog?: ForwardEnvironmentFogOptions | false;
    readonly inputColorResource?: string;
    readonly shadowMap?: ForwardShadowMapOptions;
    readonly cameraPosition?: readonly [number, number, number];
    readonly outputColorSpace?: "linear" | "srgb";
    readonly shaderLibrary?: ShaderLibrary;
}
export interface EnvironmentLightingOptions {
    readonly color: readonly [number, number, number];
    readonly intensity: number;
    readonly proceduralMap?: ProceduralEnvironmentMapLightingOptions;
    readonly environmentMapTexture?: TextureBinding;
    readonly environmentCubeMapTexture?: TextureBinding;
    readonly environmentMapIntensity?: number;
    readonly environmentMapSpecularIntensity?: number;
    readonly environmentMapRotation?: number;
    readonly environmentMapMipCount?: number;
    readonly environmentMapEncoding?: "srgb" | "rgbe" | "linear";
    readonly environmentBrdfLutTexture?: TextureBinding;
}
export interface ProceduralEnvironmentMapLightingOptions {
    readonly skyColor: readonly [number, number, number];
    readonly horizonColor: readonly [number, number, number];
    readonly groundColor: readonly [number, number, number];
    readonly specularColor: readonly [number, number, number];
    readonly intensity: number;
    readonly specularIntensity: number;
}
export type ForwardEnvironmentFogMode = "linear" | "exponential" | "exponential-squared";
export interface ForwardEnvironmentFogOptions {
    readonly mode: ForwardEnvironmentFogMode;
    readonly color: readonly [number, number, number];
    readonly near: number;
    readonly far: number;
    readonly density: number;
    readonly heightFalloff?: number;
    readonly heightReference?: number;
    readonly maxOpacity?: number;
}
export interface ForwardShadowMapOptions {
    readonly texture: TextureBinding;
    readonly lightMatrix: Float32Array | readonly number[];
    readonly strength?: number;
    readonly bias?: number;
    readonly slopeBias?: number;
    readonly texelSize?: readonly [number, number];
    readonly filterKernel?: ShadowFilterKernel;
    readonly pointLight?: ForwardPointShadowMapOptions;
}
export interface ForwardPointShadowMapOptions {
    readonly texture: TextureBinding;
    readonly lightPosition: readonly [number, number, number];
    readonly range: number;
    readonly faceMatrices: Float32Array | readonly number[];
    readonly faceRects: Float32Array | readonly number[];
    readonly strength?: number;
    readonly bias?: number;
    readonly slopeBias?: number;
    readonly texelSize?: readonly [number, number];
    readonly filterKernel?: ShadowFilterKernel;
}
export declare class ForwardPass extends BaseRenderPass {
    private readonly options;
    private static readonly shaderCaches;
    private readonly materialBinding;
    private readonly shaderLibrary;
    private readonly skinningPaletteUploads;
    constructor(options: ForwardPassOptions);
    execute(context: RenderPassContext): void;
    private drawItem;
    private applyLightUniforms;
    private getShader;
}
//# sourceMappingURL=ForwardPass.d.ts.map