import { Geometry, Material, Texture, type CameraFrameBounds, type CameraFrameViewport, type CameraLike, type CollectedLight, type EnvironmentLightingOptions, type ForwardShadowMapOptions, type PerspectiveCameraFrame, type PerspectiveCameraFrameOptions, type MorphTargetDelta, type RenderItem, type RendererCameraPolicy, type RendererInput, type RendererPostProcessOptions, type RendererShadowOptions, type RenderSource, type RenderState, type TextureFormat, type TextureMipLevelDescriptor, type TexturePixelData, type TexturedPBRTextureSlot } from "@aura3d/rendering";
import { type GLTFAsset, type GLTFImageAsset, type GLTFMaterialVariantMappingAsset, type GLTFSceneCreateOptions } from "./GLTFLoader";
import { type KTX2BasisTargetFormat, type KTX2BasisTextureTranscoderOptions } from "./KTX2BasisTextureTranscoder";
export interface DecodedGLTFImage {
    readonly width: number;
    readonly height: number;
    readonly format?: TextureFormat;
    readonly colorSpace?: "srgb" | "linear";
    readonly data?: TexturePixelData;
    readonly mipLevels?: readonly TextureMipLevelDescriptor[];
    readonly source?: TexImageSource;
    readonly fallbackData?: Uint8Array | Uint8ClampedArray;
    readonly fallbackMipLevels?: readonly TextureMipLevelDescriptor[];
}
export type GLTFImageDecoder = (image: GLTFImageAsset, imageIndex: number, asset: GLTFAsset) => DecodedGLTFImage | Promise<DecodedGLTFImage>;
export interface GLTFRenderResourceOptions {
    readonly imageDecoder?: GLTFImageDecoder;
    readonly ktx2BasisTargetFormat?: KTX2BasisTargetFormat;
    readonly ktx2BasisTranscoderOptions?: KTX2BasisTextureTranscoderOptions;
    readonly materialVariant?: GLTFSceneCreateOptions["materialVariant"];
    readonly sceneIndex?: GLTFSceneCreateOptions["sceneIndex"];
    readonly sceneName?: GLTFSceneCreateOptions["sceneName"];
    readonly materialRenderStateOverrides?: readonly GLTFMaterialRenderStateOverride[];
}
export interface GLTFMaterialRenderStateOverride {
    readonly materialName: string | RegExp;
    readonly renderState: Partial<RenderState>;
    readonly reason?: string;
}
export interface GLTFRenderResources {
    readonly scene: ReturnType<GLTFAsset["createScene"]>;
    readonly geometryLibrary: ReadonlyMap<string, Geometry>;
    readonly materialLibrary: ReadonlyMap<string, Material>;
    readonly renderableBindings: readonly GLTFRenderableBinding[];
    readonly materialFidelityDiagnostics: readonly GLTFRenderResourceMaterialFidelityDiagnostic[];
    readonly morphTargetLibrary: ReadonlyMap<string, readonly MorphTargetDelta[]>;
    readonly textureLibrary: ReadonlyMap<string, Texture>;
    readonly bounds: CameraFrameBounds;
    collectMaterialOverrideTargets(query?: GLTFMaterialOverrideQuery): readonly GLTFMaterialOverrideTarget[];
    createCameraFrame(viewport: CameraFrameViewport, options?: PerspectiveCameraFrameOptions): PerspectiveCameraFrame;
    toRenderSource(options?: GLTFRenderSourceOptions): RenderSource;
    toRendererInput(viewport: CameraFrameViewport, options?: GLTFRendererInputOptions): GLTFRendererInput;
    dispose(): void;
}
export interface GLTFRenderableBinding {
    readonly nodeName: string;
    readonly geometryKey: string;
    readonly materialKey: string;
    readonly sourceMaterialName: string;
    readonly sourceMaterialIndex?: number;
    readonly sourceMeshIndex?: number;
    readonly primitiveIndex?: number;
    readonly materialVariants: readonly GLTFMaterialVariantMappingAsset[];
    readonly skinned: boolean;
    readonly instanced: boolean;
}
export type GLTFRenderResourceMaterialFidelityIssue = "unsupported-texcoord-set" | "generated-tangent-uv-mismatch";
export interface GLTFRenderResourceMaterialFidelityDiagnostic {
    readonly issue: GLTFRenderResourceMaterialFidelityIssue;
    readonly slot: TexturedPBRTextureSlot;
    readonly texCoord: number;
    readonly renderedTexCoord: number;
    readonly nodeName: string;
    readonly geometryKey: string;
    readonly materialKey: string;
    readonly sourceMaterialName: string;
    readonly sourceMaterialIndex?: number;
    readonly sourceMeshIndex?: number;
    readonly primitiveIndex?: number;
    readonly detail: string;
}
export interface GLTFMaterialOverrideQuery {
    readonly nodeName?: string | RegExp;
    readonly sourceMaterialName?: string | RegExp;
    readonly materialKey?: string | RegExp;
    readonly variant?: string;
    readonly uniqueMaterials?: boolean;
}
export interface GLTFMaterialOverrideTarget extends GLTFRenderableBinding {
    readonly material: Material;
}
export interface GLTFRendererInput extends RendererInput {
    readonly source: RenderSource;
    readonly camera: CameraLike;
    readonly frame: PerspectiveCameraFrame;
    readonly bounds: CameraFrameBounds;
}
export interface GLTFRendererInputOptions extends GLTFRenderSourceOptions {
    readonly frame?: PerspectiveCameraFrameOptions;
}
export type GLTFRenderQualityPreset = "default" | "studio-preview" | "hdr-studio-preview";
export interface GLTFRenderSourceOptions {
    readonly qualityPreset?: GLTFRenderQualityPreset;
    readonly environmentLighting?: EnvironmentLightingOptions | false;
    readonly shadowMap?: ForwardShadowMapOptions;
    readonly shadow?: RendererShadowOptions | boolean;
    readonly collectedLights?: Iterable<CollectedLight>;
    readonly postprocess?: RendererPostProcessOptions | boolean;
    readonly renderItems?: Iterable<RenderItem>;
    readonly cameraPolicy?: RendererCameraPolicy;
    readonly cameraFrameBounds?: CameraFrameBounds;
    readonly cameraFrameOptions?: PerspectiveCameraFrameOptions;
    readonly cameraPosition?: readonly [number, number, number];
    readonly frustumCulling?: boolean;
}
export interface GLTFRenderResourceDiagnosticsOptions {
    readonly label?: string;
    readonly suspectStaticNodePattern?: RegExp;
}
export interface GLTFRenderResourceDiagnostics {
    readonly label: string;
    readonly drawItems: number;
    readonly skinnedDrawItems: number;
    readonly texturedDrawItems: number;
    readonly baseColorTextureDrawItems: number;
    readonly colorBearingTextureDrawItems: number;
    readonly surfaceDetailTextureDrawItems: number;
    readonly effectiveTextureBackedDrawItems: number;
    readonly unsupportedTexCoordDrawItems: number;
    readonly generatedTangentUvMismatchDrawItems: number;
    readonly texturedSkinnedDrawItems: number;
    readonly untexturedSkinnedDrawItems: number;
    readonly fallbackWhiteDrawItems: number;
    readonly missingGeometryDrawItems: number;
    readonly missingMaterialDrawItems: number;
    readonly materialCount: number;
    readonly textureCount: number;
    readonly textureBackedMaterialNames: readonly string[];
    readonly textureSlotDiagnostics: readonly GLTFRenderResourceTextureSlotDiagnostic[];
    readonly textureContributionDiagnostics: readonly GLTFRenderResourceTextureContributionDiagnostic[];
    readonly suppressedTextureSlotDiagnostics: readonly GLTFRenderResourceTextureContributionDiagnostic[];
    readonly materialFidelityDiagnostics: readonly GLTFRenderResourceMaterialFidelityDiagnostic[];
    readonly shaderActiveTextureSlotDiagnostics: readonly GLTFRenderResourceTextureSlotDiagnostic[];
    readonly shaderInactiveTextureSlotDiagnostics: readonly GLTFRenderResourceTextureSlotDiagnostic[];
    readonly fallbackWhiteMaterialNames: readonly string[];
    readonly skinnedLabels: readonly string[];
    readonly untexturedSkinnedLabels: readonly string[];
    readonly fallbackWhiteLabels: readonly string[];
    readonly missingGeometryLabels: readonly string[];
    readonly missingMaterialLabels: readonly string[];
    readonly suspectStaticLabels: readonly string[];
}
export interface GLTFRenderResourceTextureSlotDiagnostic {
    readonly slot: TexturedPBRTextureSlot;
    readonly drawItems: number;
    readonly materialNames: readonly string[];
    readonly labels: readonly string[];
}
export type GLTFRenderResourceTextureContribution = "color-bearing" | "surface-detail" | "suppressed";
export interface GLTFRenderResourceTextureContributionDiagnostic extends GLTFRenderResourceTextureSlotDiagnostic {
    readonly contribution: GLTFRenderResourceTextureContribution;
}
export declare const DEFAULT_GLTF_RENDER_ENVIRONMENT_LIGHTING: EnvironmentLightingOptions;
export declare const DEFAULT_GLTF_STUDIO_PREVIEW_ENVIRONMENT_LIGHTING: EnvironmentLightingOptions;
export declare function createDefaultGLTFHdrStudioPreviewEnvironmentLighting(): EnvironmentLightingOptions;
export declare const DEFAULT_GLTF_STUDIO_PREVIEW_POSTPROCESS: RendererPostProcessOptions;
export declare const DEFAULT_GLTF_HDR_STUDIO_PREVIEW_POSTPROCESS: RendererPostProcessOptions;
export declare const DEFAULT_GLTF_STUDIO_PREVIEW_FRAME: PerspectiveCameraFrameOptions;
export declare function createGLTFRenderResources(asset: GLTFAsset, options?: GLTFRenderResourceOptions): Promise<GLTFRenderResources>;
export declare function createGLTFRenderSource(resources: Pick<GLTFRenderResources, "scene" | "geometryLibrary" | "materialLibrary" | "morphTargetLibrary" | "bounds">, options?: GLTFRenderSourceOptions): RenderSource;
export declare function createGLTFRenderResourceDiagnostics(resources: Pick<GLTFRenderResources, "scene" | "geometryLibrary" | "materialLibrary"> & Partial<Pick<GLTFRenderResources, "textureLibrary" | "materialFidelityDiagnostics">>, options?: GLTFRenderResourceDiagnosticsOptions): GLTFRenderResourceDiagnostics;
//# sourceMappingURL=GLTFRenderResources.d.ts.map