@ifc-lite/geometry 1.1.7 → 1.2.0

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/index.d.ts CHANGED
@@ -3,22 +3,38 @@
3
3
  * Now powered by IFC-Lite native Rust WASM (1.9x faster than web-ifc)
4
4
  */
5
5
  export { IfcLiteBridge } from './ifc-lite-bridge.js';
6
- export { IfcLiteMeshCollector } from './ifc-lite-mesh-collector.js';
6
+ export { IfcLiteMeshCollector, type StreamingColorUpdateEvent } from './ifc-lite-mesh-collector.js';
7
7
  export { BufferBuilder } from './buffer-builder.js';
8
8
  export { CoordinateHandler } from './coordinate-handler.js';
9
- export { WorkerPool } from './worker-pool.js';
10
9
  export { GeometryQuality } from './progressive-loader.js';
11
10
  export { LODGenerator, type LODConfig, type LODMesh } from './lod.js';
12
11
  export { deduplicateMeshes, getDeduplicationStats, type InstancedMeshData, type DeduplicationStats } from './geometry-deduplicator.js';
13
12
  export * from './types.js';
14
13
  export * from './default-materials.js';
14
+ export { WasmMemoryManager, type GpuGeometryHandle, type GpuMeshMetadataHandle, type GpuInstancedGeometryHandle, type GpuInstancedGeometryCollectionHandle, type GpuInstancedGeometryRefHandle } from './wasm-memory-manager.js';
15
+ export { ZeroCopyMeshCollector, ZeroCopyInstancedCollector, type ZeroCopyStreamingProgress, type ZeroCopyBatchResult, type ZeroCopyCompleteStats, type ZeroCopyMeshMetadata, type ZeroCopyBatch, type ZeroCopyInstancedBatch, } from './zero-copy-collector.js';
15
16
  export { IfcLiteBridge as WebIfcBridge } from './ifc-lite-bridge.js';
16
17
  import { GeometryQuality } from './progressive-loader.js';
17
18
  import type { GeometryResult, MeshData } from './types.js';
18
19
  export interface GeometryProcessorOptions {
19
- useWorkers?: boolean;
20
20
  quality?: GeometryQuality;
21
21
  }
