@oh-just-another/renderer-canvas 0.59.0 → 0.61.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.
Files changed (70) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/README.md +10 -7
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/canvas-target.d.ts +6 -1
  5. package/dist/canvas-target.d.ts.map +1 -1
  6. package/dist/canvas-target.js +12 -2
  7. package/dist/canvas-target.js.map +1 -1
  8. package/dist/constants.d.ts +49 -0
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/constants.js +49 -0
  11. package/dist/constants.js.map +1 -1
  12. package/dist/hi-dpi.d.ts +10 -0
  13. package/dist/hi-dpi.d.ts.map +1 -1
  14. package/dist/hi-dpi.js +12 -1
  15. package/dist/hi-dpi.js.map +1 -1
  16. package/dist/image-source.d.ts +11 -0
  17. package/dist/image-source.d.ts.map +1 -1
  18. package/dist/image-source.js +20 -0
  19. package/dist/image-source.js.map +1 -1
  20. package/dist/index.d.ts +3 -3
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/layered-canvas.d.ts +7 -1
  25. package/dist/layered-canvas.d.ts.map +1 -1
  26. package/dist/layered-canvas.js +6 -3
  27. package/dist/layered-canvas.js.map +1 -1
  28. package/dist/layered-surface.d.ts +16 -0
  29. package/dist/layered-surface.d.ts.map +1 -1
  30. package/dist/layered-surface.js +59 -14
  31. package/dist/layered-surface.js.map +1 -1
  32. package/dist/recording-target.d.ts +56 -13
  33. package/dist/recording-target.d.ts.map +1 -1
  34. package/dist/recording-target.js +229 -38
  35. package/dist/recording-target.js.map +1 -1
  36. package/dist/render-worker.js +19 -7
  37. package/dist/render-worker.js.map +1 -1
  38. package/dist/replay-codec.d.ts +56 -0
  39. package/dist/replay-codec.d.ts.map +1 -0
  40. package/dist/replay-codec.js +543 -0
  41. package/dist/replay-codec.js.map +1 -0
  42. package/dist/tile-compositor.d.ts +52 -1
  43. package/dist/tile-compositor.d.ts.map +1 -1
  44. package/dist/tile-compositor.js +82 -5
  45. package/dist/tile-compositor.js.map +1 -1
  46. package/dist/webgl2-curve.d.ts +12 -2
  47. package/dist/webgl2-curve.d.ts.map +1 -1
  48. package/dist/webgl2-curve.js +168 -40
  49. package/dist/webgl2-curve.js.map +1 -1
  50. package/dist/webgl2-ellipse.d.ts +1 -29
  51. package/dist/webgl2-ellipse.d.ts.map +1 -1
  52. package/dist/webgl2-ellipse.js +35 -22
  53. package/dist/webgl2-ellipse.js.map +1 -1
  54. package/dist/webgl2-msdf-text.d.ts +15 -2
  55. package/dist/webgl2-msdf-text.d.ts.map +1 -1
  56. package/dist/webgl2-msdf-text.js +101 -9
  57. package/dist/webgl2-msdf-text.js.map +1 -1
  58. package/dist/webgl2-rect-batch.d.ts +81 -0
  59. package/dist/webgl2-rect-batch.d.ts.map +1 -0
  60. package/dist/webgl2-rect-batch.js +201 -0
  61. package/dist/webgl2-rect-batch.js.map +1 -0
  62. package/dist/webgl2-stroke.d.ts +14 -35
  63. package/dist/webgl2-stroke.d.ts.map +1 -1
  64. package/dist/webgl2-stroke.js +27 -30
  65. package/dist/webgl2-stroke.js.map +1 -1
  66. package/dist/webgl2-target.d.ts +95 -13
  67. package/dist/webgl2-target.d.ts.map +1 -1
  68. package/dist/webgl2-target.js +423 -230
  69. package/dist/webgl2-target.js.map +1 -1
  70. package/package.json +4 -3
