import type { SplatFileType } from './splatFiles'; import type { SplatMesh } from '@sparkjsdev/spark'; import type * as THREE from 'three'; /** Renderer-wide splat drawing knobs. They live on the one shared `SparkRenderer`. */ export interface SplatRenderSettings { enable2DGS: boolean; preBlurAmount: number; blurAmount: number; /** Reported as the budget in force: Spark's own per-device target until something overrides it. */ lodSplatCount?: number; } export interface SplatAttachment { renderer: THREE.WebGLRenderer; scene: THREE.Object3D; /** Spark sorts a frame behind, so it asks for the redraw that shows the new order. */ onDirty?: () => void; } export interface SplatLoadOptions { onProgress?: (percent: number) => void; fileType?: SplatFileType; } export interface SplatEngine { attach(attachment: SplatAttachment): Promise; load(url: string, options?: SplatLoadOptions): Promise; configure(patch: Partial): void; settings(): SplatRenderSettings | null; /** Cuts every splat, loaded or not, with the scene's clipping planes. */ setClippingPlanes(planes: readonly THREE.Plane[]): void; /** Every splat draws through this one material, which is what a render pass excludes. */ material(): THREE.Material | null; dispose(): void; } /** * Spark behind the framework-free `SplatEngine` port. The only module in the * codebase that imports it, so every other layer stays testable without WebGL. */ export declare function createSparkEngine(): SplatEngine; //# sourceMappingURL=splatLoader.d.ts.map