@ifc-lite/geometry 1.16.3 → 1.16.4
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.
- package/dist/coordinate-handler.d.ts +9 -0
- package/dist/coordinate-handler.d.ts.map +1 -1
- package/dist/coordinate-handler.js +32 -30
- package/dist/coordinate-handler.js.map +1 -1
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +252 -8
- package/dist/index.js.map +1 -1
- package/dist/native-bridge.d.ts +6 -0
- package/dist/native-bridge.d.ts.map +1 -1
- package/dist/native-bridge.js +481 -10
- package/dist/native-bridge.js.map +1 -1
- package/dist/platform-bridge.d.ts +59 -0
- package/dist/platform-bridge.d.ts.map +1 -1
- package/dist/platform-bridge.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/native-bridge.js
CHANGED
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
const NATIVE_CACHE_PREFETCH_WINDOW = 2;
|
|
5
|
+
const MAX_DEFERRED_BATCHES_PER_DRAIN = 4;
|
|
6
|
+
const MAX_DEFERRED_MESHES_PER_DRAIN = 8192;
|
|
7
|
+
const MAX_DEFERRED_DRAIN_MS = 10;
|
|
8
|
+
function yieldToEventLoop() {
|
|
9
|
+
const maybeScheduler = globalThis.scheduler;
|
|
10
|
+
if (typeof maybeScheduler?.yield === 'function') {
|
|
11
|
+
return maybeScheduler.yield();
|
|
12
|
+
}
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
const channel = new MessageChannel();
|
|
15
|
+
channel.port1.onmessage = () => resolve();
|
|
16
|
+
channel.port2.postMessage(null);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function sleep(ms) {
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
globalThis.setTimeout(resolve, ms);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
4
24
|
/**
|
|
5
25
|
* Native Tauri bridge for desktop apps
|
|
6
26
|
*
|
|
@@ -43,6 +63,128 @@ export class NativeBridge {
|
|
|
43
63
|
const encoder = new TextEncoder();
|
|
44
64
|
return Array.from(encoder.encode(content));
|
|
45
65
|
}
|
|
66
|
+
async drainDeferredBatches(pendingBatches, options, streamStartTime) {
|
|
67
|
+
let drainedBatchCount = 0;
|
|
68
|
+
let drainedMeshCount = 0;
|
|
69
|
+
let drainStartedAt = performance.now();
|
|
70
|
+
while (pendingBatches.length > 0) {
|
|
71
|
+
const next = pendingBatches.shift();
|
|
72
|
+
const batch = next.type === 'mesh-array'
|
|
73
|
+
? {
|
|
74
|
+
meshes: next.meshes.map(convertNativeMesh),
|
|
75
|
+
progress: {
|
|
76
|
+
processed: next.progress.processed,
|
|
77
|
+
total: next.progress.total,
|
|
78
|
+
currentType: next.progress.currentType,
|
|
79
|
+
},
|
|
80
|
+
nativeTelemetry: convertNativeBatchTelemetry(next.telemetry, performance.now() - streamStartTime),
|
|
81
|
+
}
|
|
82
|
+
: {
|
|
83
|
+
meshes: convertPackedNativeBatch(next.payload),
|
|
84
|
+
progress: {
|
|
85
|
+
processed: next.payload.progress.processed,
|
|
86
|
+
total: next.payload.progress.total,
|
|
87
|
+
currentType: next.payload.progress.currentType,
|
|
88
|
+
},
|
|
89
|
+
nativeTelemetry: convertNativeBatchTelemetry(next.payload.telemetry, performance.now() - streamStartTime),
|
|
90
|
+
};
|
|
91
|
+
options.onBatch?.(batch);
|
|
92
|
+
drainedBatchCount += 1;
|
|
93
|
+
drainedMeshCount += batch.meshes.length;
|
|
94
|
+
if (pendingBatches.length > 0) {
|
|
95
|
+
const shouldYield = drainedBatchCount >= MAX_DEFERRED_BATCHES_PER_DRAIN ||
|
|
96
|
+
drainedMeshCount >= MAX_DEFERRED_MESHES_PER_DRAIN ||
|
|
97
|
+
performance.now() - drainStartedAt >= MAX_DEFERRED_DRAIN_MS;
|
|
98
|
+
if (shouldYield) {
|
|
99
|
+
await yieldToEventLoop();
|
|
100
|
+
drainedBatchCount = 0;
|
|
101
|
+
drainedMeshCount = 0;
|
|
102
|
+
drainStartedAt = performance.now();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async processEventDrivenNativeStream(command, args, options, streamStartTime) {
|
|
108
|
+
if (!this.listen) {
|
|
109
|
+
throw new Error(`Event API unavailable, ${command} requires Tauri event support`);
|
|
110
|
+
}
|
|
111
|
+
const pendingBatches = [];
|
|
112
|
+
let drainPromise = null;
|
|
113
|
+
let drainError = null;
|
|
114
|
+
const scheduleDrain = () => {
|
|
115
|
+
if (drainPromise)
|
|
116
|
+
return;
|
|
117
|
+
drainPromise = (async () => {
|
|
118
|
+
try {
|
|
119
|
+
await this.drainDeferredBatches(pendingBatches, options, streamStartTime);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
drainError = error instanceof Error ? error : new Error(String(error));
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
drainPromise = null;
|
|
126
|
+
if (pendingBatches.length > 0 && !drainError) {
|
|
127
|
+
scheduleDrain();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
})();
|
|
131
|
+
};
|
|
132
|
+
const unlisten = await this.listen('geometry-batch', (event) => {
|
|
133
|
+
pendingBatches.push({
|
|
134
|
+
type: 'mesh-array',
|
|
135
|
+
meshes: event.payload.meshes,
|
|
136
|
+
progress: event.payload.progress,
|
|
137
|
+
telemetry: event.payload.telemetry,
|
|
138
|
+
});
|
|
139
|
+
scheduleDrain();
|
|
140
|
+
});
|
|
141
|
+
const unlistenPacked = await this.listen('geometry-packed-batch', (event) => {
|
|
142
|
+
pendingBatches.push({
|
|
143
|
+
type: 'packed',
|
|
144
|
+
payload: event.payload,
|
|
145
|
+
});
|
|
146
|
+
scheduleDrain();
|
|
147
|
+
});
|
|
148
|
+
const unlistenColorUpdate = await this.listen('geometry-color-update', (event) => {
|
|
149
|
+
const updates = new Map();
|
|
150
|
+
for (const entry of event.payload.updates) {
|
|
151
|
+
updates.set(entry.expressId, entry.color);
|
|
152
|
+
}
|
|
153
|
+
if (updates.size > 0) {
|
|
154
|
+
options.onColorUpdate?.(updates);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
try {
|
|
158
|
+
const stats = await this.invoke(command, args);
|
|
159
|
+
const result = {
|
|
160
|
+
totalMeshes: stats.totalMeshes,
|
|
161
|
+
totalVertices: stats.totalVertices,
|
|
162
|
+
totalTriangles: stats.totalTriangles,
|
|
163
|
+
parseTimeMs: stats.parseTimeMs,
|
|
164
|
+
entityScanTimeMs: stats.entityScanTimeMs,
|
|
165
|
+
lookupTimeMs: stats.lookupTimeMs,
|
|
166
|
+
preprocessTimeMs: stats.preprocessTimeMs,
|
|
167
|
+
geometryTimeMs: stats.geometryTimeMs,
|
|
168
|
+
totalTimeMs: stats.totalTimeMs,
|
|
169
|
+
firstChunkReadyTimeMs: stats.firstChunkReadyTimeMs,
|
|
170
|
+
firstChunkPackTimeMs: stats.firstChunkPackTimeMs,
|
|
171
|
+
firstChunkEmittedTimeMs: stats.firstChunkEmittedTimeMs,
|
|
172
|
+
firstChunkEmitTimeMs: stats.firstChunkEmitTimeMs,
|
|
173
|
+
};
|
|
174
|
+
while (drainPromise) {
|
|
175
|
+
await drainPromise;
|
|
176
|
+
}
|
|
177
|
+
if (drainError) {
|
|
178
|
+
throw drainError;
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
unlisten();
|
|
184
|
+
unlistenPacked();
|
|
185
|
+
unlistenColorUpdate();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
46
188
|
async processGeometry(content) {
|
|
47
189
|
if (!this.initialized || !this.invoke) {
|
|
48
190
|
await this.init();
|
|
@@ -60,6 +202,18 @@ export class NativeBridge {
|
|
|
60
202
|
coordinateInfo,
|
|
61
203
|
};
|
|
62
204
|
}
|
|
205
|
+
async processGeometryPath(path) {
|
|
206
|
+
if (!this.initialized || !this.invoke) {
|
|
207
|
+
await this.init();
|
|
208
|
+
}
|
|
209
|
+
const result = await this.invoke('get_geometry_from_path', { path });
|
|
210
|
+
return {
|
|
211
|
+
meshes: result.meshes.map(convertNativeMesh),
|
|
212
|
+
totalVertices: result.totalVertices,
|
|
213
|
+
totalTriangles: result.totalTriangles,
|
|
214
|
+
coordinateInfo: convertNativeCoordinateInfo(result.coordinateInfo),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
63
217
|
async processGeometryStreaming(content, options) {
|
|
64
218
|
if (!this.initialized || !this.invoke) {
|
|
65
219
|
await this.init();
|
|
@@ -73,7 +227,15 @@ export class NativeBridge {
|
|
|
73
227
|
totalVertices: result.totalVertices,
|
|
74
228
|
totalTriangles: result.totalTriangles,
|
|
75
229
|
parseTimeMs: 0,
|
|
230
|
+
entityScanTimeMs: 0,
|
|
231
|
+
lookupTimeMs: 0,
|
|
232
|
+
preprocessTimeMs: 0,
|
|
76
233
|
geometryTimeMs: 0,
|
|
234
|
+
totalTimeMs: 0,
|
|
235
|
+
firstChunkReadyTimeMs: 0,
|
|
236
|
+
firstChunkPackTimeMs: 0,
|
|
237
|
+
firstChunkEmittedTimeMs: 0,
|
|
238
|
+
firstChunkEmitTimeMs: 0,
|
|
77
239
|
};
|
|
78
240
|
// Emit single batch with all meshes
|
|
79
241
|
options.onBatch?.({
|
|
@@ -84,17 +246,52 @@ export class NativeBridge {
|
|
|
84
246
|
return stats;
|
|
85
247
|
}
|
|
86
248
|
const buffer = this.toNativeBuffer(content);
|
|
87
|
-
|
|
249
|
+
const streamStartTime = performance.now();
|
|
250
|
+
const pendingBatches = [];
|
|
251
|
+
let drainPromise = null;
|
|
252
|
+
let drainError = null;
|
|
253
|
+
const scheduleDrain = () => {
|
|
254
|
+
if (drainPromise)
|
|
255
|
+
return;
|
|
256
|
+
drainPromise = (async () => {
|
|
257
|
+
try {
|
|
258
|
+
await this.drainDeferredBatches(pendingBatches, options, streamStartTime);
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
drainError = error instanceof Error ? error : new Error(String(error));
|
|
262
|
+
}
|
|
263
|
+
finally {
|
|
264
|
+
drainPromise = null;
|
|
265
|
+
if (pendingBatches.length > 0 && !drainError) {
|
|
266
|
+
scheduleDrain();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
})();
|
|
270
|
+
};
|
|
88
271
|
const unlisten = await this.listen('geometry-batch', (event) => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
272
|
+
pendingBatches.push({
|
|
273
|
+
type: 'mesh-array',
|
|
274
|
+
meshes: event.payload.meshes,
|
|
275
|
+
progress: event.payload.progress,
|
|
276
|
+
telemetry: event.payload.telemetry,
|
|
277
|
+
});
|
|
278
|
+
scheduleDrain();
|
|
279
|
+
});
|
|
280
|
+
const unlistenPacked = await this.listen('geometry-packed-batch', (event) => {
|
|
281
|
+
pendingBatches.push({
|
|
282
|
+
type: 'packed',
|
|
283
|
+
payload: event.payload,
|
|
284
|
+
});
|
|
285
|
+
scheduleDrain();
|
|
286
|
+
});
|
|
287
|
+
const unlistenColorUpdate = await this.listen('geometry-color-update', (event) => {
|
|
288
|
+
const updates = new Map();
|
|
289
|
+
for (const entry of event.payload.updates) {
|
|
290
|
+
updates.set(entry.expressId, entry.color);
|
|
291
|
+
}
|
|
292
|
+
if (updates.size > 0) {
|
|
293
|
+
options.onColorUpdate?.(updates);
|
|
294
|
+
}
|
|
98
295
|
});
|
|
99
296
|
try {
|
|
100
297
|
// Call native streaming command
|
|
@@ -104,8 +301,22 @@ export class NativeBridge {
|
|
|
104
301
|
totalVertices: stats.totalVertices,
|
|
105
302
|
totalTriangles: stats.totalTriangles,
|
|
106
303
|
parseTimeMs: stats.parseTimeMs,
|
|
304
|
+
entityScanTimeMs: stats.entityScanTimeMs,
|
|
305
|
+
lookupTimeMs: stats.lookupTimeMs,
|
|
306
|
+
preprocessTimeMs: stats.preprocessTimeMs,
|
|
107
307
|
geometryTimeMs: stats.geometryTimeMs,
|
|
308
|
+
totalTimeMs: stats.totalTimeMs,
|
|
309
|
+
firstChunkReadyTimeMs: stats.firstChunkReadyTimeMs,
|
|
310
|
+
firstChunkPackTimeMs: stats.firstChunkPackTimeMs,
|
|
311
|
+
firstChunkEmittedTimeMs: stats.firstChunkEmittedTimeMs,
|
|
312
|
+
firstChunkEmitTimeMs: stats.firstChunkEmitTimeMs,
|
|
108
313
|
};
|
|
314
|
+
while (drainPromise) {
|
|
315
|
+
await drainPromise;
|
|
316
|
+
}
|
|
317
|
+
if (drainError) {
|
|
318
|
+
throw drainError;
|
|
319
|
+
}
|
|
109
320
|
options.onComplete?.(result);
|
|
110
321
|
return result;
|
|
111
322
|
}
|
|
@@ -116,7 +327,146 @@ export class NativeBridge {
|
|
|
116
327
|
finally {
|
|
117
328
|
// Clean up event listener
|
|
118
329
|
unlisten();
|
|
330
|
+
unlistenPacked();
|
|
331
|
+
unlistenColorUpdate();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
async processGeometryStreamingPath(path, options, cacheKey) {
|
|
335
|
+
if (!this.initialized || !this.invoke) {
|
|
336
|
+
await this.init();
|
|
119
337
|
}
|
|
338
|
+
const streamStartTime = performance.now();
|
|
339
|
+
if (!cacheKey) {
|
|
340
|
+
throw new Error('Packed shard path streaming requires a cache key');
|
|
341
|
+
}
|
|
342
|
+
return this.processPackedShardPathStream(path, cacheKey, options, streamStartTime);
|
|
343
|
+
}
|
|
344
|
+
async processGeometryStreamingCache(cacheKey, options) {
|
|
345
|
+
if (!this.initialized || !this.invoke) {
|
|
346
|
+
await this.init();
|
|
347
|
+
}
|
|
348
|
+
const streamStartTime = performance.now();
|
|
349
|
+
try {
|
|
350
|
+
const manifest = await this.invoke('get_native_geometry_cache_manifest', { cacheKey });
|
|
351
|
+
if (!manifest) {
|
|
352
|
+
throw new Error(`Native geometry cache manifest missing for ${cacheKey}`);
|
|
353
|
+
}
|
|
354
|
+
let processedMeshes = 0;
|
|
355
|
+
for (let shardIndex = 0; shardIndex < manifest.shardCount; shardIndex += 1) {
|
|
356
|
+
const shardPayload = await this.invoke('get_native_geometry_cache_packed_shard', { cacheKey, shardIndex });
|
|
357
|
+
const batch = decodePackedGeometryCacheShard(shardPayload, performance.now() - streamStartTime, shardIndex + 1);
|
|
358
|
+
processedMeshes = batch.progress.processed;
|
|
359
|
+
options.onBatch?.(batch);
|
|
360
|
+
if (shardIndex + 1 < manifest.shardCount) {
|
|
361
|
+
await yieldToEventLoop();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const result = {
|
|
365
|
+
totalMeshes: manifest.totalMeshes,
|
|
366
|
+
totalVertices: manifest.totalVertices,
|
|
367
|
+
totalTriangles: manifest.totalTriangles,
|
|
368
|
+
parseTimeMs: 0,
|
|
369
|
+
entityScanTimeMs: 0,
|
|
370
|
+
lookupTimeMs: 0,
|
|
371
|
+
preprocessTimeMs: 0,
|
|
372
|
+
geometryTimeMs: Math.round(performance.now() - streamStartTime),
|
|
373
|
+
totalTimeMs: Math.round(performance.now() - streamStartTime),
|
|
374
|
+
firstChunkReadyTimeMs: 0,
|
|
375
|
+
firstChunkPackTimeMs: 0,
|
|
376
|
+
firstChunkEmittedTimeMs: 0,
|
|
377
|
+
firstChunkEmitTimeMs: 0,
|
|
378
|
+
};
|
|
379
|
+
if (processedMeshes !== manifest.totalMeshes) {
|
|
380
|
+
console.warn(`[NativeBridge] Cached packed shard stream mesh mismatch for ${cacheKey}: received=${processedMeshes} expected=${manifest.totalMeshes}`);
|
|
381
|
+
}
|
|
382
|
+
options.onComplete?.(result);
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
options.onError?.(error instanceof Error ? error : new Error(String(error)));
|
|
387
|
+
throw error;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
async processPackedShardPathStream(path, cacheKey, options, streamStartTime) {
|
|
391
|
+
const statsPromise = this.invoke('get_geometry_streaming_from_path', {
|
|
392
|
+
path,
|
|
393
|
+
cacheKey,
|
|
394
|
+
preferPackedShards: true,
|
|
395
|
+
});
|
|
396
|
+
let nextShardIndex = 0;
|
|
397
|
+
let lastProgressAt = performance.now();
|
|
398
|
+
let processedMeshes = 0;
|
|
399
|
+
// Event-driven shard notification: Rust emits "native-shard-ready" when
|
|
400
|
+
// a packed shard is written. We resolve immediately instead of sleeping.
|
|
401
|
+
let shardReadyResolve = null;
|
|
402
|
+
const unlistenShardReady = this.listen
|
|
403
|
+
? await this.listen('native-shard-ready', () => {
|
|
404
|
+
if (shardReadyResolve) {
|
|
405
|
+
const resolve = shardReadyResolve;
|
|
406
|
+
shardReadyResolve = null;
|
|
407
|
+
resolve();
|
|
408
|
+
}
|
|
409
|
+
})
|
|
410
|
+
: null;
|
|
411
|
+
function waitForShardOrTimeout(timeoutMs) {
|
|
412
|
+
return new Promise((resolve) => {
|
|
413
|
+
const timer = setTimeout(resolve, timeoutMs);
|
|
414
|
+
shardReadyResolve = () => {
|
|
415
|
+
clearTimeout(timer);
|
|
416
|
+
resolve();
|
|
417
|
+
};
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
try {
|
|
421
|
+
while (true) {
|
|
422
|
+
const status = await this.invoke('get_native_geometry_cache_stream_status', { cacheKey });
|
|
423
|
+
if (status?.failed) {
|
|
424
|
+
throw new Error(status.errorMessage ?? `Packed shard stream failed for ${cacheKey}`);
|
|
425
|
+
}
|
|
426
|
+
const readyShardCount = status?.readyShardCount ?? 0;
|
|
427
|
+
// Read ALL ready shards in burst — no yield between reads
|
|
428
|
+
while (nextShardIndex < readyShardCount) {
|
|
429
|
+
const shardPayload = await this.invoke('get_native_geometry_cache_packed_shard', { cacheKey, shardIndex: nextShardIndex });
|
|
430
|
+
const batch = decodePackedGeometryCacheShard(shardPayload, performance.now() - streamStartTime, nextShardIndex + 1);
|
|
431
|
+
processedMeshes = Math.max(processedMeshes, batch.progress.processed);
|
|
432
|
+
lastProgressAt = performance.now();
|
|
433
|
+
options.onBatch?.(batch);
|
|
434
|
+
nextShardIndex += 1;
|
|
435
|
+
}
|
|
436
|
+
if (status?.done && nextShardIndex >= readyShardCount) {
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
if (performance.now() - lastProgressAt > 60_000) {
|
|
440
|
+
throw new Error(`Packed shard path stream stalled for ${cacheKey}: shards=${nextShardIndex}/${readyShardCount} processed=${processedMeshes}`);
|
|
441
|
+
}
|
|
442
|
+
// Wait for shard-ready event from Rust (instant notification) with
|
|
443
|
+
// a short timeout fallback in case events are missed.
|
|
444
|
+
await waitForShardOrTimeout(50);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
finally {
|
|
448
|
+
if (unlistenShardReady) {
|
|
449
|
+
unlistenShardReady();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
const stats = await statsPromise;
|
|
453
|
+
const result = {
|
|
454
|
+
totalMeshes: stats.totalMeshes,
|
|
455
|
+
totalVertices: stats.totalVertices,
|
|
456
|
+
totalTriangles: stats.totalTriangles,
|
|
457
|
+
parseTimeMs: stats.parseTimeMs,
|
|
458
|
+
entityScanTimeMs: stats.entityScanTimeMs,
|
|
459
|
+
lookupTimeMs: stats.lookupTimeMs,
|
|
460
|
+
preprocessTimeMs: stats.preprocessTimeMs,
|
|
461
|
+
geometryTimeMs: stats.geometryTimeMs,
|
|
462
|
+
totalTimeMs: stats.totalTimeMs,
|
|
463
|
+
firstChunkReadyTimeMs: stats.firstChunkReadyTimeMs,
|
|
464
|
+
firstChunkPackTimeMs: stats.firstChunkPackTimeMs,
|
|
465
|
+
firstChunkEmittedTimeMs: stats.firstChunkEmittedTimeMs,
|
|
466
|
+
firstChunkEmitTimeMs: stats.firstChunkEmitTimeMs,
|
|
467
|
+
};
|
|
468
|
+
options.onComplete?.(result);
|
|
469
|
+
return result;
|
|
120
470
|
}
|
|
121
471
|
getApi() {
|
|
122
472
|
// Native bridge doesn't expose an API object
|
|
@@ -127,12 +477,133 @@ export class NativeBridge {
|
|
|
127
477
|
function convertNativeMesh(native) {
|
|
128
478
|
return {
|
|
129
479
|
expressId: native.expressId,
|
|
480
|
+
ifcType: native.ifcType,
|
|
130
481
|
positions: new Float32Array(native.positions),
|
|
131
482
|
normals: new Float32Array(native.normals),
|
|
132
483
|
indices: new Uint32Array(native.indices),
|
|
133
484
|
color: native.color,
|
|
134
485
|
};
|
|
135
486
|
}
|
|
487
|
+
function convertPackedNativeBatch(native) {
|
|
488
|
+
// Copy each packed numeric array once, then hand meshes cheap subarray views
|
|
489
|
+
// instead of slicing and copying per mesh.
|
|
490
|
+
const positions = Float32Array.from(native.positions);
|
|
491
|
+
const normals = Float32Array.from(native.normals);
|
|
492
|
+
const indices = Uint32Array.from(native.indices);
|
|
493
|
+
return native.meshes.map((mesh) => ({
|
|
494
|
+
expressId: mesh.expressId,
|
|
495
|
+
ifcType: mesh.ifcType,
|
|
496
|
+
positions: positions.subarray(mesh.positionsOffset, mesh.positionsOffset + mesh.positionsLen),
|
|
497
|
+
normals: normals.subarray(mesh.normalsOffset, mesh.normalsOffset + mesh.normalsLen),
|
|
498
|
+
indices: indices.subarray(mesh.indicesOffset, mesh.indicesOffset + mesh.indicesLen),
|
|
499
|
+
color: mesh.color,
|
|
500
|
+
}));
|
|
501
|
+
}
|
|
502
|
+
function toArrayBuffer(payload) {
|
|
503
|
+
if (payload instanceof ArrayBuffer) {
|
|
504
|
+
return payload;
|
|
505
|
+
}
|
|
506
|
+
if (payload instanceof Uint8Array) {
|
|
507
|
+
if (payload.byteOffset === 0
|
|
508
|
+
&& payload.byteLength === payload.buffer.byteLength
|
|
509
|
+
&& payload.buffer instanceof ArrayBuffer) {
|
|
510
|
+
return payload.buffer;
|
|
511
|
+
}
|
|
512
|
+
return payload.slice().buffer;
|
|
513
|
+
}
|
|
514
|
+
if (Array.isArray(payload)) {
|
|
515
|
+
return Uint8Array.from(payload).buffer;
|
|
516
|
+
}
|
|
517
|
+
throw new Error(`Unsupported packed geometry shard payload: ${typeof payload}`);
|
|
518
|
+
}
|
|
519
|
+
function decodePackedGeometryCacheShard(payload, jsReceivedTimeMs, batchSequence) {
|
|
520
|
+
const buffer = toArrayBuffer(payload);
|
|
521
|
+
const header = new Uint32Array(buffer, 0, 8);
|
|
522
|
+
const [magic, version, meshCount, positionsLen, normalsLen, indicesLen, processed, total] = header;
|
|
523
|
+
if (magic !== 0x49464342) {
|
|
524
|
+
throw new Error('Invalid packed geometry cache shard magic');
|
|
525
|
+
}
|
|
526
|
+
if (version !== 1) {
|
|
527
|
+
throw new Error(`Unsupported packed geometry cache shard version: ${version}`);
|
|
528
|
+
}
|
|
529
|
+
const meshRecordWordLength = 11;
|
|
530
|
+
const meshWordOffset = 8;
|
|
531
|
+
const meshTableWords = meshCount * meshRecordWordLength;
|
|
532
|
+
const dataByteOffset = (meshWordOffset + meshTableWords) * Uint32Array.BYTES_PER_ELEMENT;
|
|
533
|
+
const positionsByteLength = positionsLen * Float32Array.BYTES_PER_ELEMENT;
|
|
534
|
+
const normalsByteLength = normalsLen * Float32Array.BYTES_PER_ELEMENT;
|
|
535
|
+
const indicesByteLength = indicesLen * Uint32Array.BYTES_PER_ELEMENT;
|
|
536
|
+
const positionsOffset = dataByteOffset;
|
|
537
|
+
const normalsOffset = positionsOffset + positionsByteLength;
|
|
538
|
+
const indicesOffset = normalsOffset + normalsByteLength;
|
|
539
|
+
const positions = new Float32Array(buffer, positionsOffset, positionsLen);
|
|
540
|
+
const normals = new Float32Array(buffer, normalsOffset, normalsLen);
|
|
541
|
+
const indices = new Uint32Array(buffer, indicesOffset, indicesLen);
|
|
542
|
+
const meshView = new DataView(buffer, meshWordOffset * Uint32Array.BYTES_PER_ELEMENT, meshTableWords * Uint32Array.BYTES_PER_ELEMENT);
|
|
543
|
+
const meshes = [];
|
|
544
|
+
for (let meshIndex = 0; meshIndex < meshCount; meshIndex += 1) {
|
|
545
|
+
const base = meshIndex * meshRecordWordLength * Uint32Array.BYTES_PER_ELEMENT;
|
|
546
|
+
const expressId = meshView.getUint32(base, true);
|
|
547
|
+
const positionsOffsetWords = meshView.getUint32(base + 4, true);
|
|
548
|
+
const positionsLengthWords = meshView.getUint32(base + 8, true);
|
|
549
|
+
const normalsOffsetWords = meshView.getUint32(base + 12, true);
|
|
550
|
+
const normalsLengthWords = meshView.getUint32(base + 16, true);
|
|
551
|
+
const indicesOffsetWords = meshView.getUint32(base + 20, true);
|
|
552
|
+
const indicesLengthWords = meshView.getUint32(base + 24, true);
|
|
553
|
+
const color = [
|
|
554
|
+
meshView.getFloat32(base + 28, true),
|
|
555
|
+
meshView.getFloat32(base + 32, true),
|
|
556
|
+
meshView.getFloat32(base + 36, true),
|
|
557
|
+
meshView.getFloat32(base + 40, true),
|
|
558
|
+
];
|
|
559
|
+
meshes.push({
|
|
560
|
+
expressId,
|
|
561
|
+
positions: positions.subarray(positionsOffsetWords, positionsOffsetWords + positionsLengthWords),
|
|
562
|
+
normals: normals.subarray(normalsOffsetWords, normalsOffsetWords + normalsLengthWords),
|
|
563
|
+
indices: indices.subarray(indicesOffsetWords, indicesOffsetWords + indicesLengthWords),
|
|
564
|
+
color,
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
return {
|
|
568
|
+
meshes,
|
|
569
|
+
progress: {
|
|
570
|
+
processed,
|
|
571
|
+
total,
|
|
572
|
+
currentType: 'cached',
|
|
573
|
+
},
|
|
574
|
+
nativeTelemetry: {
|
|
575
|
+
batchSequence,
|
|
576
|
+
payloadKind: 'packed-cache-shard',
|
|
577
|
+
meshCount,
|
|
578
|
+
positionsLen,
|
|
579
|
+
normalsLen,
|
|
580
|
+
indicesLen,
|
|
581
|
+
chunkReadyTimeMs: 0,
|
|
582
|
+
packTimeMs: 0,
|
|
583
|
+
emitTimeMs: 0,
|
|
584
|
+
emittedTimeMs: 0,
|
|
585
|
+
jsReceivedTimeMs,
|
|
586
|
+
},
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
function convertNativeBatchTelemetry(telemetry, jsReceivedTimeMs) {
|
|
590
|
+
if (!telemetry) {
|
|
591
|
+
return undefined;
|
|
592
|
+
}
|
|
593
|
+
return {
|
|
594
|
+
batchSequence: telemetry.batchSequence,
|
|
595
|
+
payloadKind: telemetry.payloadKind,
|
|
596
|
+
meshCount: telemetry.meshCount,
|
|
597
|
+
positionsLen: telemetry.positionsLen,
|
|
598
|
+
normalsLen: telemetry.normalsLen,
|
|
599
|
+
indicesLen: telemetry.indicesLen,
|
|
600
|
+
chunkReadyTimeMs: telemetry.chunkReadyTimeMs,
|
|
601
|
+
packTimeMs: telemetry.packTimeMs,
|
|
602
|
+
emitTimeMs: telemetry.emitTimeMs,
|
|
603
|
+
emittedTimeMs: telemetry.emittedTimeMs,
|
|
604
|
+
jsReceivedTimeMs,
|
|
605
|
+
};
|
|
606
|
+
}
|
|
136
607
|
function convertNativeCoordinateInfo(native) {
|
|
137
608
|
return {
|
|
138
609
|
originShift: native.originShift,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../src/native-bridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native-bridge.js","sourceRoot":"","sources":["../src/native-bridge.ts"],"names":[],"mappings":"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"}
|