@@ -0,0 +1,201 @@
1
+ import { compileShader, glReq, linkProgram } from "./webgl-helpers.js";
2
+ import { INITIAL_RECT_BATCH_INSTANCES } from "./constants.js";
3
+ /**
4
+ * Floats per instance in a {@link RectBatch}:
5
+ * [m0x, m0y, m1x, m1y, tx, ty, r, g, b, a]
6
+ *
7
+ * The first six carry the rect's already-projected clip-space affine
8
+ * (unit-quad → NDC) as two column vectors + a translation — the same
9
+ * matrix the non-batched rect-fill path feeds `uniformMatrix3fv`, minus
10
+ * the constant `[0, 0, 1]` third column the vertex shader reconstructs.
11
+ * The last four carry the fill colour with `a` = effective alpha
12
+ * (`opacity * fillAlpha`); the shader premultiplies to match the
13
+ * `blendFunc(ONE, 1-SRC_ALPHA)` contract.
14
+ */
15
+ export const RECT_INSTANCE_FLOATS = 10;
16
+ /**
17
+ * CPU-side accumulator for instanced sharp-rect fills — the pure,
18
+ * GL-free half of the batcher. {@link WebGL2Target} queues one instance
19
+ * per axis-aligned `rect()` + `fill()` and drains the queue via
20
+ * {@link flush} whenever a non-batchable draw intervenes or the frame
21
+ * ends, so draw order (z-order) is preserved: every rect queued before
22
+ * an interrupting op is emitted, in submission order, before that op.
23
+ *
24
+ * Kept free of any `WebGLRenderingContext` reference so the flush /
25
+ * ordering / packing logic is unit-testable in Node — the GL upload +
26
+ * `drawArraysInstanced` live in {@link RectInstancePipeline}, injected as
27
+ * the {@link flush} sink.
28
+ *
29
+ * Capacity ratchets up to the next power of two on demand and never
30
+ * shrinks; single-threaded WebGL serialises all pushes so no locking is
31
+ * needed.
32
+ */
33
+ export class RectBatch {
34
+ data;
35
+ instanceCount = 0;
36
+ constructor(initialInstances = INITIAL_RECT_BATCH_INSTANCES) {
37
+ this.data = new Float32Array(Math.max(1, initialInstances) * RECT_INSTANCE_FLOATS);
38
+ }
39
+ /** Number of instances queued since the last flush. */
40
+ get pending() {
41
+ return this.instanceCount;
42
+ }
43
+ /**
44
+ * Queue one rect-fill instance. `m0*` / `m1*` / `t*` are the projected
45
+ * clip-space affine columns (see {@link RECT_INSTANCE_FLOATS}); `r,g,b`
46
+ * are the fill colour in 0–1 and `a` the effective alpha.
47
+ */
48
+ add(m0x, m0y, m1x, m1y, tx, ty, r, g, b, a) {
49
+ const need = (this.instanceCount + 1) * RECT_INSTANCE_FLOATS;
50
+ if (need > this.data.length) {
51
+ let cap = this.data.length;
52
+ while (cap < need)
53
+ cap *= 2;
54
+ const next = new Float32Array(cap);
55
+ next.set(this.data);
56
+ this.data = next;
57
+ }
58
+ const base = this.instanceCount * RECT_INSTANCE_FLOATS;
59
+ this.data[base] = m0x;
60
+ this.data[base + 1] = m0y;
61
+ this.data[base + 2] = m1x;
62
+ this.data[base + 3] = m1y;
63
+ this.data[base + 4] = tx;
64
+ this.data[base + 5] = ty;
65
+ this.data[base + 6] = r;
66
+ this.data[base + 7] = g;
67
+ this.data[base + 8] = b;
68
+ this.data[base + 9] = a;
69
+ this.instanceCount++;
70
+ }
71
+ /**
72
+ * Drain the queue through `sink` (one instanced draw) and reset. No-op
73
+ * when empty. Returns whether a draw was issued. `sink` receives the
74
+ * backing buffer (which may be longer than `count * stride` — read only
75
+ * the first `count` instances) and the instance count.
76
+ */
77
+ flush(sink) {
78
+ if (this.instanceCount === 0)
79
+ return false;
80
+ sink(this.data, this.instanceCount);
81
+ this.instanceCount = 0;
82
+ return true;
83
+ }
84
+ /** Drop queued instances without drawing (context loss / dispose). */
85
+ reset() {
86
+ this.instanceCount = 0;
87
+ }
88
+ }
89
+ /**
90
+ * GL half of the sharp-rect batcher: owns the instanced program, a VAO
91
+ * binding a static unit-quad (per-vertex) to a growable per-instance
92
+ * buffer, and issues one `drawArraysInstanced` per flush.
93
+ *
94
+ * One draw call renders the whole queued run regardless of instance
95
+ * count — the win over the per-rect `drawArrays` path that motivated the
96
+ * batcher (B19). Instances draw in submission order with blending on and
97
+ * depth off, so later rects blend over earlier ones exactly as
98
+ * sequential draws would.
99
+ */
100
+ export class RectInstancePipeline {
101
+ gl;
102
+ program;
103
+ vao;
104
+ unitQuadVbo;
105
+ instanceVbo;
106
+ /** Byte capacity currently allocated on `instanceVbo`. */
107
+ instanceBytes = 0;
108
+ constructor(gl) {
109
+ this.gl = gl;
110
+ const vert = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SRC, "RectInstance");
111
+ const frag = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SRC, "RectInstance");
112
+ this.program = linkProgram(gl, vert, frag, "RectInstance");
113
+ const aPos = gl.getAttribLocation(this.program, "aPos");
114
+ const aM0 = gl.getAttribLocation(this.program, "aM0");
115
+ const aM1 = gl.getAttribLocation(this.program, "aM1");
116
+ const aTrans = gl.getAttribLocation(this.program, "aTrans");
117
+ const aColor = gl.getAttribLocation(this.program, "aColor");
118
+ this.vao = glReq(gl.createVertexArray());
119
+ this.unitQuadVbo = glReq(gl.createBuffer());
120
+ this.instanceVbo = glReq(gl.createBuffer());
121
+ gl.bindVertexArray(this.vao);
122
+ // Per-vertex unit quad, TRIANGLE_STRIP order [0,0]→[1,1].
123
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.unitQuadVbo);
124
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]), gl.STATIC_DRAW);
125
+ gl.enableVertexAttribArray(aPos);
126
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 0, 0);
127
+ gl.vertexAttribDivisor(aPos, 0);
128
+ // Per-instance interleaved attributes on the growable buffer.
129
+ const stride = RECT_INSTANCE_FLOATS * 4;
130
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.instanceVbo);
131
+ gl.enableVertexAttribArray(aM0);
132
+ gl.vertexAttribPointer(aM0, 2, gl.FLOAT, false, stride, 0);
133
+ gl.vertexAttribDivisor(aM0, 1);
134
+ gl.enableVertexAttribArray(aM1);
135
+ gl.vertexAttribPointer(aM1, 2, gl.FLOAT, false, stride, 8);
136
+ gl.vertexAttribDivisor(aM1, 1);
137
+ gl.enableVertexAttribArray(aTrans);
138
+ gl.vertexAttribPointer(aTrans, 2, gl.FLOAT, false, stride, 16);
139
+ gl.vertexAttribDivisor(aTrans, 1);
140
+ gl.enableVertexAttribArray(aColor);
141
+ gl.vertexAttribPointer(aColor, 4, gl.FLOAT, false, stride, 24);
142
+ gl.vertexAttribDivisor(aColor, 1);
143
+ gl.bindVertexArray(null);
144
+ }
145
+ /**
146
+ * Upload the first `instanceCount` instances of `data` and draw them
147
+ * in one instanced call. Leaves the default VAO bound so the caller's
148
+ * non-VAO solid-program plumbing keeps working.
149
+ */
150
+ draw(data, instanceCount) {
151
+ if (instanceCount === 0)
152
+ return;
153
+ const gl = this.gl;
154
+ const used = data.subarray(0, instanceCount * RECT_INSTANCE_FLOATS);
155
+ gl.useProgram(this.program);
156
+ gl.bindVertexArray(this.vao);
157
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.instanceVbo);
158
+ // Grow the GPU buffer in place; re-spec with orphaning only when it
159
+ // must enlarge, otherwise sub-update the live storage.
160
+ const neededBytes = used.byteLength;
161
+ if (neededBytes > this.instanceBytes) {
162
+ gl.bufferData(gl.ARRAY_BUFFER, used, gl.DYNAMIC_DRAW);
163
+ this.instanceBytes = neededBytes;
164
+ }
165
+ else {
166
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, used);
167
+ }
168
+ gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, instanceCount);
169
+ gl.bindVertexArray(null);
170
+ }
171
+ dispose() {
172
+ this.gl.deleteVertexArray(this.vao);
173
+ this.gl.deleteBuffer(this.unitQuadVbo);
174
+ this.gl.deleteBuffer(this.instanceVbo);
175
+ this.gl.deleteProgram(this.program);
176
+ }
177
+ }
178
+ const VERTEX_SRC = `#version 300 es
179
+ in vec2 aPos;
180
+ in vec2 aM0;
181
+ in vec2 aM1;
182
+ in vec2 aTrans;
183
+ in vec4 aColor;
184
+ out vec4 vColor;
185
+ void main() {
186
+ // Reconstruct the clip-space position from the projected affine
187
+ // columns: p = M0 * x + M1 * y + T (unit quad x,y in [0,1]).
188
+ vec2 p = aM0 * aPos.x + aM1 * aPos.y + aTrans;
189
+ gl_Position = vec4(p, 0.0, 1.0);
190
+ vColor = aColor;
191
+ }`;
192
+ const FRAGMENT_SRC = `#version 300 es
193
+ precision mediump float;
194
+ in vec4 vColor;
195
+ out vec4 fragColor;
196
+ void main() {
197
+ // Premultiplied output (rgb*a, a) — matches premultipliedAlpha:true +
198
+ // blendFunc(ONE, 1-SRC_ALPHA).
199
+ fragColor = vec4(vColor.rgb * vColor.a, vColor.a);
200
+ }`;
201
+ //# sourceMappingURL=webgl2-rect-batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl2-rect-batch.js","sourceRoot":"","sources":["../src/webgl2-rect-batch.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,5 @@
1
1
  import type { LineCap, LineJoin } from "@oh-just-another/renderer-core";
