MCPcopy Create free account
hub / github.com/beutton/browser-flight-simulator / load

Method load

packages/core/src/Texture3DLoader.ts:10–80  ·  view source on GitHub ↗
(
    url: string,
    onLoad: (data: Data3DTexture) => void,
    onProgress?: (event: ProgressEvent) => void,
    onError?: (error: unknown) => void
  )

Source from the content-addressed store, hash-verified

8
9export class Texture3DLoader extends Loader<Data3DTexture> {
10 override load(
11 url: string,
12 onLoad: (data: Data3DTexture) => void,
13 onProgress?: (event: ProgressEvent) => void,
14 onError?: (error: unknown) => void
15 ): void {
16 const loader = new ImageLoader(this.manager)
17 loader.setRequestHeader(this.requestHeader)
18 loader.setPath(this.path)
19 loader.setWithCredentials(this.withCredentials)
20 loader.load(
21 url,
22 image => {
23 const canvas = document.createElement('canvas')
24 const context = canvas.getContext('2d')
25 if (context == null) {
26 onError?.(new Error('Could not obtain canvas context.'))
27 return
28 }
29
30 // Assume cubic 3D texture.
31 const { width, height } = image
32 const size = Math.min(width, height)
33 canvas.width = width
34 canvas.height = height
35 context.drawImage(image, 0, 0)
36 const imageData = context.getImageData(0, 0, width, height).data
37 let data: Uint8Array
38
39 if (width < height) {
40 data = new Uint8Array(imageData.buffer)
41 } else {
42 data = new Uint8Array(imageData.length)
43 const sizeSq = size ** 2
44 for (let z = 0; z < size; ++z) {
45 for (let y = 0; y < size; ++y) {
46 for (let x = 0; x < size; ++x) {
47 const src = (x + z * size + y * sizeSq) * 4
48 const dest = (x + y * size + z * sizeSq) * 4
49 data[dest + 0] = imageData[src + 0]
50 data[dest + 1] = imageData[src + 1]
51 data[dest + 2] = imageData[src + 2]
52 data[dest + 3] = imageData[src + 3]
53 }
54 }
55 }
56 }
57
58 const texture = new Data3DTexture(data, size, size, size)
59 texture.minFilter = LinearFilter
60 texture.magFilter = LinearFilter
61 texture.wrapS = RepeatWrapping
62 texture.wrapT = RepeatWrapping
63 texture.wrapR = RepeatWrapping
64 texture.needsUpdate = true
65
66 try {
67 onLoad(texture)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected