@ifc-lite/renderer 1.15.3 → 1.16.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.
@@ -1,6 +1,14 @@
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
+ /**
5
+ * Section 2D Overlay Renderer
6
+ *
7
+ * Renders 2D section drawings (cut polygons, outlines, hatching) as a 3D overlay
8
+ * on the section plane in the WebGPU viewport. This provides an integrated view
9
+ * where the architectural drawing appears directly on the section cut surface.
10
+ */
11
+ import { PIPELINE_CONSTANTS } from './constants.js';
4
12
  // Fill colors by IFC type (architectural convention)
5
13
  const IFC_TYPE_FILL_COLORS = {
6
14
  IfcWall: [0.69, 0.69, 0.69, 0.95],
@@ -62,23 +70,35 @@ export class Section2DOverlayRenderer {
62
70
  const pipelineLayout = this.device.createPipelineLayout({
63
71
  bindGroupLayouts: [this.bindGroupLayout],
64
72
  });
65
- // Shader for filled polygons (with vertex colors)
73
+ // Shader for filled polygons. Applies the user-defined cap style
74
+ // (single fill colour + screen-space hatch) on top of the EXACT
75
+ // 2D section polygons produced by SectionCutter. Per-vertex colour
76
+ // is still supplied by the vertex buffer (unused here, kept for
77
+ // future multi-material support) but ignored — all fills render
78
+ // with the uniform cap style so the cut surface reads as a single
79
+ // architectural section rather than a rainbow of per-IFC-type tints.
66
80
  const fillShader = this.device.createShaderModule({
67
81
  code: `
68
82
  struct Uniforms {
69
- viewProj: mat4x4<f32>,
70
- planeOffset: vec4<f32>, // Small offset to render slightly in front of section plane
83
+ viewProj: mat4x4<f32>,
84
+ planeOffset: vec4<f32>, // Small offset to render slightly in front of section plane
85
+ capFillColor: vec4<f32>,
86
+ capStrokeColor: vec4<f32>,
87
+ // x=patternId, y=spacingPx, z=angleRad, w=widthPx
88
+ params: vec4<f32>,
89
+ // x=secondaryAngleRad, y,z,w reserved
90
+ params2: vec4<f32>,
71
91
  }
72
92
  @binding(0) @group(0) var<uniform> uniforms: Uniforms;
73
93
 
74
94
  struct VertexInput {
75
95
  @location(0) position: vec3<f32>,
76
- @location(1) color: vec4<f32>,
96
+ @location(1) color: vec4<f32>,
77
97
  }
78
98
 
79
99
  struct VertexOutput {
80
100
  @builtin(position) position: vec4<f32>,
81
- @location(0) color: vec4<f32>,
101
+ @location(0) color: vec4<f32>,
82
102
  }
83
103
 
84
104
  @vertex
@@ -90,9 +110,79 @@ export class Section2DOverlayRenderer {
90
110
  return output;
91
111
  }
92
112
 
113
+ // Screen-space hatch pattern helpers (ported from section-cap.wgsl).
114
+ fn lineMask(u: f32, s: f32, w: f32) -> f32 {
115
+ let f = fract(u / s) * s;
116
+ let d = min(f, s - f);
117
+ return 1.0 - smoothstep(w * 0.5, w * 0.5 + 1.0, d);
118
+ }
119
+ fn rotate(p: vec2<f32>, a: f32) -> vec2<f32> {
120
+ let c = cos(a);
121
+ let s = sin(a);
122
+ return vec2<f32>(c * p.x - s * p.y, s * p.x + c * p.y);
123
+ }
124
+ fn hatchIntensity(fragCoord: vec2<f32>, patternId: u32, spacing: f32, angle: f32, width: f32, angle2: f32) -> f32 {
125
+ let p = fragCoord;
126
+ if (patternId == 0u) { return 0.0; } // solid
127
+ if (patternId == 1u) { // diagonal
128
+ let r = rotate(p, angle);
129
+ return lineMask(r.x, spacing, width);
130
+ }
131
+ if (patternId == 2u) { // cross-hatch
132
+ let r = rotate(p, angle);
133
+ let r2 = rotate(p, angle2);
134
+ return max(lineMask(r.x, spacing, width), lineMask(r2.x, spacing, width));
135
+ }
136
+ if (patternId == 3u) { return lineMask(p.y, spacing, width); } // horizontal
137
+ if (patternId == 4u) { return lineMask(p.x, spacing, width); } // vertical
138
+ if (patternId == 5u) {
139
+ // Concrete (ISO 128-50): clean regular dot grid. The previous
140
+ // version layered dashes on top which looked noisy and broken.
141
+ // Dots sit at every grid intersection; radius scales with
142
+ // stroke width so the user's width slider works consistently.
143
+ let gx = p.x - round(p.x / spacing) * spacing;
144
+ let gy = p.y - round(p.y / spacing) * spacing;
145
+ let d = sqrt(gx * gx + gy * gy);
146
+ let radius = max(1.0, width * 1.2);
147
+ return 1.0 - smoothstep(radius, radius + 1.0, d);
148
+ }
149
+ if (patternId == 6u) { // brick
150
+ let bandH = spacing;
151
+ let band = floor(p.y / bandH);
152
+ let offset = select(0.0, bandH, (u32(band) & 1u) == 1u);
153
+ let horiz = lineMask(p.y, bandH, width);
154
+ let vertPos = p.x + offset * 0.5;
155
+ let vert = step(fract(vertPos / (bandH * 2.0)), 0.02);
156
+ return max(horiz, vert);
157
+ }
158
+ if (patternId == 7u) { // insulation
159
+ let y = spacing * 0.5 * sin(p.x * 6.2831853 / spacing) + p.y;
160
+ return lineMask(y, spacing, width);
161
+ }
162
+ return 0.0;
163
+ }
164
+
165
+ struct FragOut {
166
+ @location(0) color: vec4<f32>,
167
+ @location(1) objectId: vec4<f32>,
168
+ }
169
+
93
170
  @fragment
94
- fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
95
- return input.color;
171
+ fn fs_main(input: VertexOutput) -> FragOut {
172
+ let patternId = u32(uniforms.params.x + 0.5);
173
+ let spacing = max(2.0, uniforms.params.y);
174
+ let angle = uniforms.params.z;
175
+ let width = max(1.0, uniforms.params.w);
176
+ let angle2 = uniforms.params2.x;
177
+
178
+ let h = hatchIntensity(input.position.xy, patternId, spacing, angle, width, angle2);
179
+ let rgb = mix(uniforms.capFillColor.rgb, uniforms.capStrokeColor.rgb, h * uniforms.capStrokeColor.a);
180
+ let a = max(uniforms.capFillColor.a, h * uniforms.capStrokeColor.a);
181
+
182
+ var out: FragOut;
183
+ out.color = vec4<f32>(rgb, a);
184
+ out.objectId = vec4<f32>(0.0, 0.0, 0.0, 0.0);
185
+ return out;
96
186
  }
97
187
  `,
98
188
  });
@@ -121,9 +211,17 @@ export class Section2DOverlayRenderer {
121
211
  return output;
122
212
  }
123
213
 
214
+ struct FragOutLine {
215
+ @location(0) color: vec4<f32>,
216
+ @location(1) objectId: vec4<f32>,
217
+ }
218
+
124
219
  @fragment
125
- fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
126
- return vec4<f32>(0.0, 0.0, 0.0, 1.0); // Black lines
220
+ fn fs_main(input: VertexOutput) -> FragOutLine {
221
+ var out: FragOutLine;
222
+ out.color = vec4<f32>(0.0, 0.0, 0.0, 1.0); // Black lines
223
+ out.objectId = vec4<f32>(0.0, 0.0, 0.0, 0.0);
224
+ return out;
127
225
  }
128
226
  `,
129
227
  });
@@ -146,7 +244,12 @@ export class Section2DOverlayRenderer {
146
244
  fragment: {
147
245
  module: fillShader,
148
246
  entryPoint: 'fs_main',
149
- targets: [{
247
+ // The main render pass has two colour attachments (main colour +
248
+ // picker objectId). Pipelines used inside that pass must declare
249
+ // matching targets — the objectId slot writes nothing so the pass's
250
+ // picking IDs underneath are preserved.
251
+ targets: [
252
+ {
150
253
  format: this.format,
151
254
  blend: {
152
255
  color: {
@@ -160,16 +263,26 @@ export class Section2DOverlayRenderer {
160
263
  operation: 'add',
161
264
  },
162
265
  },
163
- }],
266
+ },
267
+ { format: 'rgba8unorm', writeMask: 0 },
268
+ ],
164
269
  },
165
270
  primitive: {
166
271
  topology: 'triangle-list',
167
272
  cullMode: 'none',
168
273
  },
169
274
  depthStencil: {
170
- format: 'depth32float',
275
+ format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
171
276
  depthWriteEnabled: false,
172
- depthCompare: 'always', // Always draw - overlay is positioned with fixed offset
277
+ // 'greater-equal' (reverse-Z): draw the cap fill when its depth is at
278
+ // least as close as whatever the main opaque pass already wrote. The
279
+ // cap polygons live exactly on the section plane, which coincides
280
+ // with below-plane top faces — 'greater-equal' lets them tie cleanly
281
+ // there. Where nearer model geometry (e.g. a wall in front of the
282
+ // cut, viewed at an angle) wrote a closer depth, the cap fails the
283
+ // test and is occluded — the user no longer sees cap hatch painted
284
+ // through model elements that ought to be in front of it.
285
+ depthCompare: 'greater-equal',
173
286
  },
174
287
  multisample: {
175
288
  count: this.sampleCount,
@@ -193,26 +306,39 @@ export class Section2DOverlayRenderer {
193
306
  fragment: {
194
307
  module: lineShader,
195
308
  entryPoint: 'fs_main',
196
- targets: [{
197
- format: this.format,
198
- }],
309
+ targets: [
310
+ { format: this.format },
311
+ { format: 'rgba8unorm', writeMask: 0 },
312
+ ],
199
313
  },
200
314
  primitive: {
201
315
  topology: 'line-list',
202
316
  cullMode: 'none',
203
317
  },
204
318
  depthStencil: {
205
- format: 'depth32float',
319
+ format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
206
320
  depthWriteEnabled: false,
207
- depthCompare: 'always', // Always draw - overlay is positioned with fixed offset
321
+ // Same z-respect logic as the fill pipeline above outline lines
322
+ // are drawn on the cut plane, so closer model geometry should hide
323
+ // them when the camera looks through it.
324
+ depthCompare: 'greater-equal',
208
325
  },
209
326
  multisample: {
210
327
  count: this.sampleCount,
211
328
  },
212
329
  });
213
- // Create uniform buffer
330
+ // Create uniform buffer.
331
+ // viewProj — mat4x4 64 B
332
+ // planeOffset — vec4 16 B
333
+ // capFillColor — vec4 16 B
334
+ // capStrokeColor — vec4 16 B
335
+ // params — vec4 16 B x=patternId, y=spacingPx, z=angleRad, w=widthPx
336
+ // params2 — vec4 16 B x=secondaryAngleRad
337
+ // Total: 144 B. The extended layout lets the fill fragment shader
338
+ // apply the user's cap style (screen-space hatch + colour) directly
339
+ // over the exact polygon silhouette the 2D section cutter produced.
214
340
  this.uniformBuffer = this.device.createBuffer({
215
- size: 80, // mat4x4 (64) + vec4 (16)
341
+ size: 144,
216
342
  usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
217
343
  });
218
344
  // Create bind group
@@ -390,33 +516,84 @@ export class Section2DOverlayRenderer {
390
516
  return;
391
517
  }
392
518
  const { axis, viewProj } = options;
393
- // Fixed offset to render overlay clearly above the section plane
394
- // Use 0.3m offset for clear visibility at any camera angle
395
- const offsetAmount = 0.3; // 0.3m offset in world units
396
- let offset = [0, 0, 0];
397
- switch (axis) {
398
- case 'down':
399
- offset = [0, offsetAmount, 0]; // Y axis
400
- break;
401
- case 'front':
402
- offset = [0, 0, offsetAmount]; // Z axis
403
- break;
404
- case 'side':
405
- offset = [offsetAmount, 0, 0]; // X axis
406
- break;
407
- }
408
- // Update uniforms
409
- const uniforms = new Float32Array(20);
519
+ // No offset cap renders exactly on the section plane. The previous
520
+ // 0.3m bias was there to keep the outline lines clear of below-plane
521
+ // geometry, but it made the cap visually drift off the slider plane
522
+ // (users could see a 0.3m gap between the plane preview and the cap).
523
+ // The fill pipeline uses depthCompare 'always' so z-fighting with
524
+ // coincident below-plane top faces is not an issue; the stencil gate
525
+ // keeps the fill restricted to the actual cap polygons.
526
+ const offset = [0, 0, 0];
527
+ // Update uniforms. Layout mirrors the WGSL struct above:
528
+ // 0..15 viewProj
529
+ // 16..19 planeOffset
530
+ // 20..23 capFillColor
531
+ // 24..27 capStrokeColor
532
+ // 28..31 params (patternId, spacingPx, angleRad, widthPx)
533
+ // 32..35 params2 (secondaryAngleRad, _, _, _)
534
+ const uniforms = new Float32Array(36);
410
535
  uniforms.set(viewProj, 0);
411
536
  uniforms[16] = offset[0];
412
537
  uniforms[17] = offset[1];
413
538
  uniforms[18] = offset[2];
414
- uniforms[19] = 0; // padding
539
+ uniforms[19] = 0;
540
+ const cs = options.capStyle;
541
+ if (cs) {
542
+ uniforms[20] = cs.fillColor[0];
543
+ uniforms[21] = cs.fillColor[1];
544
+ uniforms[22] = cs.fillColor[2];
545
+ uniforms[23] = cs.fillColor[3];
546
+ uniforms[24] = cs.strokeColor[0];
547
+ uniforms[25] = cs.strokeColor[1];
548
+ uniforms[26] = cs.strokeColor[2];
549
+ uniforms[27] = cs.strokeColor[3];
550
+ uniforms[28] = cs.patternId;
551
+ uniforms[29] = cs.spacingPx;
552
+ uniforms[30] = cs.angleRad;
553
+ uniforms[31] = cs.widthPx;
554
+ uniforms[32] = cs.secondaryAngleRad;
555
+ }
556
+ else {
557
+ // Sensible defaults when caller omits style (e.g. legacy lines-only
558
+ // use): solid fill using a warm-paper colour, no hatch.
559
+ uniforms[20] = 0.92;
560
+ uniforms[21] = 0.88;
561
+ uniforms[22] = 0.78;
562
+ uniforms[23] = 1;
563
+ uniforms[24] = 0.10;
564
+ uniforms[25] = 0.10;
565
+ uniforms[26] = 0.10;
566
+ uniforms[27] = 1;
567
+ uniforms[28] = 0; // solid pattern
568
+ uniforms[29] = 8;
569
+ uniforms[30] = Math.PI / 4;
570
+ uniforms[31] = 1;
571
+ uniforms[32] = -Math.PI / 4;
572
+ }
415
573
  this.device.queue.writeBuffer(this.uniformBuffer, 0, uniforms);
416
- // Note: Skip filled polygons in 3D overlay - they create visual artifacts
417
- // The fills are rendered properly in the 2D panel canvas instead
418
- // Draw lines only
419
- if (this.lineVertexBuffer && this.lineVertexCount > 0) {
574
+ // Filled polygons = the 3D section cap. Render them ONLY when the
575
+ // caller opts in (`showFills: true` + a capStyle). This replaces the
576
+ // old stencil-parity cap, which leaked hatch into empty sky on non-
577
+ // manifold IFC geometry. The polygons here come from exact triangle-
578
+ // plane intersection in `SectionCutter`, so the silhouette is
579
+ // mathematically correct.
580
+ if (options.showFills === true &&
581
+ options.capStyle &&
582
+ this.fillVertexBuffer &&
583
+ this.fillIndexBuffer &&
584
+ this.fillIndexCount > 0) {
585
+ pass.setPipeline(this.fillPipeline);
586
+ pass.setBindGroup(0, this.bindGroup);
587
+ pass.setVertexBuffer(0, this.fillVertexBuffer);
588
+ pass.setIndexBuffer(this.fillIndexBuffer, 'uint32');
589
+ pass.drawIndexed(this.fillIndexCount);
590
+ }
591
+ // Outline lines on top of the fill. Gated by `showOutlines` so the
592
+ // user can toggle surfaces and outlines independently from the UI.
593
+ // Defaults to true when the caller omits the flag.
594
+ if (options.showOutlines !== false &&
595
+ this.lineVertexBuffer &&
596
+ this.lineVertexCount > 0) {
420
597
  pass.setPipeline(this.linePipeline);
421
598
  pass.setBindGroup(0, this.bindGroup);
422
599
  pass.setVertexBuffer(0, this.lineVertexBuffer);
@@ -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,37 @@
1
+ /**
2
+ * Section cap styling — shared between the renderer and its consumers.
3
+ *
4
+ * The 3D cut surface is rendered by `Section2DOverlayRenderer` using the exact
5
+ * polygons `SectionCutter` produces from triangle-plane intersection. This
6
+ * module carries only the styling primitives that flow through it:
7
+ * - `HATCH_PATTERN_IDS`: name → numeric id, kept in lockstep with the
8
+ * `patternId` switch in the 2D-overlay fill fragment shader.
9
+ * - `SectionCapStyle` / `DEFAULT_CAP_STYLE`: the shape + defaults the store
10
+ * persists to localStorage and the renderer consumes per-frame.
11
+ *
12
+ * Kept as a separate file (rather than folded into `types.ts`) so the hatch
13
+ * id mapping has a single source of truth that both shader authors and UI
14
+ * authors can grep for.
15
+ */
16
+ export declare const HATCH_PATTERN_IDS: {
17
+ readonly solid: 0;
18
+ readonly diagonal: 1;
19
+ readonly crossHatch: 2;
20
+ readonly horizontal: 3;
21
+ readonly vertical: 4;
22
+ readonly concrete: 5;
23
+ readonly brick: 6;
24
+ readonly insulation: 7;
25
+ };
26
+ export type HatchPatternId = keyof typeof HATCH_PATTERN_IDS;
27
+ export interface SectionCapStyle {
28
+ fillColor: [number, number, number, number];
29
+ strokeColor: [number, number, number, number];
30
+ pattern: HatchPatternId;
31
+ spacingPx: number;
32
+ angleRad: number;
33
+ widthPx: number;
34
+ secondaryAngleRad: number;
35
+ }
36
+ export declare const DEFAULT_CAP_STYLE: SectionCapStyle;
37
+ //# sourceMappingURL=section-cap-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-cap-style.d.ts","sourceRoot":"","sources":["../src/section-cap-style.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;CASpB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,WAAW,EAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,EAAY,cAAc,CAAC;IAClC,SAAS,EAAU,MAAM,CAAC;IAC1B,QAAQ,EAAW,MAAM,CAAC;IAC1B,OAAO,EAAY,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,EAAE,eAQ/B,CAAC"}
@@ -0,0 +1,38 @@
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
+ * Section cap styling — shared between the renderer and its consumers.
6
+ *
7
+ * The 3D cut surface is rendered by `Section2DOverlayRenderer` using the exact
8
+ * polygons `SectionCutter` produces from triangle-plane intersection. This
9
+ * module carries only the styling primitives that flow through it:
10
+ * - `HATCH_PATTERN_IDS`: name → numeric id, kept in lockstep with the
11
+ * `patternId` switch in the 2D-overlay fill fragment shader.
12
+ * - `SectionCapStyle` / `DEFAULT_CAP_STYLE`: the shape + defaults the store
13
+ * persists to localStorage and the renderer consumes per-frame.
14
+ *
15
+ * Kept as a separate file (rather than folded into `types.ts`) so the hatch
16
+ * id mapping has a single source of truth that both shader authors and UI
17
+ * authors can grep for.
18
+ */
19
+ export const HATCH_PATTERN_IDS = {
20
+ solid: 0,
21
+ diagonal: 1,
22
+ crossHatch: 2,
23
+ horizontal: 3,
24
+ vertical: 4,
25
+ concrete: 5,
26
+ brick: 6,
27
+ insulation: 7,
28
+ };
29
+ export const DEFAULT_CAP_STYLE = {
30
+ fillColor: [0.92, 0.88, 0.78, 1.0], // warm paper
31
+ strokeColor: [0.10, 0.10, 0.10, 1.0], // ink
32
+ pattern: 'diagonal',
33
+ spacingPx: 8,
34
+ angleRad: Math.PI / 4, // 45°
35
+ widthPx: 1.0,
36
+ secondaryAngleRad: -Math.PI / 4,
37
+ };
38
+ //# sourceMappingURL=section-cap-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-cap-style.js","sourceRoot":"","sources":["../src/section-cap-style.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAE/D;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,KAAK,EAAQ,CAAC;IACd,QAAQ,EAAK,CAAC;IACd,UAAU,EAAG,CAAC;IACd,UAAU,EAAG,CAAC;IACd,QAAQ,EAAK,CAAC;IACd,QAAQ,EAAK,CAAC;IACd,KAAK,EAAQ,CAAC;IACd,UAAU,EAAG,CAAC;CACN,CAAC;AAcX,MAAM,CAAC,MAAM,iBAAiB,GAAoB;IAChD,SAAS,EAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAG,aAAa;IAC1D,WAAW,EAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAG,MAAM;IACnD,OAAO,EAAY,UAAU;IAC7B,SAAS,EAAU,CAAC;IACpB,QAAQ,EAAW,IAAI,CAAC,EAAE,GAAG,CAAC,EAAe,MAAM;IACnD,OAAO,EAAY,GAAG;IACtB,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;CAChC,CAAC"}
@@ -1,6 +1,3 @@
1
- /**
2
- * Section plane renderer - renders a visible plane at the section cut location
3
- */
4
1
  export interface SectionPlaneRenderOptions {
5
2
  axis: 'down' | 'front' | 'side';
6
3
  position: number;
@@ -1 +1 @@
1
- {"version":3,"file":"section-plane.d.ts","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,GAAE,MAAU;IAMhF,OAAO,CAAC,IAAI;IAqLZ;;OAEG;IACH,IAAI,CACF,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,yBAAyB,GACjC,IAAI;IAgDP,OAAO,CAAC,sBAAsB;IAiF9B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAOhB"}
1
+ {"version":3,"file":"section-plane.d.ts","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,GAAE,MAAU;IAMhF,OAAO,CAAC,IAAI;IA4MZ;;OAEG;IACH,IAAI,CACF,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE,yBAAyB,GACjC,IAAI;IAgDP,OAAO,CAAC,sBAAsB;IAiF9B;;;;OAIG;IACH,OAAO,IAAI,IAAI;CAOhB"}
@@ -1,6 +1,10 @@
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
+ /**
5
+ * Section plane renderer - renders a visible plane at the section cut location
6
+ */
7
+ import { PIPELINE_CONSTANTS } from './constants.js';
4
8
  export class SectionPlaneRenderer {
5
9
  device;
6
10
  bindGroupLayout = null; // Shared layout for both pipelines
@@ -56,8 +60,15 @@ export class SectionPlaneRenderer {
56
60
  return output;
57
61
  }
58
62
 
63
+ // Two outputs so the pipeline matches the main pass's two colour
64
+ // attachments. objectId is masked off at the pipeline level.
65
+ struct FragOut {
66
+ @location(0) color: vec4<f32>,
67
+ @location(1) objectId: vec4<f32>,
68
+ }
69
+
59
70
  @fragment
60
- fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
71
+ fn fs_main(input: VertexOutput) -> FragOut {
61
72
  // Create fine grid pattern
62
73
  let gridSize = 0.01; // Fine grid cells (100 divisions)
63
74
  let lineWidth = 0.001; // Very thin lines
@@ -104,7 +115,10 @@ export class SectionPlaneRenderer {
104
115
  // Clamp alpha
105
116
  color.a = min(color.a, 0.5);
106
117
 
107
- return color;
118
+ var out: FragOut;
119
+ out.color = color;
120
+ out.objectId = vec4<f32>(0.0, 0.0, 0.0, 0.0);
121
+ return out;
108
122
  }
109
123
  `,
110
124
  });