2
- import { type Transform, type Vec2 } from "@oh-just-another/types";
3
- /**
4
- * GPU-side stroke pipeline for the WebGL2 backend. Builds a single
5
- * triangle list per call (joins + caps included), uploads once, and
6
- * draws via the host's solid-color program. Independent of the
7
- * fill / text / image pipelines — they each manage their own VBO.
8
- *
9
- * Supports the full Canvas2D / SVG join + cap matrix:
10
- * joins: "miter" (default), "bevel", "round"
11
- * caps: "butt" (default), "square", "round"
12
- *
13
- * One TRIANGLES list rather than a strip + extra primitives: round
14
- * joins / caps need fan triangles glued on top of the strip, and a
15
- * single TRIANGLES list avoids re-binding the buffer per join while
16
- * keeping heterogeneous join geometry easy to author.
17
- */
18
- /** Two-vertex pair per polyline vertex (left + right side of the band). */
19
- interface SideOffset {
20
- ox: number;
21
- oy: number;
22
- }
2
+ import { type Transform } from "@oh-just-another/types";
23
3
  export interface StrokeStyle {
24
4
  readonly width: number;
25
5
  readonly color: readonly [number, number, number];
@@ -27,26 +7,25 @@ export interface StrokeStyle {
27
7
  readonly join: LineJoin;
28
8
  readonly cap: LineCap;
29
9
  }
30
- /**
31
- * Compute one miter offset at the hinge between two unit normals.
32
- * Returns `{ ox, oy }` along the bisector, clamped to MITER_LIMIT.
33
- * Exported so `webgl2-target.ts` can reuse it for closed-polyline seam
34
- * vertices.
35
- */
36
- export declare const miterOffset: (n1x: number, n1y: number, n2x: number, n2y: number, half: number) => SideOffset;
37
10
  /**
38
11
  * Build the stroke geometry for a polyline + style, upload to the
39
12
  * caller's dynamic VBO, and draw. Identity uTransform — vertices are
40
13
  * pre-projected into clip space here.
41
14
  *
42
- * The caller passes its solid program + cached `aPos` attribute
43
- * location + its dynamic VBO. This function binds & sets up the
44
- * attribute itself so it's self-contained — no implicit dependency on
45
- * the previous draw's GL state.
15
+ * The caller passes its solid program + its dynamic VBO + the VAO that
16
+ * has the `aPos` layout on that VBO recorded once at target init.
17
+ * Binding the VAO replaces the per-draw `enableVertexAttribArray` /
18
+ * `vertexAttribPointer` re-declaration; the VAO is unbound after the
19
+ * draw so stroke state can't leak into other pipelines.
46
20
  */
47
- export declare const drawPolylineStroke: (gl: WebGL2RenderingContext, polyline: readonly Vec2[], style: StrokeStyle, transform: Transform, size: {
21
+ export declare const drawPolylineStroke: (gl: WebGL2RenderingContext,
22
+ /** Flat `[x0, y0, x1, y1, ...]` polyline vertices. */
23
+ xy: ArrayLike<number>,
24
+ /** Number of (x, y) points in `xy`. */
25
+ pointCount: number, style: StrokeStyle, transform: Transform, size: {
48
26
  width: number;
49
27
  height: number;
50
- }, program: WebGLProgram, uTransformLoc: WebGLUniformLocation | null, uColorLoc: WebGLUniformLocation | null, uOpacityLoc: WebGLUniformLocation | null, dynamicVbo: WebGLBuffer, aPosLoc: number, identityMat3: Float32Array) => void;
51
- export {};
28
+ }, program: WebGLProgram, uTransformLoc: WebGLUniformLocation | null, uColorLoc: WebGLUniformLocation | null, uOpacityLoc: WebGLUniformLocation | null, dynamicVbo: WebGLBuffer,
29
+ /** VAO with the `aPos` (2 × FLOAT, tight) layout recorded on `dynamicVbo`. */
30
+ dynamicVao: WebGLVertexArrayObject, identityMat3: Float32Array) => void;
52
31
  //# sourceMappingURL=webgl2-stroke.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2-stroke.d.ts","sourceRoot":"","sources":["../src/webgl2-stroke.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAO,KAAK,SAAS,EAAE,KAAK,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AAEH,2EAA2E;AAC3E,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAyDD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,MAAM,EACX,MAAM,MAAM,KACX,UAaF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAC7B,IAAI,sBAAsB,EAC1B,UAAU,SAAS,IAAI,EAAE,EACzB,OAAO,WAAW,EAClB,WAAW,SAAS,EACpB,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACvC,SAAS,YAAY,EACrB,eAAe,oBAAoB,GAAG,IAAI,EAC1C,WAAW,oBAAoB,GAAG,IAAI,EACtC,aAAa,oBAAoB,GAAG,IAAI,EACxC,YAAY,WAAW,EACvB,SAAS,MAAM,EACf,cAAc,YAAY,KACzB,IA8MF,CAAC"}
1
+ {"version":3,"file":"webgl2-stroke.d.ts","sourceRoot":"","sources":["../src/webgl2-stroke.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAO,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AA+E7D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB;AA6BD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAC7B,IAAI,sBAAsB;AAC1B,sDAAsD;AACtD,IAAI,SAAS,CAAC,MAAM,CAAC;AACrB,uCAAuC;AACvC,YAAY,MAAM,EAClB,OAAO,WAAW,EAClB,WAAW,SAAS,EACpB,MAAM;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACvC,SAAS,YAAY,EACrB,eAAe,oBAAoB,GAAG,IAAI,EAC1C,WAAW,oBAAoB,GAAG,IAAI,EACtC,aAAa,oBAAoB,GAAG,IAAI,EACxC,YAAY,WAAW;AACvB,8EAA8E;AAC9E,YAAY,sBAAsB,EAClC,cAAc,YAAY,KACzB,IA4NF,CAAC"}
@@ -58,7 +58,7 @@ const trisPush = (x, y) => {
58
58
  * Exported so `webgl2-target.ts` can reuse it for closed-polyline seam
59
59
  * vertices.
60
60
  */
61
- export const miterOffset = (n1x, n1y, n2x, n2y, half) => {
61
+ const miterOffset = (n1x, n1y, n2x, n2y, half) => {
62
62
  let bx = n1x + n2x;
63
63
  let by = n1y + n2y;
64
64
  const blen = Math.hypot(bx, by);
@@ -77,32 +77,35 @@ export const miterOffset = (n1x, n1y, n2x, n2y, half) => {
77
77
  * caller's dynamic VBO, and draw. Identity uTransform — vertices are
78
78
  * pre-projected into clip space here.
79
79
  *
80
- * The caller passes its solid program + cached `aPos` attribute
81
- * location + its dynamic VBO. This function binds & sets up the
82
- * attribute itself so it's self-contained — no implicit dependency on
83
- * the previous draw's GL state.
80
+ * The caller passes its solid program + its dynamic VBO + the VAO that
81
+ * has the `aPos` layout on that VBO recorded once at target init.
82
+ * Binding the VAO replaces the per-draw `enableVertexAttribArray` /
83
+ * `vertexAttribPointer` re-declaration; the VAO is unbound after the
84
+ * draw so stroke state can't leak into other pipelines.
84
85
  */
85
- export const drawPolylineStroke = (gl, polyline, style, transform, size, program, uTransformLoc, uColorLoc, uOpacityLoc, dynamicVbo, aPosLoc, identityMat3) => {
86
- if (style.width <= 0 || polyline.length < 2)
86
+ export const drawPolylineStroke = (gl,
87
+ /** Flat `[x0, y0, x1, y1, ...]` polyline vertices. */
88
+ xy,
89
+ /** Number of (x, y) points in `xy`. */
90
+ pointCount, style, transform, size, program, uTransformLoc, uColorLoc, uOpacityLoc, dynamicVbo,
91
+ /** VAO with the `aPos` (2 × FLOAT, tight) layout recorded on `dynamicVbo`. */
92
+ dynamicVao, identityMat3) => {
93
+ if (style.width <= 0 || pointCount < 2)
87
94
  return;
88
95
  const half = style.width / 2;
89
- const segCount = polyline.length - 1;
96
+ const segCount = pointCount - 1;
90
97
  // Reuse the module-level scratch nx/ny buffers — grow on demand.
91
98
  ensureNCapacity(segCount);
92
99
  const nx = scratchNx;
93
100
  const ny = scratchNy;
94
101
  for (let i = 0; i < segCount; i++) {
95
- const a = req(polyline[i]);
96
- const b = req(polyline[i + 1]);
97
- const dx = b.x - a.x;
98
- const dy = b.y - a.y;
102
+ const dx = req(xy[i * 2 + 2]) - req(xy[i * 2]);
103
+ const dy = req(xy[i * 2 + 3]) - req(xy[i * 2 + 1]);
99
104
  const len = Math.hypot(dx, dy) || 1;
100
105
  nx[i] = -dy / len;
101
106
  ny[i] = dx / len;
102
107
  }
103
- const first = req(polyline[0]);
104
- const last = req(polyline[polyline.length - 1]);
105
- const closed = polyline.length >= 3 && first.x === last.x && first.y === last.y;
108
+ const closed = pointCount >= 3 && xy[0] === xy[(pointCount - 1) * 2] && xy[1] === xy[(pointCount - 1) * 2 + 1];
106
109
  // Reset the scratch vertex stream length — world-space (x, y) pairs
107
110
  // are pushed into `scratchTris` via `trisPush`, then projected
108
111
  // in-place to clip space before the bufferData call.
@@ -129,10 +132,8 @@ export const drawPolylineStroke = (gl, polyline, style, transform, size, program
129
132
  const segLeft = (i) => ({ ox: req(nx[i]) * half, oy: req(ny[i]) * half });
130
133
  // Emit the rect bands for every segment.
131
134
  for (let i = 0; i < segCount; i++) {
132
- const a = req(polyline[i]);
133
- const b = req(polyline[i + 1]);
134
135
  const o = segLeft(i);
135
- band(a.x, a.y, o.ox, o.oy, b.x, b.y, o.ox, o.oy);
136
+ band(req(xy[i * 2]), req(xy[i * 2 + 1]), o.ox, o.oy, req(xy[i * 2 + 2]), req(xy[i * 2 + 3]), o.ox, o.oy);
136
137
  }
137
138
  // Emit join geometry at every interior vertex (and at the seam for
138
139
  // closed polylines).
@@ -206,21 +207,15 @@ export const drawPolylineStroke = (gl, polyline, style, transform, size, program
206
207
  }
207
208
  };
208
209
  for (let i = 1; i < segCount; i++) {
209
- const p = req(polyline[i]);
210
- emitJoin(p.x, p.y, req(nx[i - 1]), req(ny[i - 1]), req(nx[i]), req(ny[i]));
210
+ emitJoin(req(xy[i * 2]), req(xy[i * 2 + 1]), req(nx[i - 1]), req(ny[i - 1]), req(nx[i]), req(ny[i]));
211
211
  }
212
212
  if (closed) {
213
- const p = req(polyline[0]);
214
- emitJoin(p.x, p.y, req(nx[segCount - 1]), req(ny[segCount - 1]), req(nx[0]), req(ny[0]));
213
+ emitJoin(req(xy[0]), req(xy[1]), req(nx[segCount - 1]), req(ny[segCount - 1]), req(nx[0]), req(ny[0]));
215
214
  }
216
215
  // Caps on open polylines (closed shapes don't have caps).
217
216
  if (!closed) {
218
- const capFirst = req(polyline[0]);
219
- const second = req(polyline[1]);
220
- emitCap(push, capFirst.x, capFirst.y, second.x, second.y, req(nx[0]), req(ny[0]), half, style.cap, true);
221
- const lastVx = req(polyline[polyline.length - 1]);
222
- const prevVx = req(polyline[polyline.length - 2]);
223
- emitCap(push, lastVx.x, lastVx.y, prevVx.x, prevVx.y, req(nx[segCount - 1]), req(ny[segCount - 1]), half, style.cap, false);
217
+ emitCap(push, req(xy[0]), req(xy[1]), req(xy[2]), req(xy[3]), req(nx[0]), req(ny[0]), half, style.cap, true);
218
+ emitCap(push, req(xy[(pointCount - 1) * 2]), req(xy[(pointCount - 1) * 2 + 1]), req(xy[(pointCount - 2) * 2]), req(xy[(pointCount - 2) * 2 + 1]), req(nx[segCount - 1]), req(ny[segCount - 1]), half, style.cap, false);
224
219
  }
225
220
  if (scratchTrisLen === 0)
226
221
  return;
@@ -238,15 +233,17 @@ export const drawPolylineStroke = (gl, polyline, style, transform, size, program
238
233
  scratchTris[i + 1] = wy * sy + 1;
239
234
  }
240
235
  gl.useProgram(program);
236
+ gl.bindVertexArray(dynamicVao);
241
237
  gl.bindBuffer(gl.ARRAY_BUFFER, dynamicVbo);
242
238
  // subarray gives a view into the live scratch buffer — no copy.
243
239
  gl.bufferData(gl.ARRAY_BUFFER, scratchTris.subarray(0, scratchTrisLen), gl.DYNAMIC_DRAW);
244
- gl.enableVertexAttribArray(aPosLoc);
245
- gl.vertexAttribPointer(aPosLoc, 2, gl.FLOAT, false, 0, 0);
246
240
  gl.uniformMatrix3fv(uTransformLoc, false, identityMat3);
247
241
  gl.uniform3f(uColorLoc, style.color[0], style.color[1], style.color[2]);
248
242
  gl.uniform1f(uOpacityLoc, style.opacity);
249
243
  gl.drawArrays(gl.TRIANGLES, 0, scratchTrisLen / 2);
244
+ // Reset to the default VAO so stroke state can't leak into other
245
+ // pipelines (matches the rect-batch discipline).
246
+ gl.bindVertexArray(null);
250
247
  };
251
248
  /**
252
249
  * Emit a cap at one endpoint of an open polyline. `start` indicates
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2-stroke.js","sourceRoot":"","sources":["../src/webgl2-stroke.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl2-stroke.js","sourceRoot":"","sources":["../src/webgl2-stroke.ts"],"names":[],"mappings":"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"}