import * as THREE from "three"; import { ResourceCache, type ResourceLease } from "./resource-cache.js"; import type { AssetGeometry, AssetMaterial, AssetNode, AssetTextureMap, ReviewAsset3D } from "@alterno-dev/spatial-review-protocol"; export type AssetViewMode = "lit" | "unlit" | "wireframe" | "normals" | "xray"; export type BuiltAsset = { root: THREE.Group; nodes: Map; }; export type ThreeAssetTextureResolverContext = { asset: ReviewAsset3D; material: AssetMaterial; }; /** Resolve an approved texture without granting the SDK implicit network access. * The resolver owns the returned base texture. The runtime clones its source so * every material binding can retain independent sampler transforms. */ export type ThreeAssetTextureResolver = (map: AssetTextureMap, context: ThreeAssetTextureResolverContext) => THREE.Texture | Promise; export type BuildThreeAssetAsyncOptions = { mode?: AssetViewMode; hiddenNodeIds?: Set; resources?: ThreeAssetResourceCache; resolveTexture: ThreeAssetTextureResolver; }; export declare class ThreeAssetResourceCache { readonly geometries: ResourceCache>; readonly materials: ResourceCache>; } export declare function ownThreeAssetResources(object: T, geometry: ResourceLease, materials: ResourceLease[]): T; /** Clone a live hierarchy while retaining its shared GPU resources. */ export declare function cloneThreeAssetObject(source: THREE.Object3D): THREE.Object3D; /** Replace appearance without mutating resources still used by other actors. */ export declare function replaceThreeAssetMaterials(object: THREE.Mesh | THREE.Line | THREE.Points, materials: ResourceLease[]): void; /** Attach explicitly resolved textures to an existing SDK-built hierarchy. * All resolutions complete before its shared material leases are replaced. */ export declare function hydrateThreeAssetTextures(asset: ReviewAsset3D, built: BuiltAsset, resolveTexture: ThreeAssetTextureResolver): Promise; export declare function makeAssetGeometry(geometry: AssetGeometry): THREE.BufferGeometry; export declare function geometryForNode(asset: ReviewAsset3D, node: AssetNode): AssetGeometry | undefined; export declare function buildThreeAsset(asset: ReviewAsset3D, mode?: AssetViewMode, hiddenNodeIds?: Set, resources?: ThreeAssetResourceCache): BuiltAsset; /** Build a hierarchy and hydrate its supported material maps through an * explicit caller-owned resolver. This function never fetches URLs itself. */ export declare function buildThreeAssetAsync(asset: ReviewAsset3D, options: BuildThreeAssetAsyncOptions): Promise; export declare function disposeThreeAsset(root: THREE.Object3D): void; //# sourceMappingURL=runtime.d.ts.map