@ifc-lite/renderer 1.20.1 → 1.22.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.
@@ -49,6 +49,13 @@ export class Section2DOverlayRenderer {
49
49
  fillIndexCount = 0;
50
50
  lineVertexBuffer = null;
51
51
  lineVertexCount = 0;
52
+ // Standalone 3D annotation line overlay. Same line pipeline as the section
53
+ // cut, but vertices are already in world space when uploaded so the draw
54
+ // does not depend on a section plane being active. Used by the
55
+ // "Show IFC Annotations" toggle so that authored 2D drawing curves
56
+ // (IfcAnnotation polylines/arcs) are visible in any view.
57
+ annotationLineVertexBuffer = null;
58
+ annotationLineVertexCount = 0;
52
59
  constructor(device, format, sampleCount = 4) {
53
60
  this.device = device;
54
61
  this.format = format;
@@ -527,6 +534,65 @@ export class Section2DOverlayRenderer {
527
534
  this.fillIndexCount = 0;
528
535
  this.lineVertexCount = 0;
529
536
  }
537
+ /**
538
+ * Upload a flat Float32Array of 3D line-list vertices for the standalone
539
+ * annotation overlay. Each segment is `[x1, y1, z1, x2, y2, z2]` in world
540
+ * space. The buffer is independent of the section cut's line buffer and
541
+ * is drawn regardless of `sectionPlane.enabled`.
542
+ *
543
+ * Pass an empty array (or omit) to clear.
544
+ */
545
+ uploadAnnotationLines3D(vertices) {
546
+ this.init();
547
+ if (this.annotationLineVertexBuffer) {
548
+ this.annotationLineVertexBuffer.destroy();
549
+ this.annotationLineVertexBuffer = null;
550
+ }
551
+ this.annotationLineVertexCount = 0;
552
+ if (vertices.length < 6)
553
+ return;
554
+ this.annotationLineVertexBuffer = this.device.createBuffer({
555
+ size: vertices.byteLength,
556
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
557
+ });
558
+ this.device.queue.writeBuffer(this.annotationLineVertexBuffer, 0, vertices);
559
+ this.annotationLineVertexCount = vertices.length / 3;
560
+ }
561
+ clearAnnotationLines3D() {
562
+ if (this.annotationLineVertexBuffer) {
563
+ this.annotationLineVertexBuffer.destroy();
564
+ this.annotationLineVertexBuffer = null;
565
+ }
566
+ this.annotationLineVertexCount = 0;
567
+ }
568
+ hasAnnotationLines3D() {
569
+ return this.annotationLineVertexCount > 0;
570
+ }
571
+ /**
572
+ * Draw the standalone annotation line overlay. Uses the same line pipeline
573
+ * as the section cut outlines (vertex format: 3 floats per vertex, line-list
574
+ * topology) but reads from a separate vertex buffer. The pipeline's
575
+ * `planeOffset` uniform is zeroed so vertices render at their authored
576
+ * world position.
577
+ */
578
+ drawAnnotationLines3D(pass, viewProj) {
579
+ this.init();
580
+ if (!this.linePipeline || !this.uniformBuffer || !this.bindGroup)
581
+ return;
582
+ if (!this.annotationLineVertexBuffer || this.annotationLineVertexCount === 0)
583
+ return;
584
+ // Reuse the existing fill uniform buffer slot 0 (viewProj + planeOffset).
585
+ // The line shader only reads those two fields, so the fill/cap-style
586
+ // tail of the uniforms is harmless leftover data.
587
+ const uniforms = new Float32Array(20);
588
+ uniforms.set(viewProj, 0);
589
+ // planeOffset = 0 — vertices are already in world space.
590
+ this.device.queue.writeBuffer(this.uniformBuffer, 0, uniforms);
591
+ pass.setPipeline(this.linePipeline);
592
+ pass.setBindGroup(0, this.bindGroup);
593
+ pass.setVertexBuffer(0, this.annotationLineVertexBuffer);
594
+ pass.draw(this.annotationLineVertexCount);
595
+ }
530
596
  /**
531
597
  * Check if there is geometry to draw
532
598
  */
@@ -634,6 +700,7 @@ export class Section2DOverlayRenderer {
634
700
  */
635
701
  dispose() {
636
702
  this.clearGeometry();
703
+ this.clearAnnotationLines3D();
637
704
  if (this.uniformBuffer) {
638
705
  this.uniformBuffer.destroy();
639
706
  this.uniformBuffer = null;
@@ -1 +1 @@
1
- {"version":3,"file":"section-2d-overlay.js","sourceRoot":"","sources":["../src/section-2d-overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"section-2d-overlay.js","sourceRoot":"","sources":["../src/section-2d-overlay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * WGSL shaders for the IfcAnnotation overlay (fills + text labels).
3
+ *
4
+ * Two pipelines share this file because they ride the same camera uniform
5
+ * layout and write into the same RGBA-blended pass. Splitting per-pipeline
6
+ * would mean two near-identical vertex inputs and duplicate camera structs.
7
+ */
8
+ export declare const SYMBOLIC_FILL_WGSL = "\nstruct Camera {\n viewProj: mat4x4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> camera: Camera;\n\nstruct VsIn {\n @location(0) position: vec3<f32>,\n @location(1) color: vec4<f32>,\n};\n\nstruct VsOut {\n @builtin(position) clipPos: vec4<f32>,\n @location(0) color: vec4<f32>,\n};\n\n@vertex\nfn vs_main(in: VsIn) -> VsOut {\n var out: VsOut;\n out.clipPos = camera.viewProj * vec4<f32>(in.position, 1.0);\n out.color = in.color;\n return out;\n}\n\n@fragment\nfn fs_main(in: VsOut) -> @location(0) vec4<f32> {\n // Premultiply alpha so the standard \"src * 1 + dst * (1-src.a)\" blend\n // produces the correct composite on top of the existing scene.\n return vec4<f32>(in.color.rgb * in.color.a, in.color.a);\n}\n";
9
+ export declare const SYMBOLIC_TEXT_WGSL = "\nstruct Camera {\n viewProj: mat4x4<f32>,\n // x = viewport width in physical pixels, y = viewport height\n // z = target glyph cap-height in screen pixels, w = padding\n viewportAndTarget: vec4<f32>,\n // Screen-aligned camera basis (world space). xyz = direction, w = padding.\n // Used by billboarded glyphs (grid tags) so they always face the camera \u2014\n // critical for top-down/ground views where world-up upAxis collapses to\n // zero screen extent and the tag becomes invisible.\n cameraRight: vec4<f32>,\n cameraUp: vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> camera: Camera;\n@group(0) @binding(1) var atlasTex: texture_2d<f32>;\n@group(0) @binding(2) var atlasSamp: sampler;\n\n// Per-vertex (corner of the glyph quad).\nstruct VsIn {\n // Bit-packed corner index 0..3. The vertex buffer is just [0u, 1u, 2u, 3u].\n @location(0) corner: u32,\n};\n\n// Per-instance attributes \u2014 one record per glyph.\nstruct InstIn {\n // World-space origin of the glyph (bottom-left, after alignment + rotation).\n @location(1) origin: vec3<f32>,\n // Right axis in world space \u2014 encodes both glyph width and baseline rotation.\n @location(2) rightAxis: vec3<f32>,\n // Up axis in world space \u2014 encodes glyph height and baseline rotation.\n @location(3) upAxis: vec3<f32>,\n // Atlas UV bounds: (u0, v0, u1, v1).\n @location(4) uvBounds: vec4<f32>,\n // Glyph tint (sRGB straight-alpha).\n @location(5) color: vec4<f32>,\n // Shared text-label anchor (every glyph in the same label uses the same\n // anchor). Lets the shader compute one screen-space scale per label and\n // apply it uniformly to every glyph offset so row spacing stays in sync.\n @location(6) anchor: vec3<f32>,\n // Authored cap height in world units. Same value for every glyph in the\n // label; used to convert \"target pixels\" into a scale factor.\n @location(7) capHeight: f32,\n // Billboard flag (1.0 = use camera-aligned axes, 0.0 = use authored\n // rightAxis/upAxis). Only the grid-tag emission path sets this to 1.0.\n @location(8) billboard: f32,\n // Per-glyph baseline-relative offset + size in WORLD units. Only used\n // when billboard=1 (the authored origin bakes the offset along the\n // floor-plane basis, which is the wrong direction for camera-aligned\n // text). For non-billboard glyphs these are written too but the shader\n // picks the authored path. World units = atlas-pixel * wScale.\n // .xy = (offsetX, offsetY) from anchor to glyph BL\n // .zw = (width, height) of the glyph quad\n @location(9) glyphOffsetSize: vec4<f32>,\n // Per-instance target cap height in screen pixels. 0 = fall back to\n // the renderer global default (viewportAndTarget.z). Grid bubble\n // glyphs override with a larger value so the bubble stays proportional\n // to the tag at every zoom level.\n @location(10) targetPxOverride: f32,\n};\n\nstruct VsOut {\n @builtin(position) clipPos: vec4<f32>,\n @location(0) uv: vec2<f32>,\n @location(1) color: vec4<f32>,\n};\n\n@vertex\nfn vs_main(in: VsIn, inst: InstIn) -> VsOut {\n // Map corner index to (u, v) in [0, 1] \u2014 the four quad corners.\n // 0 = bottom-left, 1 = bottom-right, 2 = top-left, 3 = top-right.\n let u = f32((in.corner & 1u)); // 0,1,0,1\n let v = f32((in.corner >> 1u) & 1u); // 0,0,1,1\n\n // \u2500\u2500 Screen-space text scaling (projection-agnostic) \u2500\u2500\n // For non-billboard glyphs measure world-Y \u2192 screen pixels (matches the\n // authored upAxis convention). For billboard glyphs measure cameraUp \u2192\n // screen pixels \u2014 that axis ALWAYS spans the full viewport height\n // regardless of view angle, so screen-space scaling stays correct in\n // top-down / ground / oblique views.\n let isBillboard = inst.billboard > 0.5;\n let scaleProbeAxis = select(vec3<f32>(0.0, 1.0, 0.0), camera.cameraUp.xyz, isBillboard);\n let aClip = camera.viewProj * vec4<f32>(inst.anchor, 1.0);\n let bClip = camera.viewProj * vec4<f32>(inst.anchor + scaleProbeAxis, 1.0);\n let aNdc = aClip.xy / max(abs(aClip.w), 1e-4);\n let bNdc = bClip.xy / max(abs(bClip.w), 1e-4);\n let unitYPx = length(bNdc - aNdc) * camera.viewportAndTarget.y * 0.5;\n\n let safeCap = max(inst.capHeight, 1e-4);\n let currentPx = safeCap * unitYPx;\n // Per-instance target overrides the uniform default (used by grid bubble\n // glyphs to render at a larger on-screen size than the inscribed tag).\n let targetPx = select(camera.viewportAndTarget.z, inst.targetPxOverride, inst.targetPxOverride > 0.0);\n // Clamp to (0.02, 1.0]: never grow text beyond authored size; never\n // shrink below ~2%.\n let scale = clamp(\n targetPx / max(currentPx, 1e-2),\n 0.02,\n 1.0,\n );\n\n // \u2500\u2500 Position the glyph quad in world space \u2500\u2500\n // Non-billboard: authored axes (text lies in the floor plane of its\n // annotation \u2014 IFC convention). Billboard: camera-aligned axes (text\n // always faces the camera \u2014 grid-tag convention).\n let authoredLocalOffset = inst.origin - inst.anchor;\n let authoredWorldPos =\n inst.anchor\n + authoredLocalOffset * scale\n + inst.rightAxis * scale * u\n + inst.upAxis * scale * v;\n\n // Billboard: rebuild the quad in screen-aligned camera basis. glyphOffsetSize\n // carries the same 2D atlas-pixel layout the upload computed, just in\n // world units \u2014 re-project onto (cameraRight, cameraUp) so it tracks the\n // viewer's eye in every orientation.\n let bbOffsetX = inst.glyphOffsetSize.x;\n let bbOffsetY = inst.glyphOffsetSize.y;\n let bbWidth = inst.glyphOffsetSize.z;\n let bbHeight = inst.glyphOffsetSize.w;\n let billboardWorldPos =\n inst.anchor\n + (camera.cameraRight.xyz * bbOffsetX + camera.cameraUp.xyz * bbOffsetY) * scale\n + (camera.cameraRight.xyz * bbWidth * u\n + camera.cameraUp.xyz * bbHeight * v) * scale;\n\n let worldPos = select(authoredWorldPos, billboardWorldPos, isBillboard);\n\n // UV: lerp atlas bounds. Note v inverted (atlas top is v=0).\n let uMix = mix(inst.uvBounds.x, inst.uvBounds.z, u);\n let vMix = mix(inst.uvBounds.w, inst.uvBounds.y, v);\n\n var out: VsOut;\n out.clipPos = camera.viewProj * vec4<f32>(worldPos, 1.0);\n out.uv = vec2<f32>(uMix, vMix);\n out.color = inst.color;\n return out;\n}\n\n@fragment\nfn fs_main(in: VsOut) -> @location(0) vec4<f32> {\n let atlas = textureSample(atlasTex, atlasSamp, in.uv);\n // The atlas was rasterised with white glyphs on a transparent background,\n // so atlas.r is the coverage and atlas.a is the alpha. Multiply by the\n // per-glyph tint and premultiply for the standard composite.\n let alpha = atlas.a * in.color.a;\n return vec4<f32>(in.color.rgb * alpha, alpha);\n}\n";
10
+ //# sourceMappingURL=symbolic-overlay.wgsl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolic-overlay.wgsl.d.ts","sourceRoot":"","sources":["../../src/shaders/symbolic-overlay.wgsl.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,eAAO,MAAM,kBAAkB,+uBA+B9B,CAAC;AAEF,eAAO,MAAM,kBAAkB,wnNAoJ9B,CAAC"}
@@ -0,0 +1,192 @@
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
+ * WGSL shaders for the IfcAnnotation overlay (fills + text labels).
6
+ *
7
+ * Two pipelines share this file because they ride the same camera uniform
8
+ * layout and write into the same RGBA-blended pass. Splitting per-pipeline
9
+ * would mean two near-identical vertex inputs and duplicate camera structs.
10
+ */
11
+ export const SYMBOLIC_FILL_WGSL = /* wgsl */ `
12
+ struct Camera {
13
+ viewProj: mat4x4<f32>,
14
+ };
15
+
16
+ @group(0) @binding(0) var<uniform> camera: Camera;
17
+
18
+ struct VsIn {
19
+ @location(0) position: vec3<f32>,
20
+ @location(1) color: vec4<f32>,
21
+ };
22
+
23
+ struct VsOut {
24
+ @builtin(position) clipPos: vec4<f32>,
25
+ @location(0) color: vec4<f32>,
26
+ };
27
+
28
+ @vertex
29
+ fn vs_main(in: VsIn) -> VsOut {
30
+ var out: VsOut;
31
+ out.clipPos = camera.viewProj * vec4<f32>(in.position, 1.0);
32
+ out.color = in.color;
33
+ return out;
34
+ }
35
+
36
+ @fragment
37
+ fn fs_main(in: VsOut) -> @location(0) vec4<f32> {
38
+ // Premultiply alpha so the standard "src * 1 + dst * (1-src.a)" blend
39
+ // produces the correct composite on top of the existing scene.
40
+ return vec4<f32>(in.color.rgb * in.color.a, in.color.a);
41
+ }
42
+ `;
43
+ export const SYMBOLIC_TEXT_WGSL = /* wgsl */ `
44
+ struct Camera {
45
+ viewProj: mat4x4<f32>,
46
+ // x = viewport width in physical pixels, y = viewport height
47
+ // z = target glyph cap-height in screen pixels, w = padding
48
+ viewportAndTarget: vec4<f32>,
49
+ // Screen-aligned camera basis (world space). xyz = direction, w = padding.
50
+ // Used by billboarded glyphs (grid tags) so they always face the camera —
51
+ // critical for top-down/ground views where world-up upAxis collapses to
52
+ // zero screen extent and the tag becomes invisible.
53
+ cameraRight: vec4<f32>,
54
+ cameraUp: vec4<f32>,
55
+ };
56
+
57
+ @group(0) @binding(0) var<uniform> camera: Camera;
58
+ @group(0) @binding(1) var atlasTex: texture_2d<f32>;
59
+ @group(0) @binding(2) var atlasSamp: sampler;
60
+
61
+ // Per-vertex (corner of the glyph quad).
62
+ struct VsIn {
63
+ // Bit-packed corner index 0..3. The vertex buffer is just [0u, 1u, 2u, 3u].
64
+ @location(0) corner: u32,
65
+ };
66
+
67
+ // Per-instance attributes — one record per glyph.
68
+ struct InstIn {
69
+ // World-space origin of the glyph (bottom-left, after alignment + rotation).
70
+ @location(1) origin: vec3<f32>,
71
+ // Right axis in world space — encodes both glyph width and baseline rotation.
72
+ @location(2) rightAxis: vec3<f32>,
73
+ // Up axis in world space — encodes glyph height and baseline rotation.
74
+ @location(3) upAxis: vec3<f32>,
75
+ // Atlas UV bounds: (u0, v0, u1, v1).
76
+ @location(4) uvBounds: vec4<f32>,
77
+ // Glyph tint (sRGB straight-alpha).
78
+ @location(5) color: vec4<f32>,
79
+ // Shared text-label anchor (every glyph in the same label uses the same
80
+ // anchor). Lets the shader compute one screen-space scale per label and
81
+ // apply it uniformly to every glyph offset so row spacing stays in sync.
82
+ @location(6) anchor: vec3<f32>,
83
+ // Authored cap height in world units. Same value for every glyph in the
84
+ // label; used to convert "target pixels" into a scale factor.
85
+ @location(7) capHeight: f32,
86
+ // Billboard flag (1.0 = use camera-aligned axes, 0.0 = use authored
87
+ // rightAxis/upAxis). Only the grid-tag emission path sets this to 1.0.
88
+ @location(8) billboard: f32,
89
+ // Per-glyph baseline-relative offset + size in WORLD units. Only used
90
+ // when billboard=1 (the authored origin bakes the offset along the
91
+ // floor-plane basis, which is the wrong direction for camera-aligned
92
+ // text). For non-billboard glyphs these are written too but the shader
93
+ // picks the authored path. World units = atlas-pixel * wScale.
94
+ // .xy = (offsetX, offsetY) from anchor to glyph BL
95
+ // .zw = (width, height) of the glyph quad
96
+ @location(9) glyphOffsetSize: vec4<f32>,
97
+ // Per-instance target cap height in screen pixels. 0 = fall back to
98
+ // the renderer global default (viewportAndTarget.z). Grid bubble
99
+ // glyphs override with a larger value so the bubble stays proportional
100
+ // to the tag at every zoom level.
101
+ @location(10) targetPxOverride: f32,
102
+ };
103
+
104
+ struct VsOut {
105
+ @builtin(position) clipPos: vec4<f32>,
106
+ @location(0) uv: vec2<f32>,
107
+ @location(1) color: vec4<f32>,
108
+ };
109
+
110
+ @vertex
111
+ fn vs_main(in: VsIn, inst: InstIn) -> VsOut {
112
+ // Map corner index to (u, v) in [0, 1] — the four quad corners.
113
+ // 0 = bottom-left, 1 = bottom-right, 2 = top-left, 3 = top-right.
114
+ let u = f32((in.corner & 1u)); // 0,1,0,1
115
+ let v = f32((in.corner >> 1u) & 1u); // 0,0,1,1
116
+
117
+ // ── Screen-space text scaling (projection-agnostic) ──
118
+ // For non-billboard glyphs measure world-Y → screen pixels (matches the
119
+ // authored upAxis convention). For billboard glyphs measure cameraUp →
120
+ // screen pixels — that axis ALWAYS spans the full viewport height
121
+ // regardless of view angle, so screen-space scaling stays correct in
122
+ // top-down / ground / oblique views.
123
+ let isBillboard = inst.billboard > 0.5;
124
+ let scaleProbeAxis = select(vec3<f32>(0.0, 1.0, 0.0), camera.cameraUp.xyz, isBillboard);
125
+ let aClip = camera.viewProj * vec4<f32>(inst.anchor, 1.0);
126
+ let bClip = camera.viewProj * vec4<f32>(inst.anchor + scaleProbeAxis, 1.0);
127
+ let aNdc = aClip.xy / max(abs(aClip.w), 1e-4);
128
+ let bNdc = bClip.xy / max(abs(bClip.w), 1e-4);
129
+ let unitYPx = length(bNdc - aNdc) * camera.viewportAndTarget.y * 0.5;
130
+
131
+ let safeCap = max(inst.capHeight, 1e-4);
132
+ let currentPx = safeCap * unitYPx;
133
+ // Per-instance target overrides the uniform default (used by grid bubble
134
+ // glyphs to render at a larger on-screen size than the inscribed tag).
135
+ let targetPx = select(camera.viewportAndTarget.z, inst.targetPxOverride, inst.targetPxOverride > 0.0);
136
+ // Clamp to (0.02, 1.0]: never grow text beyond authored size; never
137
+ // shrink below ~2%.
138
+ let scale = clamp(
139
+ targetPx / max(currentPx, 1e-2),
140
+ 0.02,
141
+ 1.0,
142
+ );
143
+
144
+ // ── Position the glyph quad in world space ──
145
+ // Non-billboard: authored axes (text lies in the floor plane of its
146
+ // annotation — IFC convention). Billboard: camera-aligned axes (text
147
+ // always faces the camera — grid-tag convention).
148
+ let authoredLocalOffset = inst.origin - inst.anchor;
149
+ let authoredWorldPos =
150
+ inst.anchor
151
+ + authoredLocalOffset * scale
152
+ + inst.rightAxis * scale * u
153
+ + inst.upAxis * scale * v;
154
+
155
+ // Billboard: rebuild the quad in screen-aligned camera basis. glyphOffsetSize
156
+ // carries the same 2D atlas-pixel layout the upload computed, just in
157
+ // world units — re-project onto (cameraRight, cameraUp) so it tracks the
158
+ // viewer's eye in every orientation.
159
+ let bbOffsetX = inst.glyphOffsetSize.x;
160
+ let bbOffsetY = inst.glyphOffsetSize.y;
161
+ let bbWidth = inst.glyphOffsetSize.z;
162
+ let bbHeight = inst.glyphOffsetSize.w;
163
+ let billboardWorldPos =
164
+ inst.anchor
165
+ + (camera.cameraRight.xyz * bbOffsetX + camera.cameraUp.xyz * bbOffsetY) * scale
166
+ + (camera.cameraRight.xyz * bbWidth * u
167
+ + camera.cameraUp.xyz * bbHeight * v) * scale;
168
+
169
+ let worldPos = select(authoredWorldPos, billboardWorldPos, isBillboard);
170
+
171
+ // UV: lerp atlas bounds. Note v inverted (atlas top is v=0).
172
+ let uMix = mix(inst.uvBounds.x, inst.uvBounds.z, u);
173
+ let vMix = mix(inst.uvBounds.w, inst.uvBounds.y, v);
174
+
175
+ var out: VsOut;
176
+ out.clipPos = camera.viewProj * vec4<f32>(worldPos, 1.0);
177
+ out.uv = vec2<f32>(uMix, vMix);
178
+ out.color = inst.color;
179
+ return out;
180
+ }
181
+
182
+ @fragment
183
+ fn fs_main(in: VsOut) -> @location(0) vec4<f32> {
184
+ let atlas = textureSample(atlasTex, atlasSamp, in.uv);
185
+ // The atlas was rasterised with white glyphs on a transparent background,
186
+ // so atlas.r is the coverage and atlas.a is the alpha. Multiply by the
187
+ // per-glyph tint and premultiply for the standard composite.
188
+ let alpha = atlas.a * in.color.a;
189
+ return vec4<f32>(in.color.rgb * alpha, alpha);
190
+ }
191
+ `;
192
+ //# sourceMappingURL=symbolic-overlay.wgsl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolic-overlay.wgsl.js","sourceRoot":"","sources":["../../src/shaders/symbolic-overlay.wgsl.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B5C,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoJ5C,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * WebGPU pipelines for IfcAnnotation overlays — filled regions and text
3
+ * labels. Each pipeline is self-contained (owns its own buffers, bind groups,
4
+ * pipeline state, optional atlas texture) and exposes a `render(pass,
5
+ * viewProj)` entry point that the caller invokes from inside an existing
6
+ * RGBA-blended render pass.
7
+ *
8
+ * Triangulation: simple ear-clipping for polygon-with-optional-holes,
9
+ * inlined below to avoid adding a dependency. Good enough for typical IFC
10
+ * fill regions (rooms, hatched zones) which are usually convex or near-convex.
11
+ * Pathological concave shapes with many holes may show tessellation glitches —
12
+ * an `earcut` upgrade is straightforward when it matters.
13
+ */
14
+ import { SymbolicTextAtlas } from './symbolic-text-atlas.js';
15
+ export interface SymbolicFillInput {
16
+ /** Flat ring buffer: [x, z, x, z, …]. Y is taken from `worldY`. */
17
+ points: Float32Array;
18
+ /** Vertex indices marking the start of each hole. Empty = no holes. */
19
+ holesOffsets: Uint32Array;
20
+ worldY: number;
21
+ /** Straight-alpha RGBA in [0..1]. The shader premultiplies. */
22
+ color: [number, number, number, number];
23
+ }
24
+ export interface SymbolicTextInput {
25
+ worldPos: [number, number, number];
26
+ /** Baseline direction (X axis in 3D world space). */
27
+ dirX: number;
28
+ dirZ: number;
29
+ /** Glyph height in world units. */
30
+ height: number;
31
+ content: string;
32
+ /** IFC BoxAlignment ("bottom-left", "center", "top-right", …). */
33
+ alignment: string;
34
+ color?: [number, number, number, number];
35
+ /**
36
+ * When true, the shader rebuilds the glyph quad in screen-aligned
37
+ * (cameraRight, cameraUp) basis so the text always faces the camera.
38
+ * Used for IfcGridAxis bubble tags — they must stay readable in
39
+ * top-down/ground views where the authored world-Y up axis collapses.
40
+ * Defaults to false (authored, in-plane text).
41
+ */
42
+ billboard?: boolean;
43
+ /**
44
+ * Per-instance target cap height in screen pixels. 0 / undefined falls
45
+ * back to the renderer's global default (~14 px). Grid bubble fills +
46
+ * outlines emit at ~32 px so the bubble stays proportional to the
47
+ * inscribed tag at every zoom level — without this override they'd
48
+ * collapse to the same screen size as the tag and the bubble would
49
+ * disappear behind the character.
50
+ */
51
+ targetPx?: number;
52
+ }
53
+ export declare class SymbolicFillPipeline {
54
+ private readonly device;
55
+ private readonly format;
56
+ private readonly sampleCount;
57
+ private pipeline;
58
+ private bindGroupLayout;
59
+ private uniformBuffer;
60
+ private bindGroup;
61
+ private vertexBuffer;
62
+ private vertexCount;
63
+ constructor(device: GPUDevice, presentationFormat: GPUTextureFormat, sampleCount?: number);
64
+ private init;
65
+ /**
66
+ * Upload a list of fill regions. Each region is triangulated (ear-clipping,
67
+ * holes-aware) into a single shared vertex buffer.
68
+ *
69
+ * Pass an empty array to clear. Triangulation skips degenerate rings
70
+ * (< 3 vertices) and silently drops any hole that can't be merged into the
71
+ * outer ring (rare; usually overlapping rings in malformed IFC).
72
+ */
73
+ upload(fills: readonly SymbolicFillInput[]): void;
74
+ hasGeometry(): boolean;
75
+ render(pass: GPURenderPassEncoder, viewProj: Float32Array): void;
76
+ destroy(): void;
77
+ }
78
+ export declare class SymbolicTextPipeline {
79
+ private readonly device;
80
+ private readonly format;
81
+ private readonly sampleCount;
82
+ private readonly atlas;
83
+ private pipeline;
84
+ private bindGroupLayout;
85
+ private uniformBuffer;
86
+ private cornerBuffer;
87
+ private instanceBuffer;
88
+ private atlasTexture;
89
+ private atlasView;
90
+ private sampler;
91
+ private bindGroup;
92
+ private instanceCount;
93
+ private uploadedAtlasVersion;
94
+ constructor(device: GPUDevice, presentationFormat: GPUTextureFormat, sampleCount?: number, atlas?: SymbolicTextAtlas);
95
+ /** Expose the atlas so the upload pre-warms glyphs before instance encoding. */
96
+ getAtlas(): SymbolicTextAtlas;
97
+ private init;
98
+ /** Re-upload the atlas to a GPUTexture when its version changes. */
99
+ private syncAtlasTexture;
100
+ private ensureBindGroup;
101
+ /**
102
+ * Lay out the given text labels into the atlas, encode an instance buffer,
103
+ * and upload to the GPU. Pass an empty array to clear.
104
+ */
105
+ upload(texts: readonly SymbolicTextInput[]): void;
106
+ hasGeometry(): boolean;
107
+ render(pass: GPURenderPassEncoder, viewProj: Float32Array, viewportPxWidth: number, viewportPxHeight: number, cameraRight: readonly [number, number, number], cameraUp: readonly [number, number, number], targetGlyphPx?: number): void;
108
+ destroy(): void;
109
+ }
110
+ //# sourceMappingURL=symbolic-overlay-pipelines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolic-overlay-pipelines.d.ts","sourceRoot":"","sources":["../src/symbolic-overlay-pipelines.ts"],"names":[],"mappings":"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"}