Spaces:
Running
Running
| import type { Scene } from "../core/Scene"; | |
| import { Splat } from "../splats/Splat"; | |
| import { SplatData } from "../splats/SplatData"; | |
| import { initiateFetchRequest, loadRequestDataIntoBuffer } from "../utils/LoaderUtils"; | |
| class Loader { | |
| static async LoadAsync( | |
| url: string, | |
| scene: Scene, | |
| onProgress?: (progress: number) => void, | |
| useCache: boolean = false, | |
| ): Promise<Splat> { | |
| const res: Response = await initiateFetchRequest(url, useCache); | |
| const buffer = await loadRequestDataIntoBuffer(res, onProgress); | |
| return this.LoadFromArrayBuffer(buffer, scene); | |
| } | |
| static async LoadFromFileAsync(file: File, scene: Scene, onProgress?: (progress: number) => void): Promise<Splat> { | |
| const reader = new FileReader(); | |
| let splat = new Splat(); | |
| reader.onload = (e) => { | |
| splat = this.LoadFromArrayBuffer(e.target!.result as ArrayBuffer, scene); | |
| }; | |
| reader.onprogress = (e) => { | |
| onProgress?.(e.loaded / e.total); | |
| }; | |
| reader.readAsArrayBuffer(file); | |
| await new Promise<void>((resolve) => { | |
| reader.onloadend = () => { | |
| resolve(); | |
| }; | |
| }); | |
| return splat; | |
| } | |
| static LoadFromArrayBuffer(arrayBuffer: ArrayBufferLike, scene: Scene): Splat { | |
| const buffer = new Uint8Array(arrayBuffer); | |
| const data = SplatData.Deserialize(buffer); | |
| const splat = new Splat(data); | |
| scene.addObject(splat); | |
| return splat; | |
| } | |
| } | |
| export { Loader }; | |