@ifc-lite/renderer 1.22.2 → 1.24.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/README.md +4 -1
- package/dist/camera-fit-policy.d.ts +65 -0
- package/dist/camera-fit-policy.d.ts.map +1 -0
- package/dist/camera-fit-policy.js +124 -0
- package/dist/camera-fit-policy.js.map +1 -0
- package/dist/camera.d.ts +22 -0
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +38 -0
- package/dist/camera.js.map +1 -1
- package/dist/constants.d.ts +0 -50
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -45
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +11 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -187
- package/dist/index.js.map +1 -1
- package/dist/pipeline.d.ts +0 -57
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +0 -377
- package/dist/pipeline.js.map +1 -1
- package/dist/scene.d.ts +1 -14
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +0 -27
- package/dist/scene.js.map +1 -1
- package/dist/section-2d-overlay.d.ts +16 -0
- package/dist/section-2d-overlay.d.ts.map +1 -1
- package/dist/section-2d-overlay.js +57 -0
- package/dist/section-2d-overlay.js.map +1 -1
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +61 -13
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/types.d.ts +0 -18
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/zero-copy-uploader.d.ts +0 -145
- package/dist/zero-copy-uploader.d.ts.map +0 -1
- package/dist/zero-copy-uploader.js +0 -146
- package/dist/zero-copy-uploader.js.map +0 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* @ifc-lite/renderer - WebGPU renderer
|
|
6
6
|
*/
|
|
7
7
|
export { WebGPUDevice } from './device.js';
|
|
8
|
-
export { RenderPipeline
|
|
8
|
+
export { RenderPipeline } from './pipeline.js';
|
|
9
9
|
export { Camera } from './camera.js';
|
|
10
|
+
export { pickFitPolicy } from './camera-fit-policy.js';
|
|
10
11
|
export { Scene } from './scene.js';
|
|
11
12
|
export { Picker } from './picker.js';
|
|
12
13
|
export { MathUtils } from './math.js';
|
|
@@ -27,8 +28,6 @@ export { SnapDetector, SnapType } from './snap-detector.js';
|
|
|
27
28
|
export { BVH } from './bvh.js';
|
|
28
29
|
export { FederationRegistry, federationRegistry } from './federation-registry.js';
|
|
29
30
|
export * from './types.js';
|
|
30
|
-
// Zero-copy GPU upload (new - faster, less memory)
|
|
31
|
-
export { ZeroCopyGpuUploader, createZeroCopyUploader, } from './zero-copy-uploader.js';
|
|
32
31
|
// Extracted manager classes
|
|
33
32
|
export { PickingManager } from './picking-manager.js';
|
|
34
33
|
export { RaycastEngine } from './raycast-engine.js';
|
|
@@ -37,13 +36,12 @@ export { PointPicker, decodePickSample } from './point-picker.js';
|
|
|
37
36
|
export { PointCloudRenderer } from './pointcloud/point-cloud-renderer.js';
|
|
38
37
|
export { PointRenderPipeline } from './pointcloud/point-pipeline.js';
|
|
39
38
|
import { WebGPUDevice } from './device.js';
|
|
40
|
-
import { RenderPipeline
|
|
39
|
+
import { RenderPipeline } from './pipeline.js';
|
|
41
40
|
import { Camera } from './camera.js';
|
|
42
41
|
import { Scene } from './scene.js';
|
|
43
42
|
import { Picker } from './picker.js';
|
|
44
43
|
import { MathUtils } from './math.js';
|
|
45
44
|
import { FrustumUtils } from '@ifc-lite/spatial';
|
|
46
|
-
import { deduplicateMeshes } from '@ifc-lite/geometry';
|
|
47
45
|
import { SectionPlaneRenderer } from './section-plane.js';
|
|
48
46
|
import { Section2DOverlayRenderer } from './section-2d-overlay.js';
|
|
49
47
|
import { SymbolicFillPipeline, SymbolicTextPipeline, } from './symbolic-overlay-pipelines.js';
|
|
@@ -83,7 +81,6 @@ function computeBvhFingerprint(meshes) {
|
|
|
83
81
|
export class Renderer {
|
|
84
82
|
device;
|
|
85
83
|
pipeline = null;
|
|
86
|
-
instancedPipeline = null;
|
|
87
84
|
camera;
|
|
88
85
|
scene;
|
|
89
86
|
picker = null;
|
|
@@ -170,7 +167,6 @@ export class Renderer {
|
|
|
170
167
|
this.canvas.height = height;
|
|
171
168
|
}
|
|
172
169
|
this.pipeline = new RenderPipeline(this.device, width, height);
|
|
173
|
-
this.instancedPipeline = new InstancedRenderPipeline(this.device, width, height);
|
|
174
170
|
this.picker = new Picker(this.device, width, height);
|
|
175
171
|
this.sectionPlaneRenderer = new SectionPlaneRenderer(this.device.getDevice(), this.device.getFormat(), this.pipeline.getSampleCount());
|
|
176
172
|
this.section2DOverlayRenderer = new Section2DOverlayRenderer(this.device.getDevice(), this.device.getFormat(), this.pipeline.getSampleCount());
|
|
@@ -601,155 +597,6 @@ export class Renderer {
|
|
|
601
597
|
}
|
|
602
598
|
this.scene.addMesh(mesh);
|
|
603
599
|
}
|
|
604
|
-
/**
|
|
605
|
-
* Add instanced geometry to scene
|
|
606
|
-
* Converts InstancedGeometry from geometry package to InstancedMesh for rendering
|
|
607
|
-
*/
|
|
608
|
-
addInstancedGeometry(geometry) {
|
|
609
|
-
if (!this.instancedPipeline || !this.device.isInitialized()) {
|
|
610
|
-
throw new Error('Renderer not initialized. Call init() first.');
|
|
611
|
-
}
|
|
612
|
-
const device = this.device.getDevice();
|
|
613
|
-
// Upload positions and normals interleaved
|
|
614
|
-
const vertexCount = geometry.positions.length / 3;
|
|
615
|
-
const vertexData = new Float32Array(vertexCount * 6);
|
|
616
|
-
for (let i = 0; i < vertexCount; i++) {
|
|
617
|
-
vertexData[i * 6 + 0] = geometry.positions[i * 3 + 0];
|
|
618
|
-
vertexData[i * 6 + 1] = geometry.positions[i * 3 + 1];
|
|
619
|
-
vertexData[i * 6 + 2] = geometry.positions[i * 3 + 2];
|
|
620
|
-
vertexData[i * 6 + 3] = geometry.normals[i * 3 + 0];
|
|
621
|
-
vertexData[i * 6 + 4] = geometry.normals[i * 3 + 1];
|
|
622
|
-
vertexData[i * 6 + 5] = geometry.normals[i * 3 + 2];
|
|
623
|
-
}
|
|
624
|
-
// Create vertex buffer with exact size needed (ensure it matches data size)
|
|
625
|
-
const vertexBufferSize = vertexData.byteLength;
|
|
626
|
-
const vertexBuffer = device.createBuffer({
|
|
627
|
-
size: vertexBufferSize,
|
|
628
|
-
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
629
|
-
});
|
|
630
|
-
device.queue.writeBuffer(vertexBuffer, 0, vertexData);
|
|
631
|
-
// Create index buffer
|
|
632
|
-
const indexBuffer = device.createBuffer({
|
|
633
|
-
size: geometry.indices.byteLength,
|
|
634
|
-
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
635
|
-
});
|
|
636
|
-
device.queue.writeBuffer(indexBuffer, 0, geometry.indices);
|
|
637
|
-
// Create instance buffer: each instance is 80 bytes (20 floats: 16 for transform + 4 for color)
|
|
638
|
-
const instanceCount = geometry.instance_count;
|
|
639
|
-
const instanceData = new Float32Array(instanceCount * 20);
|
|
640
|
-
const expressIdToInstanceIndex = new Map();
|
|
641
|
-
for (let i = 0; i < instanceCount; i++) {
|
|
642
|
-
const instance = geometry.get_instance(i);
|
|
643
|
-
if (!instance)
|
|
644
|
-
continue;
|
|
645
|
-
const baseIdx = i * 20;
|
|
646
|
-
// Copy transform (16 floats)
|
|
647
|
-
instanceData.set(instance.transform, baseIdx);
|
|
648
|
-
// Copy color (4 floats)
|
|
649
|
-
instanceData[baseIdx + 16] = instance.color[0];
|
|
650
|
-
instanceData[baseIdx + 17] = instance.color[1];
|
|
651
|
-
instanceData[baseIdx + 18] = instance.color[2];
|
|
652
|
-
instanceData[baseIdx + 19] = instance.color[3];
|
|
653
|
-
expressIdToInstanceIndex.set(instance.expressId, i);
|
|
654
|
-
}
|
|
655
|
-
const instanceBuffer = device.createBuffer({
|
|
656
|
-
size: instanceData.byteLength,
|
|
657
|
-
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
658
|
-
});
|
|
659
|
-
device.queue.writeBuffer(instanceBuffer, 0, instanceData);
|
|
660
|
-
// Create and cache bind group to avoid per-frame allocation
|
|
661
|
-
const bindGroup = this.instancedPipeline.createInstanceBindGroup(instanceBuffer);
|
|
662
|
-
const instancedMesh = {
|
|
663
|
-
geometryId: Number(geometry.geometryId),
|
|
664
|
-
vertexBuffer,
|
|
665
|
-
indexBuffer,
|
|
666
|
-
indexCount: geometry.indices.length,
|
|
667
|
-
instanceBuffer,
|
|
668
|
-
instanceCount: instanceCount,
|
|
669
|
-
expressIdToInstanceIndex,
|
|
670
|
-
bindGroup,
|
|
671
|
-
};
|
|
672
|
-
this.scene.addInstancedMesh(instancedMesh);
|
|
673
|
-
}
|
|
674
|
-
/**
|
|
675
|
-
* Convert MeshData array to instanced meshes for optimized rendering
|
|
676
|
-
* Groups identical geometries and creates GPU instanced draw calls
|
|
677
|
-
* Call this in background after initial streaming completes
|
|
678
|
-
*/
|
|
679
|
-
convertToInstanced(meshDataArray) {
|
|
680
|
-
if (!this.instancedPipeline || !this.device.isInitialized()) {
|
|
681
|
-
console.warn('[Renderer] Cannot convert to instanced: renderer not initialized');
|
|
682
|
-
return;
|
|
683
|
-
}
|
|
684
|
-
const instancedData = deduplicateMeshes(meshDataArray);
|
|
685
|
-
const device = this.device.getDevice();
|
|
686
|
-
let totalInstances = 0;
|
|
687
|
-
for (const group of instancedData) {
|
|
688
|
-
const vertexCount = group.positions.length / 3;
|
|
689
|
-
const vertexData = new Float32Array(vertexCount * 6);
|
|
690
|
-
for (let i = 0; i < vertexCount; i++) {
|
|
691
|
-
vertexData[i * 6 + 0] = group.positions[i * 3 + 0];
|
|
692
|
-
vertexData[i * 6 + 1] = group.positions[i * 3 + 1];
|
|
693
|
-
vertexData[i * 6 + 2] = group.positions[i * 3 + 2];
|
|
694
|
-
vertexData[i * 6 + 3] = group.normals[i * 3 + 0];
|
|
695
|
-
vertexData[i * 6 + 4] = group.normals[i * 3 + 1];
|
|
696
|
-
vertexData[i * 6 + 5] = group.normals[i * 3 + 2];
|
|
697
|
-
}
|
|
698
|
-
const vertexBuffer = device.createBuffer({
|
|
699
|
-
size: vertexData.byteLength,
|
|
700
|
-
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
701
|
-
});
|
|
702
|
-
device.queue.writeBuffer(vertexBuffer, 0, vertexData);
|
|
703
|
-
const indexBuffer = device.createBuffer({
|
|
704
|
-
size: group.indices.byteLength,
|
|
705
|
-
usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
|
|
706
|
-
});
|
|
707
|
-
device.queue.writeBuffer(indexBuffer, 0, group.indices);
|
|
708
|
-
const instanceCount = group.instances.length;
|
|
709
|
-
const instanceData = new Float32Array(instanceCount * 20);
|
|
710
|
-
const expressIdToInstanceIndex = new Map();
|
|
711
|
-
const identityTransform = new Float32Array([
|
|
712
|
-
1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
|
|
713
|
-
]);
|
|
714
|
-
for (let i = 0; i < instanceCount; i++) {
|
|
715
|
-
const instance = group.instances[i];
|
|
716
|
-
const baseIdx = i * 20;
|
|
717
|
-
instanceData.set(identityTransform, baseIdx);
|
|
718
|
-
instanceData[baseIdx + 16] = instance.color[0];
|
|
719
|
-
instanceData[baseIdx + 17] = instance.color[1];
|
|
720
|
-
instanceData[baseIdx + 18] = instance.color[2];
|
|
721
|
-
instanceData[baseIdx + 19] = instance.color[3];
|
|
722
|
-
expressIdToInstanceIndex.set(instance.expressId, i);
|
|
723
|
-
}
|
|
724
|
-
const instanceBuffer = device.createBuffer({
|
|
725
|
-
size: instanceData.byteLength,
|
|
726
|
-
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
727
|
-
});
|
|
728
|
-
device.queue.writeBuffer(instanceBuffer, 0, instanceData);
|
|
729
|
-
const bindGroup = this.instancedPipeline.createInstanceBindGroup(instanceBuffer);
|
|
730
|
-
let geometryHash = 0;
|
|
731
|
-
for (let i = 0; i < group.geometryHash.length; i++) {
|
|
732
|
-
geometryHash = ((geometryHash << 5) - geometryHash) + group.geometryHash.charCodeAt(i);
|
|
733
|
-
geometryHash = geometryHash & geometryHash;
|
|
734
|
-
}
|
|
735
|
-
this.scene.addInstancedMesh({
|
|
736
|
-
geometryId: Math.abs(geometryHash),
|
|
737
|
-
vertexBuffer,
|
|
738
|
-
indexBuffer,
|
|
739
|
-
indexCount: group.indices.length,
|
|
740
|
-
instanceBuffer,
|
|
741
|
-
instanceCount,
|
|
742
|
-
expressIdToInstanceIndex,
|
|
743
|
-
bindGroup,
|
|
744
|
-
});
|
|
745
|
-
totalInstances += instanceCount;
|
|
746
|
-
}
|
|
747
|
-
const regularMeshCount = this.scene.getMeshes().length;
|
|
748
|
-
this.scene.clearRegularMeshes();
|
|
749
|
-
console.log(`[Renderer] Converted ${meshDataArray.length} meshes to ${instancedData.length} instanced geometries ` +
|
|
750
|
-
`(${totalInstances} total instances, ${(totalInstances / instancedData.length).toFixed(1)}x deduplication). ` +
|
|
751
|
-
`Cleared ${regularMeshCount} regular meshes.`);
|
|
752
|
-
}
|
|
753
600
|
/**
|
|
754
601
|
* Ensure all meshes have GPU resources (call after adding meshes if pipeline wasn't ready)
|
|
755
602
|
*/
|
|
@@ -946,9 +793,6 @@ export class Renderer {
|
|
|
946
793
|
this.device.configureContext();
|
|
947
794
|
// Also resize the depth texture immediately
|
|
948
795
|
this.pipeline.resize(width, height);
|
|
949
|
-
if (this.instancedPipeline) {
|
|
950
|
-
this.instancedPipeline.resize(width, height);
|
|
951
|
-
}
|
|
952
796
|
}
|
|
953
797
|
// Skip rendering if canvas is invalid
|
|
954
798
|
if (this.canvas.width === 0 || this.canvas.height === 0) {
|
|
@@ -1078,9 +922,6 @@ export class Renderer {
|
|
|
1078
922
|
if (this.pipeline.needsResize(this.canvas.width, this.canvas.height)) {
|
|
1079
923
|
this.pipeline.resize(this.canvas.width, this.canvas.height);
|
|
1080
924
|
}
|
|
1081
|
-
if (this.instancedPipeline?.needsResize(this.canvas.width, this.canvas.height)) {
|
|
1082
|
-
this.instancedPipeline.resize(this.canvas.width, this.canvas.height);
|
|
1083
|
-
}
|
|
1084
925
|
// Push a validation error scope to capture the EXACT error (for mobile debugging)
|
|
1085
926
|
// Only do this for the first few renders to avoid performance overhead
|
|
1086
927
|
const captureGpuError = this._renderCallCount <= 5;
|
|
@@ -1851,29 +1692,6 @@ export class Renderer {
|
|
|
1851
1692
|
}
|
|
1852
1693
|
}
|
|
1853
1694
|
}
|
|
1854
|
-
// Render instanced meshes (much more efficient for repeated geometry)
|
|
1855
|
-
if (this.instancedPipeline) {
|
|
1856
|
-
const instancedMeshes = this.scene.getInstancedMeshes();
|
|
1857
|
-
if (instancedMeshes.length > 0) {
|
|
1858
|
-
// Update instanced pipeline uniforms
|
|
1859
|
-
this.instancedPipeline.updateUniforms(viewProj, sectionPlaneData
|
|
1860
|
-
? { ...sectionPlaneData, flipped: options.sectionPlane?.flipped === true }
|
|
1861
|
-
: undefined);
|
|
1862
|
-
// Switch to instanced pipeline
|
|
1863
|
-
pass.setPipeline(this.instancedPipeline.getPipeline());
|
|
1864
|
-
for (const instancedMesh of instancedMeshes) {
|
|
1865
|
-
// Use cached bind group (created at mesh upload time)
|
|
1866
|
-
// Falls back to creating one if missing (shouldn't happen in normal flow)
|
|
1867
|
-
const bindGroup = instancedMesh.bindGroup ??
|
|
1868
|
-
this.instancedPipeline.createInstanceBindGroup(instancedMesh.instanceBuffer);
|
|
1869
|
-
pass.setBindGroup(0, bindGroup);
|
|
1870
|
-
pass.setVertexBuffer(0, instancedMesh.vertexBuffer);
|
|
1871
|
-
pass.setIndexBuffer(instancedMesh.indexBuffer, 'uint32');
|
|
1872
|
-
// Draw with instancing: indexCount, instanceCount
|
|
1873
|
-
pass.drawIndexed(instancedMesh.indexCount, instancedMesh.instanceCount, 0, 0, 0);
|
|
1874
|
-
}
|
|
1875
|
-
}
|
|
1876
|
-
}
|
|
1877
1695
|
// Draw point clouds (IFCx inline + streamed LAS/LAZ).
|
|
1878
1696
|
// Shares the depth buffer + section plane state with the mesh pipeline so
|
|
1879
1697
|
// points occlude triangles and vice versa. The splat shader needs the
|
|
@@ -1960,6 +1778,9 @@ export class Renderer {
|
|
|
1960
1778
|
if (this.section2DOverlayRenderer?.hasAnnotationLines3D()) {
|
|
1961
1779
|
this.section2DOverlayRenderer.drawAnnotationLines3D(pass, viewProj);
|
|
1962
1780
|
}
|
|
1781
|
+
if (this.section2DOverlayRenderer?.hasAlignmentLines3D()) {
|
|
1782
|
+
this.section2DOverlayRenderer.drawAlignmentLines3D(pass, viewProj);
|
|
1783
|
+
}
|
|
1963
1784
|
if (this.symbolicTextPipeline?.hasGeometry()) {
|
|
1964
1785
|
// Pass viewport pixel dimensions so the shader can scale glyphs
|
|
1965
1786
|
// to a constant on-screen size (BIMvision-style annotations)
|
|
@@ -2309,6 +2130,29 @@ export class Renderer {
|
|
|
2309
2130
|
this.requestRender();
|
|
2310
2131
|
}
|
|
2311
2132
|
}
|
|
2133
|
+
/**
|
|
2134
|
+
* Upload IfcAlignment centerline segments as a flat [x,y,z,x,y,z,...]
|
|
2135
|
+
* line-list in world space. Rendered as thin lines (not a ribbon mesh)
|
|
2136
|
+
* to match IfcGrid / IfcAnnotation. Pass an empty Float32Array to clear.
|
|
2137
|
+
*/
|
|
2138
|
+
uploadAlignmentLines3D(vertices) {
|
|
2139
|
+
if (!this.section2DOverlayRenderer)
|
|
2140
|
+
return;
|
|
2141
|
+
this.section2DOverlayRenderer.uploadAlignmentLines3D(vertices);
|
|
2142
|
+
// Frame alignment-only files the same way annotation overlays are
|
|
2143
|
+
// framed (see uploadAnnotationLines3D).
|
|
2144
|
+
this.expandModelBoundsWithFlatVertices(vertices, 3);
|
|
2145
|
+
if (this.modelBounds)
|
|
2146
|
+
this.camera.setSceneBounds(this.modelBounds);
|
|
2147
|
+
this.requestRender();
|
|
2148
|
+
}
|
|
2149
|
+
/** Clear the alignment centerline overlay. */
|
|
2150
|
+
clearAlignmentLines3D() {
|
|
2151
|
+
if (this.section2DOverlayRenderer) {
|
|
2152
|
+
this.section2DOverlayRenderer.clearAlignmentLines3D();
|
|
2153
|
+
this.requestRender();
|
|
2154
|
+
}
|
|
2155
|
+
}
|
|
2312
2156
|
/**
|
|
2313
2157
|
* Upload filled IfcAnnotation regions for the symbolic overlay
|
|
2314
2158
|
* (issue #653). Pass an empty array to clear.
|
|
@@ -2427,8 +2271,6 @@ export class Renderer {
|
|
|
2427
2271
|
// Render pipelines (textures + uniform buffers)
|
|
2428
2272
|
this.pipeline?.destroy();
|
|
2429
2273
|
this.pipeline = null;
|
|
2430
|
-
this.instancedPipeline?.destroy();
|
|
2431
|
-
this.instancedPipeline = null;
|
|
2432
2274
|
// Picker GPU resources
|
|
2433
2275
|
this.picker?.destroy();
|
|
2434
2276
|
this.picker = null;
|