22
+ /**
23
+ * Dynamic batch configuration for ramp-up streaming
24
+ * Starts with small batches for fast first frame, ramps up for throughput
25
+ */
26
+ export interface DynamicBatchConfig {
27
+ /** Initial batch size for first 3 batches (default: 50) */
28
+ initialBatchSize?: number;
29
+ /** Maximum batch size for batches 11+ (default: 500) */
30
+ maxBatchSize?: number;
31
+ /** File size in MB for adaptive sizing (optional) */
32
+ fileSizeMB?: number;
33
+ }
34
+ /**
35
+ * Calculate dynamic batch size based on batch number
36
+ */
37
+ export declare function calculateDynamicBatchSize(batchNumber: number, initialBatchSize?: number, maxBatchSize?: number): number;
22
38
  export type StreamingGeometryEvent = {
23
39
  type: 'start';
24
40
  totalEstimate: number;
@@ -30,6 +46,9 @@ export type StreamingGeometryEvent = {
30
46
  meshes: MeshData[];
31
47
  totalSoFar: number;
32
48
  coordinateInfo?: import('./types.js').CoordinateInfo;
49
+ } | {
50
+ type: 'colorUpdate';
51
+ updates: Map<number, [number, number, number, number]>;
33
52
  } | {
34
53
  type: 'complete';
35
54
  totalMeshes: number;
@@ -56,16 +75,14 @@ export declare class GeometryProcessor {
56
75
  private bridge;
57
76
  private bufferBuilder;
58
77
  private coordinateHandler;
59
- private workerPool;
60
- private useWorkers;
61
78
  constructor(options?: GeometryProcessorOptions);
62
79
  /**
63
- * Initialize IFC-Lite WASM and worker pool
80
+ * Initialize IFC-Lite WASM
64
81
  * WASM is automatically resolved from the package location - no path needed
65
82
  */
66
83
  init(_wasmPath?: string): Promise<void>;
67
84
  /**
68
- * Process IFC file and extract geometry
85
+ * Process IFC file and extract geometry (synchronous, use processStreaming for large files)
69
86
  * @param buffer IFC file buffer
70
87
  * @param entityIndex Optional entity index for priority-based loading
71
88
  */
@@ -79,9 +96,9 @@ export declare class GeometryProcessor {
79
96
  * Uses IFC-Lite for native Rust geometry processing (1.9x faster)
80
97
  * @param buffer IFC file buffer
81
98
  * @param entityIndex Optional entity index for priority-based loading
82
- * @param batchSize Number of meshes per batch (default: 100)
99
+ * @param batchConfig Dynamic batch configuration or fixed batch size
83
100
  */
84
- processStreaming(buffer: Uint8Array, _entityIndex?: Map<number, any>, batchSize?: number): AsyncGenerator<StreamingGeometryEvent>;
101
+ processStreaming(buffer: Uint8Array, _entityIndex?: Map<number, any>, batchConfig?: number | DynamicBatchConfig): AsyncGenerator<StreamingGeometryEvent>;
85
102
  /**
86
103
  * Process IFC file with streaming instanced geometry output for progressive rendering
87
104
  * Groups identical geometries by hash (before transformation) for GPU instancing
@@ -101,9 +118,13 @@ export declare class GeometryProcessor {
101
118
  */
102
119
  processAdaptive(buffer: Uint8Array, options?: {
103
120
  sizeThreshold?: number;
104
- batchSize?: number;
121
+ batchSize?: number | DynamicBatchConfig;
105
122
  entityIndex?: Map<number, any>;
106
123
  }): AsyncGenerator<StreamingGeometryEvent>;
124
+ /**
125
+ * Get the WASM API instance for advanced operations (e.g., entity scanning)
126
+ */
127
+ getApi(): import("@ifc-lite/wasm").IfcAPI | null;
107
128
  /**
108
129
  * Cleanup resources
109
130
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -11,45 +11,54 @@ export { IfcLiteMeshCollector } from './ifc-lite-mesh-collector.js';
11
11
  // Support components
12
12
  export { BufferBuilder } from './buffer-builder.js';
13
13
  export { CoordinateHandler } from './coordinate-handler.js';
14
- export { WorkerPool } from './worker-pool.js';
15
14
  export { GeometryQuality } from './progressive-loader.js';
16
15
  export { LODGenerator } from './lod.js';
17
16
  export { deduplicateMeshes, getDeduplicationStats } from './geometry-deduplicator.js';
18
17
  export * from './types.js';
19
18
  export * from './default-materials.js';
19
+ // Zero-copy GPU upload (new - faster, less memory)
20
+ export { WasmMemoryManager } from './wasm-memory-manager.js';
21
+ export { ZeroCopyMeshCollector, ZeroCopyInstancedCollector, } from './zero-copy-collector.js';
20
22
  // Legacy exports for compatibility (deprecated)
21
23
  export { IfcLiteBridge as WebIfcBridge } from './ifc-lite-bridge.js';
22
24
  import { IfcLiteBridge } from './ifc-lite-bridge.js';
23
25
  import { IfcLiteMeshCollector } from './ifc-lite-mesh-collector.js';
24
26
  import { BufferBuilder } from './buffer-builder.js';
25
27
  import { CoordinateHandler } from './coordinate-handler.js';
26
- import { WorkerPool } from './worker-pool.js';
28
+ /**
29
+ * Calculate dynamic batch size based on batch number
30
+ */
31
+ export function calculateDynamicBatchSize(batchNumber, initialBatchSize = 50, maxBatchSize = 500) {
32
+ if (batchNumber <= 3) {
33
+ return initialBatchSize; // Fast first frame
34
+ }
35
+ else if (batchNumber <= 6) {
36
+ return Math.floor((initialBatchSize + maxBatchSize) / 2); // Quick ramp
37
+ }
38
+ else {
39
+ return maxBatchSize; // Full throughput earlier
40
+ }
41
+ }
27
42
  export class GeometryProcessor {
28
43
  bridge;
29
44
  bufferBuilder;
30
45
  coordinateHandler;
31
- workerPool = null;
32
- useWorkers = false;
33
46
  constructor(options = {}) {
34
47
  this.bridge = new IfcLiteBridge();
35
48
  this.bufferBuilder = new BufferBuilder();
36
49
  this.coordinateHandler = new CoordinateHandler();
37
- this.useWorkers = options.useWorkers ?? false;
38
- // Note: quality option is accepted for API compatibility but IFC-Lite always processes at full quality
50
+ // Note: options accepted for API compatibility
39
51
  void options.quality;
40
52
  }
41
53
  /**
42
- * Initialize IFC-Lite WASM and worker pool
54
+ * Initialize IFC-Lite WASM
43
55
  * WASM is automatically resolved from the package location - no path needed
44
56
  */
45
57
  async init(_wasmPath) {
46
58
  await this.bridge.init();
47
- // Initialize worker pool if available (lazy - only when needed)
48
- // Don't initialize workers upfront to avoid overhead
49
- // Workers will be initialized on first use if needed
50
59
  }
51
60
  /**
52
- * Process IFC file and extract geometry
61
+ * Process IFC file and extract geometry (synchronous, use processStreaming for large files)
53
62
  * @param buffer IFC file buffer
54
63
  * @param entityIndex Optional entity index for priority-based loading
55
64
  */
@@ -57,50 +66,10 @@ export class GeometryProcessor {
57
66
  if (!this.bridge.isInitialized()) {
58
67
  await this.init();
59
68
  }
60
- // entityIndex is used in collectMeshesMainThread for priority-based loading
61
69
  void entityIndex;
62
- let meshes;
63
- // const meshCollectionStart = performance.now();
64
- // Use workers only if explicitly enabled (they add overhead)
65
- if (this.useWorkers) {
66
- // Try to use worker pool if available (lazy init)
67
- if (!this.workerPool) {
68
- try {
69
- let workerUrl;
70
- try {
71
- workerUrl = new URL('./geometry.worker.ts', import.meta.url);
72
- }
73
- catch (e) {
74
- workerUrl = './geometry.worker.ts';
75
- }
76
- this.workerPool = new WorkerPool(workerUrl, 1); // Use single worker for now
77
- await this.workerPool.init();
78
- }
79
- catch (error) {
80
- console.warn('[GeometryProcessor] Worker pool initialization failed, will use main thread:', error);
81
- this.workerPool = null;
82
- }
83
- }
84
- if (this.workerPool?.isAvailable()) {
85
- try {
86
- meshes = await this.workerPool.submit('mesh-collection', {
87
- buffer: buffer.buffer,
88
- });
89
- }
90
- catch (error) {
91
- console.warn('[Geometry] Worker pool failed, falling back to main thread:', error);
92
- meshes = await this.collectMeshesMainThread(buffer);
93
- }
94
- }
95
- else {
96
- // Fallback to main thread
97
- meshes = await this.collectMeshesMainThread(buffer);
98
- }
99
- }
100
- else {
101
- // Use main thread (faster for total time, but blocks UI)
102
- meshes = await this.collectMeshesMainThread(buffer);
103
- }
70
+ // Synchronous processing on main thread
71
+ // For large files, use processStreaming() instead which uses a dedicated worker
72
+ const meshes = await this.collectMeshesMainThread(buffer);
104
73
  // const meshCollectionTime = performance.now() - meshCollectionStart;
105
74
  // Handle large coordinates by shifting to origin
106
75
  const coordinateInfo = this.coordinateHandler.processMeshes(meshes);
@@ -131,24 +100,43 @@ export class GeometryProcessor {
131
100
  * Uses IFC-Lite for native Rust geometry processing (1.9x faster)
132
101
  * @param buffer IFC file buffer
133
102
  * @param entityIndex Optional entity index for priority-based loading
134
- * @param batchSize Number of meshes per batch (default: 100)
103
+ * @param batchConfig Dynamic batch configuration or fixed batch size
135
104
  */
136
- async *processStreaming(buffer, _entityIndex, batchSize = 25 // Reduced from 100 for faster first frame
137
- ) {
105
+ async *processStreaming(buffer, _entityIndex, batchConfig = 25) {
138
106
  if (!this.bridge.isInitialized()) {
139
107
  await this.init();
140
108
  }
141
109
  // Reset coordinate handler for new file
142
110
  this.coordinateHandler.reset();
111
+ // Yield start event FIRST so UI can update before heavy processing
143
112
  yield { type: 'start', totalEstimate: buffer.length / 1000 };
113
+ // Yield to main thread before heavy decode operation
114
+ await new Promise(resolve => setTimeout(resolve, 0));
144
115
  // Convert buffer to string (IFC files are text)
116
+ // This is blocking but unavoidable - WASM API expects string
145
117
  const decoder = new TextDecoder();
146
118
  const content = decoder.decode(buffer);
147
119
  // Use a placeholder model ID (IFC-Lite doesn't use model IDs)
148
120
  yield { type: 'model-open', modelID: 0 };
149
121
  const collector = new IfcLiteMeshCollector(this.bridge.getApi(), content);
150
122
  let totalMeshes = 0;
151
- for await (const batch of collector.collectMeshesStreaming(batchSize)) {
123
+ // Determine optimal WASM batch size based on file size
124
+ // Larger batches = fewer callbacks = faster processing
125
+ const fileSizeMB = typeof batchConfig !== 'number' && batchConfig.fileSizeMB
126
+ ? batchConfig.fileSizeMB
127
+ : buffer.length / (1024 * 1024);
128
+ // Use WASM batches directly - no JS accumulation layer
129
+ // WASM already prioritizes simple geometry (walls, slabs) for fast first frame
130
+ const wasmBatchSize = fileSizeMB < 10 ? 100 : fileSizeMB < 50 ? 200 : fileSizeMB < 100 ? 300 : 500;
131
+ // Use WASM batches directly for maximum throughput
132
+ for await (const item of collector.collectMeshesStreaming(wasmBatchSize)) {
133
+ // Handle color update events
134
+ if (item && typeof item === 'object' && 'type' in item && item.type === 'colorUpdate') {
135
+ yield { type: 'colorUpdate', updates: item.updates };
136
+ continue;
137
+ }
138
+ // Handle mesh batches
139
+ const batch = item;
152
140
  // Process coordinate shifts incrementally (will accumulate bounds)
153
141
  this.coordinateHandler.processMeshesIncremental(batch);
154
142
  totalMeshes += batch.length;
@@ -234,7 +222,7 @@ export class GeometryProcessor {
234
222
  */
235
223
  async *processAdaptive(buffer, options = {}) {
236
224
  const sizeThreshold = options.sizeThreshold ?? 2 * 1024 * 1024; // Default 2MB
237
- const batchSize = options.batchSize ?? 25;
225
+ const batchConfig = options.batchSize ?? 25;
238
226
  if (!this.bridge.isInitialized()) {
239
227
  await this.init();
240
228
  }
@@ -264,17 +252,23 @@ export class GeometryProcessor {
264
252
  else {
265
253
  // Large files: Stream for fast first frame
266
254
  // processStreaming will emit its own start and model-open events
267
- yield* this.processStreaming(buffer, options.entityIndex, batchSize);
255
+ yield* this.processStreaming(buffer, options.entityIndex, batchConfig);
268
256
  }
269
257
  }
258
+ /**
259
+ * Get the WASM API instance for advanced operations (e.g., entity scanning)
260
+ */
261
+ getApi() {
262
+ if (!this.bridge.isInitialized()) {
263
+ return null;
264
+ }
265
+ return this.bridge.getApi();
266
+ }
270
267
  /**
271
268
  * Cleanup resources
272
269
  */
273
270
  dispose() {
274
- if (this.workerPool) {
275
- this.workerPool.terminate();
276
- this.workerPool = null;
277
- }
271
+ // No cleanup needed
278
272
  }
279
273
  }
280
274
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export interface MeshData {
5
5
  expressId: number;
6
+ ifcType?: string;
6
7
  positions: Float32Array;
7
8
  normals: Float32Array;
8
9
  indices: Uint32Array;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;CAChC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,IAAI,CAAC;IACV,GAAG,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,IAAI,CAAC;IAClB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;CAChC"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * WASM Memory Manager - manages zero-copy views into WASM linear memory
3
+ *
4
+ * This module provides safe access to WASM memory for zero-copy GPU uploads.
5
+ * Views are created directly into WASM linear memory, avoiding data copies.
6
+ *
7
+ * IMPORTANT: Views become INVALID when WASM memory grows (any allocation).
8
+ * Use the "immediate upload" pattern:
9
+ * 1. Create view
10
+ * 2. Upload to GPU immediately
11
+ * 3. Discard view reference
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const manager = new WasmMemoryManager(api.getMemory());
16
+ *
17
+ * // SAFE: View created and used immediately
18
+ * const vertexView = manager.createFloat32View(ptr, len);
19
+ * device.queue.writeBuffer(gpuBuffer, 0, vertexView);
20
+ * // View may be invalid now, but we're done with it
21
+ *
22
+ * // UNSAFE: Don't store views across async boundaries!
23
+ * const view = manager.createFloat32View(ptr, len);
24
+ * await someAsyncOp(); // WASM could allocate here!
25
+ * // view might be INVALID now - use would crash!
26
+ * ```
27
+ */
28
+ export interface WasmMemory {
29
+ buffer: ArrayBuffer;
30
+ }
31
+ /**
32
+ * Manages zero-copy TypedArray views into WASM linear memory
33
+ */
34
+ export declare class WasmMemoryManager {
35
+ private memory;
36
+ private cachedBuffer;
37
+ constructor(memory: WasmMemory);
38
+ /**
39
+ * Get current memory buffer, detecting if it has changed (grown)
40
+ */
41
+ private getBuffer;
42
+ /**
43
+ * Create a Float32Array view directly into WASM memory (NO COPY!)
44
+ *
45
+ * WARNING: View becomes invalid if WASM memory grows!
46
+ * Use immediately and discard.
47
+ *
48
+ * @param byteOffset Byte offset into WASM memory (ptr value from Rust)
49
+ * @param length Number of f32 elements (not bytes)
50
+ */
51
+ createFloat32View(byteOffset: number, length: number): Float32Array;
52
+ /**
53
+ * Create a Uint32Array view directly into WASM memory (NO COPY!)
54
+ *
55
+ * @param byteOffset Byte offset into WASM memory
56
+ * @param length Number of u32 elements (not bytes)
57
+ */
58
+ createUint32View(byteOffset: number, length: number): Uint32Array;
59
+ /**
60
+ * Create a Float64Array view directly into WASM memory (NO COPY!)
61
+ *
62
+ * @param byteOffset Byte offset into WASM memory
63
+ * @param length Number of f64 elements (not bytes)
64
+ */
65
+ createFloat64View(byteOffset: number, length: number): Float64Array;
66
+ /**
67
+ * Create a Uint8Array view directly into WASM memory (NO COPY!)
68
+ *
69
+ * @param byteOffset Byte offset into WASM memory
70
+ * @param length Number of bytes
71
+ */
72
+ createUint8View(byteOffset: number, length: number): Uint8Array;
73
+ /**
74
+ * Check if a view is still valid (memory hasn't grown)
75
+ */
76
+ isViewValid(view: ArrayBufferView): boolean;
77
+ /**
78
+ * Get raw ArrayBuffer (for advanced use cases)
79
+ */
80
+ getRawBuffer(): ArrayBuffer;
81
+ /**
82
+ * Check if memory has grown since last access
83
+ */
84
+ hasMemoryGrown(): boolean;
85
+ }
86
+ /**
87
+ * GPU-ready geometry data with pointer access
88
+ * Wraps the WASM GpuGeometry struct for TypeScript use
89
+ */
90
+ export interface GpuGeometryHandle {
91
+ /** Pointer to interleaved vertex data [px,py,pz,nx,ny,nz,...] */
92
+ vertexDataPtr: number;
93
+ /** Length of vertex data in f32 elements */
94
+ vertexDataLen: number;
95
+ /** Byte length of vertex data (for GPU buffer creation) */
96
+ vertexDataByteLength: number;
97
+ /** Pointer to index data */
98
+ indicesPtr: number;
99
+ /** Length of indices in u32 elements */
100
+ indicesLen: number;
101
+ /** Byte length of indices */
102
+ indicesByteLength: number;
103
+ /** Number of meshes in this geometry batch */
104
+ meshCount: number;
105
+ /** Total vertex count */
106
+ totalVertexCount: number;
107
+ /** Total triangle count */
108
+ totalTriangleCount: number;
109
+ /** Check if geometry is empty */
110
+ isEmpty: boolean;
111
+ /** Get metadata for a specific mesh */
112
+ getMeshMetadata(index: number): GpuMeshMetadataHandle | undefined;
113
+ /** Free the geometry (allows WASM to reuse memory) */
114
+ free(): void;
115
+ }
116
+ /**
117
+ * Mesh metadata for draw calls and selection
118
+ */
119
+ export interface GpuMeshMetadataHandle {
120
+ expressId: number;
121
+ ifcTypeIdx: number;
122
+ vertexOffset: number;
123
+ vertexCount: number;
124
+ indexOffset: number;
125
+ indexCount: number;
126
+ color: number[];
127
+ }
128
+ /**
129
+ * GPU-ready instanced geometry with pointer access
130
+ */
131
+ export interface GpuInstancedGeometryHandle {
132
+ /** Geometry ID (hash for deduplication) */
133
+ geometryId: bigint;
134
+ /** Pointer to interleaved vertex data */
135
+ vertexDataPtr: number;
136
+ vertexDataLen: number;
137
+ vertexDataByteLength: number;
138
+ /** Pointer to index data */
139
+ indicesPtr: number;
140
+ indicesLen: number;
141
+ indicesByteLength: number;
142
+ /** Pointer to instance data [transform(16) + color(4)] per instance */
143
+ instanceDataPtr: number;
144
+ instanceDataLen: number;
145
+ instanceDataByteLength: number;
146
+ /** Pointer to express IDs for each instance */
147
+ instanceExpressIdsPtr: number;
148
+ instanceCount: number;
149
+ /** Vertex and triangle counts */
150
+ vertexCount: number;
151
+ triangleCount: number;
152
+ }
153
+ /**
154
+ * Collection of instanced geometries with pointer access
155
+ */
156
+ export interface GpuInstancedGeometryCollectionHandle {
157
+ length: number;
158
+ get(index: number): GpuInstancedGeometryHandle | undefined;
159
+ getRef(index: number): GpuInstancedGeometryRefHandle | undefined;
160
+ }
161
+ /**
162
+ * Reference to instanced geometry (avoids cloning)
163
+ */
164
+ export interface GpuInstancedGeometryRefHandle {
165
+ geometryId: bigint;
166
+ vertexDataPtr: number;
167
+ vertexDataLen: number;
168
+ vertexDataByteLength: number;
169
+ indicesPtr: number;
170
+ indicesLen: number;
171
+ indicesByteLength: number;
172
+ instanceDataPtr: number;
173
+ instanceDataLen: number;
174
+ instanceDataByteLength: number;
175
+ instanceExpressIdsPtr: number;
176
+ instanceCount: number;
177
+ }
178
+ //# sourceMappingURL=wasm-memory-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-memory-manager.d.ts","sourceRoot":"","sources":["../src/wasm-memory-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ /**
5
+ * Manages zero-copy TypedArray views into WASM linear memory
6
+ */
7
+ export class WasmMemoryManager {
8
+ memory;
9
+ cachedBuffer = null;
10
+ constructor(memory) {
11
+ this.memory = memory;
12
+ }
13
+ /**
14
+ * Get current memory buffer, detecting if it has changed (grown)
15
+ */
16
+ getBuffer() {
17
+ const currentBuffer = this.memory.buffer;
18
+ if (this.cachedBuffer !== currentBuffer) {
19
+ // Memory has grown - all existing views are invalid!
20
+ this.cachedBuffer = currentBuffer;
21
+ }
22
+ return currentBuffer;
23
+ }
24
+ /**
25
+ * Create a Float32Array view directly into WASM memory (NO COPY!)
26
+ *
27
+ * WARNING: View becomes invalid if WASM memory grows!
28
+ * Use immediately and discard.
29
+ *
30
+ * @param byteOffset Byte offset into WASM memory (ptr value from Rust)
31
+ * @param length Number of f32 elements (not bytes)
32
+ */
33
+ createFloat32View(byteOffset, length) {
34
+ const buffer = this.getBuffer();
35
+ return new Float32Array(buffer, byteOffset, length);
36
+ }
37
+ /**
38
+ * Create a Uint32Array view directly into WASM memory (NO COPY!)
39
+ *
40
+ * @param byteOffset Byte offset into WASM memory
41
+ * @param length Number of u32 elements (not bytes)
42
+ */
43
+ createUint32View(byteOffset, length) {
44
+ const buffer = this.getBuffer();
45
+ return new Uint32Array(buffer, byteOffset, length);
46
+ }
47
+ /**
48
+ * Create a Float64Array view directly into WASM memory (NO COPY!)
49
+ *
50
+ * @param byteOffset Byte offset into WASM memory
51
+ * @param length Number of f64 elements (not bytes)
52
+ */
53
+ createFloat64View(byteOffset, length) {
54
+ const buffer = this.getBuffer();
55
+ return new Float64Array(buffer, byteOffset, length);
56
+ }
57
+ /**
58
+ * Create a Uint8Array view directly into WASM memory (NO COPY!)
59
+ *
60
+ * @param byteOffset Byte offset into WASM memory
61
+ * @param length Number of bytes
62
+ */
63
+ createUint8View(byteOffset, length) {
64
+ const buffer = this.getBuffer();
65
+ return new Uint8Array(buffer, byteOffset, length);
66
+ }
67
+ /**
68
+ * Check if a view is still valid (memory hasn't grown)
69
+ */
70
+ isViewValid(view) {
71
+ return view.buffer === this.memory.buffer;
72
+ }
73
+ /**
74
+ * Get raw ArrayBuffer (for advanced use cases)
75
+ */
76
+ getRawBuffer() {
77
+ return this.getBuffer();
78
+ }
79
+ /**
80
+ * Check if memory has grown since last access
81
+ */
82
+ hasMemoryGrown() {
83
+ return this.cachedBuffer !== null && this.cachedBuffer !== this.memory.buffer;
84
+ }
85
+ }
86
+ //# sourceMappingURL=wasm-memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-memory-manager.js","sourceRoot":"","sources":["../src/wasm-memory-manager.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkC/D;;GAEG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,CAAa;IACnB,YAAY,GAAuB,IAAI,CAAC;IAEhD,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,SAAS;QACf,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACzC,IAAI,IAAI,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;YACxC,qDAAqD;YACrD,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC;QACpC,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;;;OAQG;IACH,iBAAiB,CAAC,UAAkB,EAAE,MAAc;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,UAAkB,EAAE,MAAc;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,UAAkB,EAAE,MAAc;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,UAAkB,EAAE,MAAc;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAqB;QAC/B,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAChF,CAAC;CACF"}