File size: 1,038 Bytes
5f32ba4
3b7903d
5f32ba4
 
3b7903d
 
 
 
 
 
 
 
 
 
 
1b5e137
3b7903d
 
 
 
 
 
1b5e137
 
 
 
 
3b7903d
1b5e137
cc654e9
 
 
 
3b7903d
 
5f32ba4
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import type { Scene } from "../core/Scene";

class Loader {
    static async LoadAsync(url: string, scene: Scene, onProgress?: (progress: number) => void): Promise<void> {
        const req = await fetch(url, {
            mode: "cors",
            credentials: "omit",
        });

        if (req.status != 200) {
            throw new Error(req.status + " Unable to load " + req.url);
        }

        const reader = req.body!.getReader();
        const contentLength = parseInt(req.headers.get("content-length") as string);
        const data = new Uint8Array(contentLength);

        let bytesRead = 0;

        while (true) {
            const { done, value } = await reader.read();
            if (done) break;

            data.set(value, bytesRead);
            bytesRead += value.length;

            onProgress?.(bytesRead / contentLength);
        }

        const rowLength = 3 * 4 + 3 * 4 + 4 + 4;
        const vertexCount = data.length / rowLength;

        scene.setData(data, vertexCount);
    }
}

export { Loader };