import { PBRMaterial } from "@babylonjs/core/Materials/PBR/pbrMaterial.js"; import type { Material } from "@babylonjs/core/Materials/material.js"; import type { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh.js"; import type { Scene } from "@babylonjs/core/scene.js"; import { type MaterialExecutionPolicy, type MaterialPreparationEvent, type MaterialOverride, type SceneDocumentData, type MaterialSurfaceEffects, type MaterialEffectRuntimeProperty, type GpuProgramPreparationReport } from "@skenora/contracts"; import type { ResourceResolver } from "@skenora/resources"; import { GpuProgramCache } from "./gpu-program-cache.js"; import type { CutoutPassTarget } from "./cutout-pass-controller.js"; /** Owns only explicitly authored instances; imported resources are borrowed. */ export declare class OwnedMaterialController { #private; constructor(scene: Scene, resources: ResourceResolver, policy?: MaterialExecutionPolicy, onPreparation?: (event: MaterialPreparationEvent) => void, programCache?: GpuProgramCache, onGpuProgramPreparation?: (event: GpuProgramPreparationReport) => void, getCutoutPassTargets?: () => readonly CutoutPassTarget[]); /** Null means legacy/unknown; an empty array means an unbound owned definition. */ get(materialId: string): readonly PBRMaterial[] | null; captureEffects(material: PBRMaterial): MaterialSurfaceEffects | undefined; setEffectProperty(materialId: string, property: MaterialEffectRuntimeProperty, value: unknown): void; /** Restore animated fields from the current document, including creation defaults. */ restoreAnimationValues(materialId: string, definition: Readonly): void; prepareProgramParameter(materialId: string, parameter: string, value: unknown): () => void; prepareEffectProperty(materialId: string, property: MaterialEffectRuntimeProperty, value: unknown): () => void; readOriginal: (mesh: AbstractMesh) => Material | null; apply(document: Readonly, isCurrent: () => boolean): Promise; dispose(): void; } //# sourceMappingURL=owned-material-controller.d.ts.map