(url)
| 64 | |
| 65 | |
| 66 | async function load(url) { |
| 67 | let pointer = null; |
| 68 | |
| 69 | const instance = await SpzSingleton.getInstance(); |
| 70 | console.log('spz.js: load(): Wasm instance loaded:', instance); |
| 71 | |
| 72 | try { |
| 73 | // download byte array from url created in main thread |
| 74 | const response = await fetch(url); |
| 75 | if (!response.ok) { |
| 76 | throw new Error(`spz.js: load(): Failed to fetch data: ${response.status}`); |
| 77 | } |
| 78 | URL.revokeObjectURL(url); |
| 79 | const buffer = await response.arrayBuffer(); |
| 80 | const spzData = new Uint8Array(buffer); |
| 81 | console.log('spz.js: load(): spzData.length=', spzData.length); |
| 82 | |
| 83 | // let wasm allocate memory for spzData |
| 84 | pointer = instance._malloc(Uint8Array.BYTES_PER_ELEMENT * spzData.length); |
| 85 | if (pointer === null) { |
| 86 | throw new Error("spz.js: load(): couldn't allocate memory"); |
| 87 | } |
| 88 | instance.HEAPU8.set(spzData, pointer / Uint8Array.BYTES_PER_ELEMENT); |
| 89 | |
| 90 | // generate raw gaussian cloud from spzData |
| 91 | const rawGsCloud = instance.load_spz(pointer, spzData.length); |
| 92 | console.log('spz.js: load(): rawGsCloud.numPoints=', rawGsCloud.numPoints); |
| 93 | //console.log('spz.js: load(): rawGsCloud.shDegree=', rawGsCloud.shDegree); |
| 94 | //console.log('spz.js: load(): rawGsCloud.antialiased=', rawGsCloud.antialiased); |
| 95 | |
| 96 | let options = null; |
| 97 | const gaussianCloud = createGaussianCloudFromRaw(instance, rawGsCloud, options); |
| 98 | disposeRawGSCloud(instance, rawGsCloud); |
| 99 | console.log('spz.js: load(): gaussianCloud.numPoints=', gaussianCloud.numPoints); |
| 100 | //console.log('spz.js: load(): gaussianCloud.shDegree=', gaussianCloud.shDegree); |
| 101 | //console.log('spz.js: load(): gaussianCloud.antialiased=', gaussianCloud.antialiased); |
| 102 | //console.log('spz.js: load(): gaussianCloud.positions.length=', gaussianCloud.positions.length); |
| 103 | //console.log('spz.js: load(): gaussianCloud.scales.length=', gaussianCloud.scales.length); |
| 104 | //console.log('spz.js: load(): gaussianCloud.rotations.length=', gaussianCloud.rotations.length); |
| 105 | //console.log('spz.js: load(): gaussianCloud.alphas.length=', gaussianCloud.alphas.length); |
| 106 | //console.log('spz.js: load(): gaussianCloud.colors.length=', gaussianCloud.colors.length); |
| 107 | //console.log('spz.js: load(): gaussianCloud.sh.length=', gaussianCloud.sh.length); |
| 108 | |
| 109 | // Using transferable objects to avoid data copies |
| 110 | self.postMessage({ |
| 111 | status: 'loaded', |
| 112 | gaussianCloud: { |
| 113 | numPoints: gaussianCloud.numPoints, |
| 114 | shDegree: gaussianCloud.shDegree, |
| 115 | antialiased: gaussianCloud.antialiased, |
| 116 | positions: gaussianCloud.positions.buffer, |
| 117 | scales: gaussianCloud.scales.buffer, |
| 118 | rotations: gaussianCloud.rotations.buffer, |
| 119 | alphas: gaussianCloud.alphas.buffer, |
| 120 | colors: gaussianCloud.colors.buffer, |
| 121 | sh: gaussianCloud.sh.buffer, |
| 122 | } |
| 123 | }, [ |
no test coverage detected