@@ -127,7 +141,18 @@ export class SectionPlaneRenderer {
127
141
  fragment: {
128
142
  module: shaderModule,
129
143
  entryPoint: 'fs_main',
130
- targets: [{
144
+ // The main render pass has two colour attachments (main colour +
145
+ // the picker's objectId texture). WebGPU requires every pipeline
146
+ // used inside a pass to declare exactly the same target count and
147
+ // formats. The preview plane only paints into the main colour
148
+ // target — the objectId target is declared with writeMask 0 so
149
+ // cap-less picking IDs underneath are preserved. Without this,
150
+ // `setPipeline` raises "Incompatible color attachments at
151
+ // indices []: RenderPass uses formats [Bgra8Unorm, Rgba8Unorm]
152
+ // but RenderPipeline uses formats [Bgra8Unorm]" and the whole
153
+ // frame is dropped.
154
+ targets: [
155
+ {
131
156
  format: this.format,
132
157
  blend: {
133
158
  color: {
@@ -141,7 +166,9 @@ export class SectionPlaneRenderer {
141
166
  operation: 'add',
142
167
  },
143
168
  },
144
- }],
169
+ },
170
+ { format: 'rgba8unorm', writeMask: 0 },
171
+ ],
145
172
  },
146
173
  primitive: {
147
174
  topology: 'triangle-list',
@@ -155,7 +182,7 @@ export class SectionPlaneRenderer {
155
182
  this.previewPipeline = this.device.createRenderPipeline({
156
183
  ...pipelineBase,
157
184
  depthStencil: {
158
- format: 'depth32float',
185
+ format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
159
186
  depthWriteEnabled: false,
160
187
  depthCompare: 'greater', // Only draw where plane is behind geometry (empty space)
161
188
  },
@@ -164,7 +191,7 @@ export class SectionPlaneRenderer {
164
191
  this.cutPipeline = this.device.createRenderPipeline({
165
192
  ...pipelineBase,
166
193
  depthStencil: {
167
- format: 'depth32float',
194
+ format: PIPELINE_CONSTANTS.DEPTH_FORMAT,
168
195
  depthWriteEnabled: false,
169
196
  depthCompare: 'always', // Always draw on top
170
197
  },