export declare const MODEL_DECODE_PROTOCOL_VERSION: 3; export interface SerializedModelDecodeError { message: string; name?: string; stack?: string; } export interface ModelDecodeRequestOptions { persistent?: boolean; headers?: Record; credentials?: RequestCredentials; /** Original absolute model URL used to resolve relative glTF dependencies. */ resourceBaseUrl?: string; } export interface GltfBufferDefinition { byteLength: number; uri?: string; name?: string; } export interface GltfBufferViewDefinition { buffer: number; byteOffset?: number; byteLength: number; byteStride?: number; target?: number; name?: string; extensions?: Record; } export interface GltfAccessorDefinition { bufferView?: number; byteOffset?: number; componentType: number; normalized?: boolean; count: number; type: string; min?: number[]; max?: number[]; sparse?: unknown; name?: string; } export interface GltfTextureInfo { index: number; texCoord?: number; scale?: number; strength?: number; extensions?: Record; } export interface GltfMaterialDefinition { name?: string; pbrMetallicRoughness?: { baseColorFactor?: number[]; baseColorTexture?: GltfTextureInfo; metallicFactor?: number; roughnessFactor?: number; metallicRoughnessTexture?: GltfTextureInfo; }; normalTexture?: GltfTextureInfo; occlusionTexture?: GltfTextureInfo; emissiveTexture?: GltfTextureInfo; emissiveFactor?: number[]; alphaMode?: 'OPAQUE' | 'MASK' | 'BLEND'; alphaCutoff?: number; doubleSided?: boolean; extras?: unknown; extensions?: Record; } export interface GltfPrimitiveDefinition { attributes: Record; indices?: number; material?: number; mode?: number; targets?: unknown[]; extensions?: Record; } export interface GltfMeshDefinition { name?: string; primitives: GltfPrimitiveDefinition[]; extras?: unknown; } export interface GltfNodeDefinition { name?: string; mesh?: number; camera?: number; children?: number[]; matrix?: number[]; translation?: number[]; rotation?: number[]; scale?: number[]; weights?: number[]; skin?: number; extras?: unknown; extensions?: Record; } export interface GltfSceneDefinition { name?: string; nodes?: number[]; extras?: unknown; } export interface GltfImageDefinition { name?: string; uri?: string; mimeType?: string; bufferView?: number; } export interface GltfSamplerDefinition { name?: string; magFilter?: number; minFilter?: number; wrapS?: number; wrapT?: number; } export interface GltfTextureDefinition { name?: string; sampler?: number; source?: number; extensions?: Record; } export interface GltfDocument { asset: { version: string; generator?: string; }; scene?: number; scenes?: GltfSceneDefinition[]; nodes?: GltfNodeDefinition[]; meshes?: GltfMeshDefinition[]; accessors?: GltfAccessorDefinition[]; bufferViews?: GltfBufferViewDefinition[]; buffers?: GltfBufferDefinition[]; materials?: GltfMaterialDefinition[]; textures?: GltfTextureDefinition[]; samplers?: GltfSamplerDefinition[]; images?: GltfImageDefinition[]; animations?: unknown[]; skins?: unknown[]; cameras?: unknown[]; extensionsUsed?: string[]; extensionsRequired?: string[]; extensions?: Record; } export interface DecodedGltfModelPacket { protocolVersion: typeof MODEL_DECODE_PROTOCOL_VERSION; kind: 'gltf-static'; url: string; document: GltfDocument; buffers: ArrayBuffer[]; images: ImageBitmap[]; /** Stable content identities used to preserve material batching across models. */ imageKeys: string[]; } /** * Validates the parts of the glTF node graph that would otherwise make * recursive Object3D reconstruction unsafe. glTF nodes form a forest: a node * cannot be repeated under one parent, have multiple parents, or form cycles. */ export declare function validateDecodedGltfNodeGraph(document: GltfDocument): void; export type ModelDecodeWorkerRequest = { type: 'decode'; id: number; url: string; options: ModelDecodeRequestOptions; } | { type: 'cancel'; id: number; } | { type: 'ack'; id: number; } | { type: 'resource-resolved'; id: number; resourceId: number; url?: string; error?: SerializedModelDecodeError; } | { type: 'dispose'; }; export type ModelDecodeWorkerResponse = { type: 'decoded'; id: number; packet: DecodedGltfModelPacket; } | { type: 'unsupported'; id: number; reason: string; } | { type: 'error'; id: number; error: SerializedModelDecodeError; } | { type: 'resolve-resource'; id: number; resourceId: number; url: string; } | { type: 'resource-complete'; id: number; resourceId: number; ok: boolean; error?: SerializedModelDecodeError; } | { type: 'disposed'; }; export declare class UnsupportedModelDecodeError extends Error { name: string; constructor(message: string); }