/// export class LumaSplatsLoader { /** * @param {string | { * captureUrl?: string | null, * src?: string | null, * uuid?: string | null, * artifacts?: object | null, * fetchOptions?: RequestInit, // optional fetch request options * }} sourceOptions - either the uuid of the capture or the capture artifacts * @param {boolean} streaming - if true, the loader will download data */ constructor(sourceOptions: string | { captureUrl?: string | null; src?: string | null; uuid?: string | null; artifacts?: object | null; fetchOptions?: RequestInit; }, streaming?: boolean); dataset: { captureUrl?: string | null | undefined; src?: string | null | undefined; uuid?: string | null | undefined; artifacts?: object | null | undefined; fetchOptions?: RequestInit | undefined; }; streaming: boolean; fetchOptions: RequestInit | undefined; metaVersion: number; numSplats: number; totalSplats: number; totalBytes: number; currentBytes: number; initialPose: Float32Array; scaleToWorld: number; /** @type {Array} */ animFrames: Array; animFps: number; cpuPoints: Uint16Array; sceneCenter: number[]; radiusList: Float32Array | null; radiusStep: number; minRadius: number; loadedRadius: number; isComplete: boolean; antialias: number; haveSH: boolean; haveSemantics: boolean; haveSkybox: boolean; skybox: { type: string; distance: number; origin: number[]; }; events: { /** @type {EventEmitter} */ partialUpdate: EventEmitter; /** @type {EventEmitter<{bytesReady: number, totalBytes: number, progress: number}>} */ progress: EventEmitter<{ bytesReady: number; totalBytes: number; progress: number; }>; /** @type {EventEmitter} */ showProgress: EventEmitter; /** @type {EventEmitter} */ hideProgress: EventEmitter; /** @type {EventEmitter>} */ updateGauss1Texture: EventEmitter>; /** @type {EventEmitter>} */ updateGauss2Texture: EventEmitter>; /** @type {EventEmitter>} */ updateSHTexture: EventEmitter>; /** @type {EventEmitter>} */ updateSkyboxTexture: EventEmitter>; /** @type {EventEmitter<{start: number, end: number, cpuPoints: Uint16Array}>} */ updateCpuPoints: EventEmitter<{ start: number; end: number; cpuPoints: Uint16Array; }>; /** @type {EventEmitter} */ complete: EventEmitter; }; blocksDowloaded: number; gauss1Data: Uint32Array | null; gauss2Data: Uint32Array | null; gauss1Count: number; gauss2Count: number; gauss1Height: number; gauss2Height: number; cpuPtsCount: number; bytesReady: number; /** @type {Promise<{ artifacts: Awaited< ReturnType > } & Awaited> & Awaited> >} */ metaReady: Promise<{ artifacts: Awaited>; } & Awaited> & Awaited>>; /** @type {Promise} */ allReady: Promise; /** @type {Promise>} */ coreBinReady: Promise>; /** @type {Promise>} */ gauss1Ready: Promise>; /** @type {Promise>} */ gauss2Ready: Promise>; /** @type {Promise | null>} */ shReady: Promise | null>; /** @type {Promise} */ semanticsReady: Promise; /** @type {Promise> | null>} */ skyboxReady: Promise> | null>; sceneRadius(): number; /** * @param {number} byteLength */ addProgress(byteLength: number): void; showProgress(): void; hideProgress(): void; /** * Convert artifact array to object. * @param {Array<{url: string, type: string}>} renderRunArray * @returns {Object} */ convertArtifactArray(renderRunArray: Array<{ url: string; type: string; }>): Object; /** * @returns {Promise<{ * gs_web_webmeta?: string, * gs_web_meta?: string, * gs_web_gauss1?: string, * gs_web_gauss2?: string, * gs_web_sh?: string, * gs_compressed_meta?: string, * gs_compressed?: string, * with_background_gs_camera_params?: string, * semantics?: string, * skybox?: string, * skybox_meta?: string, * }>} */ getArtifacts(): Promise<{ gs_web_webmeta?: string; gs_web_meta?: string; gs_web_gauss1?: string; gs_web_gauss2?: string; gs_web_sh?: string; gs_compressed_meta?: string; gs_compressed?: string; with_background_gs_camera_params?: string; semantics?: string; skybox?: string; skybox_meta?: string; }>; /** * Downloads all metadata files, then all data files. */ downloadAllFiles(): void; coreReady: Promise | undefined; /** * Downloads a file, returns a Uint8Array with the content upon completion. * * 'partialCallback', if defined, gets called with partial buffer every time * at least 'updateBytes' is received. * * @param {string} url * @param {(function(Uint8Array, boolean): void) | undefined} partialCallback * @param {number} updateBytes * @returns {Promise} */ fetchFile(url: string, partialCallback?: ((arg0: Uint8Array, arg1: boolean) => void) | undefined, updateBytes?: number): Promise; /** * Interprets 'data' as JSON text, parses it into object. * @param {Uint8Array} data * @returns {Object} */ parseJSON(data: Uint8Array): Object; /** @param {string} url */ downloadMeta(url: string): Promise<{ metaVersion: number; totalSplats: number; totalBytes: number; sceneCenter: number[]; radiusList: Float32Array; radiusStep: number; minRadius: number; antialias: number; haveSH: boolean; scaleToWorld: number; initialPose: Float32Array; }>; /** * Download and parse the 'gs_web_meta' artifact, used in v1 format to get scale_to_world and initial pose. * @param {string} url */ downloadMeta2(url: string): {}; /** * Download and parse the 'with_background_gs_camera_params', to get camera animation frames. * @param {string} url */ downloadMeta3(url: string): Promise; /** * @param {Uint32Array} data * @param {number} texelSize */ partialSizes(data: Uint32Array, texelSize: number): number[]; /** @param {string} url */ downloadCoreBin(url: string): Promise; /** * Dispatch decoded texture blocks for GPU upload. * @param {number} size - number of decoded Gaussians * @param {Uint32Array} tex1 - first (2-channel) texture data * @param {Uint32Array} tex2 - second (4-channel) texture data * @param {Uint16Array} xyz - splat centers as 3x half-floats */ updateCoreBlock(size: number, tex1: Uint32Array, tex2: Uint32Array, xyz: Uint16Array): void; /** @param {string} url */ downloadGauss1(url: string): Promise>; /** @param {string} url */ downloadGauss2(url: string): Promise>; partialUpdate(): void; /** @param {string} url */ downloadSHTexture(url: string): Promise>; /** * @param {{ * skybox: string, * skybox_meta: string, * }} artifacts */ downloadSkybox(artifacts: { skybox: string; skybox_meta: string; }): Promise[]>; /** * @param {Uint8Array} data * @param {number} width * @param {number} count * @returns {void} */ extractCpuPoints(data: Uint8Array, width: number, count: number): void; /** * Start the decoding worker. */ initWorker(): void; worker: DecoderWorker | undefined; /** * Send one core.bin block for decoding * @param {Uint8Array} block * @param {number} maxSize - max number of gaussians in the encoded block * @param {number} seed - obfuscation seed */ decodeBlock(block: Uint8Array, maxSize: number, seed: number): void; /** * Receives decoded blocks, and worker events. * @param {MessageEvent} evt */ onWorkerMessage(evt: MessageEvent): void; } export type LoaderTexturePayload = { target: number; width: number; height: number; channels: number; currentHeight: number; data: T; internalFormat: number; format: number; type: number; unpackAlignment: number; minMagFilter: number; complete: boolean; }; import { EventEmitter } from './util/EventEmitter.js'; import DecoderWorker from 'inline-worker!./decoder.worker.js';