@jdultra/threedtiles 13.3.5 → 13.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"PointsManager.worker-dH1fNyu8.js","sources":["../src/splats/radix/wasm_sorter.js","../src/splats/PointsManager.js","../src/splats/PointsManager.worker.js"],"sourcesContent":["let wasm;\n\nlet cachedUint32ArrayMemory0 = null;\n\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getUint32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n/**\n * Radix Sort implementation for sorting indices based on distances.\n * Both `indices` and `distances` should have the same length.\n * Returns a new vector of sorted indices in descending order based on distances.\n * @param {Uint32Array} indices\n * @param {Uint32Array} distances\n * @returns {Uint32Array}\n */\nexport function radix_sort_indices(indices, distances) {\n const ptr0 = passArray32ToWasm0(indices, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray32ToWasm0(distances, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.radix_sort_indices(ptr0, len0, ptr1, len1);\n var v3 = getArrayU32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v3;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_0;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedUint32ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('wasm_sorter_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import init, { radix_sort_indices } from './radix/wasm_sorter.js';\r\n\r\nconst buffer = new ArrayBuffer(4);\r\nconst floatView = new Float32Array(buffer);\r\nconst uintView = new Uint32Array(buffer);\r\n\r\nclass PointsManager {\r\n constructor(sortCallback) {\r\n this.points = new Float32Array(4096 * 3);\r\n this.distances = new Uint32Array(4096);\r\n this.pointSets = new Map(); // Map<number, object>\r\n this.numUsed = 0;\r\n this.sortOngoing = false;\r\n this.sortCallback = sortCallback;\r\n this.sortPromise = Promise.resolve();\r\n }\r\n\r\n\r\n\r\n hidePoints(insertionIndex) {\r\n //console.log(\"hide\");\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (pointSet.used) {\r\n pointSet.used = false;\r\n }\r\n }\r\n removePoints(insertionIndex) {\r\n /* console.log(\"remove\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (pointSet.used) {\r\n pointSet.used = false;\r\n }\r\n\r\n this.pointSets.delete(insertionIndex);\r\n\r\n // Determine newLength based on remaining points\r\n let newLength = 0;\r\n for (const [key, aPointSet] of this.pointSets.entries()) {\r\n if (key + aPointSet.length > newLength) {\r\n newLength = key + aPointSet.length;\r\n }\r\n }\r\n\r\n }\r\n showPoints(insertionIndex) {\r\n /* console.log(\"show\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (!pointSet.used) {\r\n pointSet.used = true;\r\n }\r\n\r\n }\r\n\r\n resizeArrays(newLength) {\r\n\r\n if (isNaN(newLength)) {\r\n console.log(\"hit max splats\")\r\n }\r\n //console.log(newLength)\r\n if (newLength > this.points.length) {\r\n newLength = Math.max(this.points.length * 2, newLength);\r\n // Resize points array\r\n const newPoints = new Float32Array(newLength);\r\n newPoints.set(this.points, 0);\r\n this.points = newPoints;\r\n\r\n // Resize distances array\r\n const newNumPoints = Math.floor(newLength / 3);\r\n const newDistances = new Uint32Array(newNumPoints);\r\n newDistances.set(this.distances, 0);\r\n this.distances = newDistances;\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n addBatchesOffsetStrideCount(positions, insertionIndexes, offset, stride, batchSize) {\r\n\r\n const newLength = Math.max(this.points.length, insertionIndexes[insertionIndexes.length - 1] + batchSize * 3);\r\n\r\n this.resizeArrays(newLength);\r\n for (let batchIndex = 0; batchIndex < insertionIndexes.length; batchIndex++) {\r\n\r\n const insertionIndex = insertionIndexes[batchIndex];\r\n const start = Math.floor(insertionIndex / 3);\r\n const batchPositionStartIndex = batchIndex * batchSize * stride;\r\n const batchNumPoints = Math.min((positions.length - batchPositionStartIndex) / stride, batchSize);\r\n\r\n\r\n for (let i = 0; i < batchNumPoints; i++) {\r\n\r\n this.points[insertionIndex + i * 3] = positions[i * stride + offset + batchPositionStartIndex]\r\n this.points[insertionIndex + i * 3 + 1] = positions[i * stride + offset + batchPositionStartIndex + 1]\r\n this.points[insertionIndex + i * 3 + 2] = positions[i * stride + offset + batchPositionStartIndex + 2]\r\n\r\n }\r\n this.pointSets.set(insertionIndex, { length: batchNumPoints * 3, used: false });\r\n\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n getFrustumPlanes(viewProj, margin = 1.2) { \r\n const p = new Float32Array(24);\r\n let i = 0;\r\n \r\n const emit = (a, b, c, d, useMargin) => {\r\n const invLen = 1 / Math.hypot(a, b, c);\r\n p[i++] = a * invLen; // Nx\r\n p[i++] = b * invLen; // Ny\r\n p[i++] = c * invLen; // Nz\r\n \r\n let d_normalized = d * invLen; // D_orig\r\n \r\n if (useMargin && margin !== 1.0) {\r\n const shift_amount = (1.0-margin);\r\n d_normalized -= shift_amount; // D_new = D_orig - shift_amount\r\n }\r\n p[i++] = d_normalized; // Store the (potentially shifted) D\r\n };\r\n \r\n // a,b,c,d args useMargin\r\n emit(viewProj[3] + viewProj[0], viewProj[7] + viewProj[4], viewProj[11] + viewProj[8], viewProj[15] + viewProj[12], true); // left\r\n emit(viewProj[3] - viewProj[0], viewProj[7] - viewProj[4], viewProj[11] - viewProj[8], viewProj[15] - viewProj[12], true); // right\r\n emit(viewProj[3] + viewProj[1], viewProj[7] + viewProj[5], viewProj[11] + viewProj[9], viewProj[15] + viewProj[13], true); // bottom\r\n emit(viewProj[3] - viewProj[1], viewProj[7] - viewProj[5], viewProj[11] - viewProj[9], viewProj[15] - viewProj[13], true); // top\r\n emit(viewProj[3] + viewProj[2], viewProj[7] + viewProj[6], viewProj[11] + viewProj[10], viewProj[15] + viewProj[14], false); // near\r\n emit(viewProj[3] - viewProj[2], viewProj[7] - viewProj[6], viewProj[11] - viewProj[10], viewProj[15] + viewProj[14], false); // far\r\n \r\n return p;\r\n }\r\n\r\n computeDistances(x, y, z,vpm) {\r\n\r\n this.distances.fill(0);\r\n const keys = Array.from(this.pointSets.keys());\r\n const numKeys = keys.length;\r\n let planes;\r\n if(!!vpm){\r\n planes = this.getFrustumPlanes(vpm);\r\n }\r\n this.numUsed = 0;\r\n for (let i = 0; i < numKeys; i++) {\r\n const key = keys[i];\r\n const pointSet = this.pointSets.get(key);\r\n if (!pointSet.used) continue;\r\n const length = Math.floor(pointSet.length / 3);\r\n this.numUsed += length\r\n }\r\n //console.log(\"num used : \"+this.numUsed);\r\n this.indexes = new Uint32Array(this.numUsed);\r\n this.distances = new Uint32Array(this.numUsed);\r\n let c = 0;\r\n for (let i = 0; i < numKeys; i++) {\r\n const key = keys[i];\r\n const keyBase = Math.floor(key / 3);\r\n const pointSet = this.pointSets.get(key);\r\n if (!pointSet.used) continue;\r\n const length = Math.floor(pointSet.length / 3);\r\n //this.numUsed += length\r\n for (let j = 0; j < length; j++) {\r\n const idx = key + (j * 3);\r\n const vx = this.points[idx];\r\n const vy = this.points[idx + 1];\r\n const vz = this.points[idx + 2];\r\n\r\n // frustum culling //\r\n if(planes){\r\n let visible = true;\r\n for (let p = 0; p < 24; p += 4) {\r\n if (vx * planes[p] +\r\n vy * planes[p + 1] +\r\n vz * planes[p + 2] +\r\n planes[p + 3] < 0) { // outside this plane\r\n visible = false;\r\n break;\r\n }\r\n }\r\n if (!visible) continue;\r\n }\r\n \r\n const dx = x - vx;\r\n const dy = y - vy;\r\n const dz = z - vz;\r\n const d = dx * dx + dy * dy + dz * dz;\r\n floatView[0] = d;\r\n this.distances[c] = uintView[0];\r\n this.indexes[c++] = keyBase + j;\r\n }\r\n }\r\n this.numUsed = c;\r\n \r\n this.indexes = this.indexes.subarray(0, c);\r\n this.distances = this.distances.subarray(0, c);\r\n }\r\n\r\n sort(xyz, vpm, id) {\r\n // Always store the latest sort request\r\n this.pendingSort = { xyz, vpm };\r\n this.pendingID = id;\r\n //console.log(`Received sort request with ID: ${id}`);\r\n\r\n // If no sort is currently ongoing, start processing\r\n if (!this.sortOngoing) {\r\n this.sortOngoing = true;\r\n this.processSortQueue();\r\n }\r\n }\r\n\r\n // Asynchronous loop to process sort requests sequentially\r\n async processSortQueue() {\r\n if (!this.initialized) {\r\n await init();\r\n this.initialized = true;\r\n }\r\n while (this.pendingSort) {\r\n const { xyz, vpm } = this.pendingSort;\r\n const currentID = this.pendingID;\r\n\r\n // Clear the pending sort to capture any new requests during processing\r\n this.pendingSort = null;\r\n this.pendingID = null;\r\n\r\n //console.log(`Starting sort with ID: ${currentID}`);\r\n\r\n \r\n\r\n // Perform the synchronous sort operations\r\n\r\n this.computeDistances(xyz[0], xyz[1], xyz[2], vpm);\r\n //console.log((performance.now() - start)+' ms');\r\n\r\n //console.log(this.indexes.length)\r\n const start = performance.now();\r\n this.indexes = radix_sort_indices(this.indexes, this.distances);\r\n \r\n\r\n const duration = performance.now() - start;\r\n //console.log(`Sort with ID: ${currentID} completed in ${duration.toFixed(2)}ms`);\r\n\r\n // Callback after sorting is done\r\n this.sortCallback(this.indexes, this.numUsed, currentID, duration);\r\n\r\n // Yield control to the event loop to handle new incoming sort requests\r\n await new Promise(resolve => setTimeout(resolve, 0));\r\n }\r\n\r\n // No more pending sorts\r\n this.sortOngoing = false;\r\n //console.log(\"No more pending sorts. SortWorker is idle.\");\r\n }\r\n} export { PointsManager }","import { PointsManager } from \"./PointsManager\";\r\n\r\nconst sortCallback = ((array, numUsed, id, sortPerf)=>{\r\n const copy = new Uint32Array(array)\r\n postMessage({\r\n order: copy.buffer,\r\n count: numUsed,\r\n id: id,\r\n sortPerf: sortPerf\r\n }, [copy.buffer]);\r\n})\r\nlet pointsManager;\r\nself.onmessage = function (e) {\r\n\r\n try {\r\n\r\n switch (e.data.method) {\r\n \r\n case \"addBatches\":\r\n if (!pointsManager) {\r\n pointsManager = new PointsManager(sortCallback);\r\n }\r\n pointsManager.addBatchesOffsetStrideCount(new Float32Array(e.data.positions), e.data.insertionIndexes, e.data.offset, e.data.stride, e.data.batchSize);\r\n break\r\n case \"hide\":\r\n\r\n if (!!pointsManager) {\r\n pointsManager.hidePoints(e.data.insertionIndex);\r\n }\r\n\r\n break\r\n case \"hideBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.hidePoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"show\":\r\n if (!!pointsManager) {\r\n pointsManager.showPoints(e.data.insertionIndex);\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break;\r\n case \"showBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.showPoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"remove\":\r\n if (!!pointsManager) {\r\n pointsManager.removePoints(e.data.insertionIndex);\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"removeBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.removePoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"sort\":\r\n \r\n if (!!pointsManager) {\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n break\r\n default:\r\n throw new Error(`No method with name ${e.data.method}`)\r\n }\r\n } catch (error) {\r\n postMessage({ error: error.message })\r\n }\r\n}"],"names":["wasm","cachedUint32ArrayMemory0","getUint32ArrayMemory0","WASM_VECTOR_LEN","passArray32ToWasm0","arg","malloc","ptr","getArrayU32FromWasm0","len","radix_sort_indices","indices","distances","ptr0","len0","ptr1","len1","ret","v3","__wbg_load","module","imports","e","bytes","instance","__wbg_get_imports","table","offset","__wbg_finalize_init","__wbg_init","module_or_path","buffer","floatView","uintView","PointsManager","sortCallback","insertionIndex","pointSet","newLength","key","aPointSet","newPoints","newNumPoints","newDistances","positions","insertionIndexes","stride","batchSize","batchIndex","batchPositionStartIndex","batchNumPoints","viewProj","margin","p","i","emit","a","b","c","d","useMargin","invLen","d_normalized","shift_amount","x","y","z","vpm","keys","numKeys","planes","length","keyBase","j","idx","vx","vy","vz","visible","dx","dy","dz","xyz","id","init","currentID","start","duration","resolve","array","numUsed","sortPerf","copy","pointsManager","error"],"mappings":"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"}
1
+ {"version":3,"file":"PointsManager.worker-dH1fNyu8.js","sources":["../src/splats/radix/wasm_sorter.js","../src/splats/PointsManager.js","../src/splats/PointsManager.worker.js"],"sourcesContent":["let wasm;\n\nlet cachedUint32ArrayMemory0 = null;\n\nfunction getUint32ArrayMemory0() {\n if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {\n cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);\n }\n return cachedUint32ArrayMemory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passArray32ToWasm0(arg, malloc) {\n const ptr = malloc(arg.length * 4, 4) >>> 0;\n getUint32ArrayMemory0().set(arg, ptr / 4);\n WASM_VECTOR_LEN = arg.length;\n return ptr;\n}\n\nfunction getArrayU32FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n/**\n * Radix Sort implementation for sorting indices based on distances.\n * Both `indices` and `distances` should have the same length.\n * Returns a new vector of sorted indices in descending order based on distances.\n * @param {Uint32Array} indices\n * @param {Uint32Array} distances\n * @returns {Uint32Array}\n */\nexport function radix_sort_indices(indices, distances) {\n const ptr0 = passArray32ToWasm0(indices, wasm.__wbindgen_malloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passArray32ToWasm0(distances, wasm.__wbindgen_malloc);\n const len1 = WASM_VECTOR_LEN;\n const ret = wasm.radix_sort_indices(ptr0, len0, ptr1, len1);\n var v3 = getArrayU32FromWasm0(ret[0], ret[1]).slice();\n wasm.__wbindgen_free(ret[0], ret[1] * 4, 4);\n return v3;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_0;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedUint32ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('wasm_sorter_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import init, { radix_sort_indices } from './radix/wasm_sorter.js';\r\n\r\nconst buffer = new ArrayBuffer(4);\r\nconst floatView = new Float32Array(buffer);\r\nconst uintView = new Uint32Array(buffer);\r\n\r\nclass PointsManager {\r\n constructor(sortCallback) {\r\n this.points = new Float32Array(4096 * 3);\r\n this.distances = new Uint32Array(4096);\r\n this.pointSets = new Map(); // Map<number, object>\r\n this.numUsed = 0;\r\n this.sortOngoing = false;\r\n this.sortCallback = sortCallback;\r\n this.sortPromise = Promise.resolve();\r\n }\r\n\r\n\r\n\r\n hidePoints(insertionIndex) {\r\n //console.log(\"hide\");\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (pointSet.used) {\r\n pointSet.used = false;\r\n }\r\n }\r\n removePoints(insertionIndex) {\r\n /* console.log(\"remove\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (pointSet.used) {\r\n pointSet.used = false;\r\n }\r\n\r\n this.pointSets.delete(insertionIndex);\r\n\r\n // Determine newLength based on remaining points\r\n let newLength = 0;\r\n for (const [key, aPointSet] of this.pointSets.entries()) {\r\n if (key + aPointSet.length > newLength) {\r\n newLength = key + aPointSet.length;\r\n }\r\n }\r\n\r\n }\r\n showPoints(insertionIndex) {\r\n /* console.log(\"show\"); */\r\n const pointSet = this.pointSets.get(insertionIndex);\r\n if (!pointSet.used) {\r\n pointSet.used = true;\r\n }\r\n\r\n }\r\n\r\n resizeArrays(newLength) {\r\n\r\n if (isNaN(newLength)) {\r\n console.log(\"hit max splats\")\r\n }\r\n //console.log(newLength)\r\n if (newLength > this.points.length) {\r\n newLength = Math.max(this.points.length * 2, newLength);\r\n // Resize points array\r\n const newPoints = new Float32Array(newLength);\r\n newPoints.set(this.points, 0);\r\n this.points = newPoints;\r\n\r\n // Resize distances array\r\n const newNumPoints = Math.floor(newLength / 3);\r\n const newDistances = new Uint32Array(newNumPoints);\r\n newDistances.set(this.distances, 0);\r\n this.distances = newDistances;\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n addBatchesOffsetStrideCount(positions, insertionIndexes, offset, stride, batchSize) {\r\n\r\n const newLength = Math.max(this.points.length, insertionIndexes[insertionIndexes.length - 1] + batchSize * 3);\r\n\r\n this.resizeArrays(newLength);\r\n for (let batchIndex = 0; batchIndex < insertionIndexes.length; batchIndex++) {\r\n\r\n const insertionIndex = insertionIndexes[batchIndex];\r\n const start = Math.floor(insertionIndex / 3);\r\n const batchPositionStartIndex = batchIndex * batchSize * stride;\r\n const batchNumPoints = Math.min((positions.length - batchPositionStartIndex) / stride, batchSize);\r\n\r\n\r\n for (let i = 0; i < batchNumPoints; i++) {\r\n\r\n this.points[insertionIndex + i * 3] = positions[i * stride + offset + batchPositionStartIndex]\r\n this.points[insertionIndex + i * 3 + 1] = positions[i * stride + offset + batchPositionStartIndex + 1]\r\n this.points[insertionIndex + i * 3 + 2] = positions[i * stride + offset + batchPositionStartIndex + 2]\r\n\r\n }\r\n this.pointSets.set(insertionIndex, { length: batchNumPoints * 3, used: false });\r\n\r\n\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n getFrustumPlanes(viewProj, margin = 1.2) { \r\n const p = new Float32Array(24);\r\n let i = 0;\r\n \r\n const emit = (a, b, c, d, useMargin) => {\r\n const invLen = 1 / Math.hypot(a, b, c);\r\n p[i++] = a * invLen; // Nx\r\n p[i++] = b * invLen; // Ny\r\n p[i++] = c * invLen; // Nz\r\n \r\n let d_normalized = d * invLen; // D_orig\r\n \r\n if (useMargin && margin !== 1.0) {\r\n const shift_amount = (1.0-margin);\r\n d_normalized -= shift_amount; // D_new = D_orig - shift_amount\r\n }\r\n p[i++] = d_normalized; // Store the (potentially shifted) D\r\n };\r\n \r\n // a,b,c,d args useMargin\r\n emit(viewProj[3] + viewProj[0], viewProj[7] + viewProj[4], viewProj[11] + viewProj[8], viewProj[15] + viewProj[12], true); // left\r\n emit(viewProj[3] - viewProj[0], viewProj[7] - viewProj[4], viewProj[11] - viewProj[8], viewProj[15] - viewProj[12], true); // right\r\n emit(viewProj[3] + viewProj[1], viewProj[7] + viewProj[5], viewProj[11] + viewProj[9], viewProj[15] + viewProj[13], true); // bottom\r\n emit(viewProj[3] - viewProj[1], viewProj[7] - viewProj[5], viewProj[11] - viewProj[9], viewProj[15] - viewProj[13], true); // top\r\n emit(viewProj[3] + viewProj[2], viewProj[7] + viewProj[6], viewProj[11] + viewProj[10], viewProj[15] + viewProj[14], false); // near\r\n emit(viewProj[3] - viewProj[2], viewProj[7] - viewProj[6], viewProj[11] - viewProj[10], viewProj[15] + viewProj[14], false); // far\r\n \r\n return p;\r\n }\r\n\r\n computeDistances(x, y, z,vpm) {\r\n\r\n this.distances.fill(0);\r\n const keys = Array.from(this.pointSets.keys());\r\n const numKeys = keys.length;\r\n let planes;\r\n if(!!vpm){\r\n planes = this.getFrustumPlanes(vpm);\r\n }\r\n this.numUsed = 0;\r\n for (let i = 0; i < numKeys; i++) {\r\n const key = keys[i];\r\n const pointSet = this.pointSets.get(key);\r\n if (!pointSet.used) continue;\r\n const length = Math.floor(pointSet.length / 3);\r\n this.numUsed += length\r\n }\r\n //console.log(\"num used : \"+this.numUsed);\r\n this.indexes = new Uint32Array(this.numUsed);\r\n this.distances = new Uint32Array(this.numUsed);\r\n let c = 0;\r\n for (let i = 0; i < numKeys; i++) {\r\n const key = keys[i];\r\n const keyBase = Math.floor(key / 3);\r\n const pointSet = this.pointSets.get(key);\r\n if (!pointSet.used) continue;\r\n const length = Math.floor(pointSet.length / 3);\r\n //this.numUsed += length\r\n for (let j = 0; j < length; j++) {\r\n const idx = key + (j * 3);\r\n const vx = this.points[idx];\r\n const vy = this.points[idx + 1];\r\n const vz = this.points[idx + 2];\r\n\r\n // frustum culling //\r\n if(planes){\r\n let visible = true;\r\n for (let p = 0; p < 24; p += 4) {\r\n if (vx * planes[p] +\r\n vy * planes[p + 1] +\r\n vz * planes[p + 2] +\r\n planes[p + 3] < 0) { // outside this plane\r\n visible = false;\r\n break;\r\n }\r\n }\r\n if (!visible) continue;\r\n }\r\n \r\n const dx = x - vx;\r\n const dy = y - vy;\r\n const dz = z - vz;\r\n const d = dx * dx + dy * dy + dz * dz;\r\n floatView[0] = d;\r\n this.distances[c] = uintView[0];\r\n this.indexes[c++] = keyBase + j;\r\n }\r\n }\r\n this.numUsed = c;\r\n \r\n this.indexes = this.indexes.subarray(0, c);\r\n this.distances = this.distances.subarray(0, c);\r\n }\r\n\r\n sort(xyz, vpm, id) {\r\n // Always store the latest sort request\r\n this.pendingSort = { xyz, vpm };\r\n this.pendingID = id;\r\n //console.log(`Received sort request with ID: ${id}`);\r\n\r\n // If no sort is currently ongoing, start processing\r\n if (!this.sortOngoing) {\r\n this.sortOngoing = true;\r\n this.processSortQueue();\r\n }\r\n }\r\n\r\n // Asynchronous loop to process sort requests sequentially\r\n async processSortQueue() {\r\n if (!this.initialized) {\r\n await init();\r\n this.initialized = true;\r\n }\r\n while (this.pendingSort) {\r\n const { xyz, vpm } = this.pendingSort;\r\n const currentID = this.pendingID;\r\n\r\n // Clear the pending sort to capture any new requests during processing\r\n this.pendingSort = null;\r\n this.pendingID = null;\r\n\r\n //console.log(`Starting sort with ID: ${currentID}`);\r\n\r\n \r\n\r\n // Perform the synchronous sort operations\r\n\r\n this.computeDistances(xyz[0], xyz[1], xyz[2], vpm);\r\n //console.log((performance.now() - start)+' ms');\r\n\r\n //console.log(this.indexes.length)\r\n const start = performance.now();\r\n this.indexes = radix_sort_indices(this.indexes, this.distances);\r\n \r\n\r\n const duration = performance.now() - start;\r\n //console.log(`Sort with ID: ${currentID} completed in ${duration.toFixed(2)}ms`);\r\n\r\n // Callback after sorting is done\r\n this.sortCallback(this.indexes, this.numUsed, currentID, duration);\r\n\r\n // Yield control to the event loop to handle new incoming sort requests\r\n await new Promise(resolve => setTimeout(resolve, 0));\r\n }\r\n\r\n // No more pending sorts\r\n this.sortOngoing = false;\r\n //console.log(\"No more pending sorts. SortWorker is idle.\");\r\n }\r\n} export { PointsManager }","import { PointsManager } from \"./PointsManager\";\r\n\r\nconst sortCallback = ((array, numUsed, id, sortPerf)=>{\r\n const copy = new Uint32Array(array)\r\n postMessage({\r\n order: copy.buffer,\r\n count: numUsed,\r\n id: id,\r\n sortPerf: sortPerf\r\n }, [copy.buffer]);\r\n})\r\nlet pointsManager;\r\nself.onmessage = function (e) {\r\n\r\n try {\r\n\r\n switch (e.data.method) {\r\n \r\n case \"addBatches\":\r\n if (!pointsManager) {\r\n pointsManager = new PointsManager(sortCallback);\r\n }\r\n pointsManager.addBatchesOffsetStrideCount(new Float32Array(e.data.positions), e.data.insertionIndexes, e.data.offset, e.data.stride, e.data.batchSize);\r\n break\r\n case \"hide\":\r\n\r\n if (!!pointsManager) {\r\n pointsManager.hidePoints(e.data.insertionIndex);\r\n }\r\n\r\n break\r\n case \"hideBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.hidePoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"show\":\r\n if (!!pointsManager) {\r\n pointsManager.showPoints(e.data.insertionIndex);\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break;\r\n case \"showBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.showPoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"remove\":\r\n if (!!pointsManager) {\r\n pointsManager.removePoints(e.data.insertionIndex);\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"removeBatches\":\r\n\r\n if (!!pointsManager) {\r\n e.data.insertionIndexes.forEach(insertionIndex => {\r\n pointsManager.removePoints(insertionIndex);\r\n });\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n\r\n break\r\n case \"sort\":\r\n \r\n if (!!pointsManager) {\r\n pointsManager.sort(e.data.xyz, e.data.vpm, e.data.id)\r\n }\r\n break\r\n default:\r\n throw new Error(`No method with name ${e.data.method}`)\r\n }\r\n } catch (error) {\r\n postMessage({ error: error.message })\r\n }\r\n}"],"names":["wasm","cachedUint32ArrayMemory0","getUint32ArrayMemory0","WASM_VECTOR_LEN","passArray32ToWasm0","arg","malloc","ptr","getArrayU32FromWasm0","len","radix_sort_indices","indices","distances","ptr0","len0","ptr1","len1","ret","v3","__wbg_load","module","imports","e","bytes","instance","__wbg_get_imports","table","offset","__wbg_finalize_init","__wbg_init","module_or_path","buffer","floatView","uintView","PointsManager","sortCallback","insertionIndex","pointSet","newLength","key","aPointSet","newPoints","newNumPoints","newDistances","positions","insertionIndexes","stride","batchSize","batchIndex","batchPositionStartIndex","batchNumPoints","viewProj","margin","p","i","emit","a","b","c","d","useMargin","invLen","d_normalized","shift_amount","x","y","z","vpm","keys","numKeys","planes","length","keyBase","j","idx","vx","vy","vz","visible","dx","dy","dz","xyz","id","init","currentID","start","duration","resolve","array","numUsed","sortPerf","copy","pointsManager","error"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export function splatsVertexShader(): string;
2
2
  export function splatsFragmentShader(): string;
3
- export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
3
+ export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
4
4
  constructor(renderer: any, isStatic: any, fragShader: any);
5
5
  numBatches: number;
6
6
  numVisibleBatches: number;
@@ -23,13 +23,13 @@ export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("thre
23
23
  copyCamera: OrthographicCamera;
24
24
  copyScene: Scene;
25
25
  copyQuad: Mesh<PlaneGeometry, ShaderMaterial, import("three").Object3DEventMap>;
26
+ splatsCPUCuling: boolean;
26
27
  /**
27
28
  * Sets the splats visualization quality where 1 is the maximum quality and 0 is the fastest
28
29
  * @param {number} quality value between 0 and 1 (1 highest quality)
29
30
  */
30
31
  setQuality(quality: number): void;
31
32
  setSplatsCPUCulling(splatsCPUCuling: any): void;
32
- splatsCPUCuling: any;
33
33
  updateShaderParams(camera: any): void;
34
34
  dispose(): void;
35
35
  copyTex2D(src: any, dst: any, scissorBox: any, layer: any): void;
@@ -1,6 +1,6 @@
1
1
  export function splatsVertexShader(): string;
2
2
  export function splatsFragmentShader(): string;
3
- export class SplatsMeshCompatibility extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
3
+ export class SplatsMeshCompatibility extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
4
4
  constructor(renderer: any, isStatic: any, fragShader: any);
5
5
  numBatches: number;
6
6
  numVisibleBatches: number;
@@ -1,6 +1,6 @@
1
1
  export function splatsVertexShader(): string;
2
2
  export function splatsFragmentShader(): string;
3
- export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
3
+ export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
4
4
  constructor(renderer: any, isStatic: any, fragShader: any);
5
5
  numBatches: number;
6
6
  numVisibleBatches: number;
@@ -1,6 +1,6 @@
1
1
  export function splatsVertexShader(): string;
2
2
  export function splatsFragmentShader(): string;
3
- export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
3
+ export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
4
4
  constructor(renderer: any, isStatic: any, fragShader: any);
5
5
  numBatches: number;
6
6
  numVisibleBatches: number;
@@ -1,6 +1,6 @@
1
1
  export function splatsVertexShader(): string;
2
2
  export function splatsFragmentShader(): string;
3
- export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
3
+ export class SplatsMesh extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>, import("three").Material | import("three").Material[], import("three").Object3DEventMap> {
4
4
  constructor(renderer: any, isStatic: any, fragShader: any);
5
5
  numBatches: number;
6
6
  numVisibleBatches: number;