@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
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2-ellipse.d.ts","sourceRoot":"","sources":["../src/webgl2-ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,eAAe;IASd,OAAO,CAAC,QAAQ,CAAC,EAAE;IAR/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAE1B,EAAE,EAAE,sBAAsB;IAmBvD;;;;;;OAMG;IACH,IAAI,CACF,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAC7C,IAAI;IAuCP,OAAO,IAAI,IAAI;CAIhB"}
1
+ {"version":3,"file":"webgl2-ellipse.d.ts","sourceRoot":"","sources":["../src/webgl2-ellipse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAuCxD,qBAAa,eAAe;IAQd,OAAO,CAAC,QAAQ,CAAC,EAAE;IAP/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;gBAE1B,EAAE,EAAE,sBAAsB;IA4BvD;;;;;;OAMG;IACH,IAAI,CACF,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAC7C,IAAI;IAoCP,OAAO,IAAI,IAAI;CAKhB"}
@@ -26,12 +26,18 @@ import { compileShader, glReq, linkProgram } from "./webgl-helpers.js";
26
26
  * `smoothstep(1+fwidth, 1-fwidth, r²)` gives sub-pixel AA at the
27
27
  * boundary independent of zoom.
28
28
  */
29
+ /**
30
+ * Module-level scratch mat3 — same reuse pattern as the earcut / stroke
31
+ * scratch buffers in webgl2-target/webgl2-stroke. `uniformMatrix3fv`
32
+ * copies the values into GL state synchronously, so one shared buffer
33
+ * avoids a Float32Array allocation per ellipse fill.
34
+ */
35
+ const scratchMat3 = new Float32Array(9);
29
36
  export class EllipsePipeline {
30
37
  gl;
31
38
  program;
32
39
  vbo;
33
- aPos;
34
- aLocal;
40
+ vao;
35
41
  uTransform;
36
42
  uColor;
37
43
  uOpacity;
@@ -40,15 +46,24 @@ export class EllipsePipeline {
40
46
  const vert = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SRC, "Ellipse");
41
47
  const frag = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SRC, "Ellipse");
42
48
  this.program = linkProgram(gl, vert, frag, "Ellipse");
43
- this.aPos = gl.getAttribLocation(this.program, "aPos");
44
- this.aLocal = gl.getAttribLocation(this.program, "aLocal");
49
+ const aPos = gl.getAttribLocation(this.program, "aPos");
50
+ const aLocal = gl.getAttribLocation(this.program, "aLocal");
45
51
  this.uTransform = gl.getUniformLocation(this.program, "uTransform");
46
52
  this.uColor = gl.getUniformLocation(this.program, "uColor");
47
53
  this.uOpacity = gl.getUniformLocation(this.program, "uOpacity");
48
- // Static interleaved buffer — never re-uploaded.
54
+ // Static interleaved buffer — never re-uploaded. The attribute
55
+ // layout is recorded into a VAO once; per draw the pipeline just
56
+ // binds the VAO (no bufferData, no pointer re-declaration).
49
57
  this.vbo = glReq(gl.createBuffer());
58
+ this.vao = glReq(gl.createVertexArray());
59
+ gl.bindVertexArray(this.vao);
50
60
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
51
61
  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, -1, -1, 1, 0, 1, -1, 0, 1, -1, 1, 1, 1, 1, 1]), gl.STATIC_DRAW);
62
+ gl.enableVertexAttribArray(aPos);
63
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
64
+ gl.enableVertexAttribArray(aLocal);
65
+ gl.vertexAttribPointer(aLocal, 2, gl.FLOAT, false, 16, 8);
66
+ gl.bindVertexArray(null);
52
67
  }
53
68
  /**
54
69
  * Draw a filled ellipse. `cx, cy` — centre in caller's coordinate
@@ -62,11 +77,7 @@ export class EllipsePipeline {
62
77
  return;
63
78
  const gl = this.gl;
64
79
  gl.useProgram(this.program);
65
- gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
66
- gl.enableVertexAttribArray(this.aPos);
67
- gl.vertexAttribPointer(this.aPos, 2, gl.FLOAT, false, 16, 0);
68
- gl.enableVertexAttribArray(this.aLocal);
69
- gl.vertexAttribPointer(this.aLocal, 2, gl.FLOAT, false, 16, 8);
80
+ gl.bindVertexArray(this.vao);
70
81
  const w = 2 * rx;
71
82
  const h = 2 * ry;
72
83
  const left = cx - rx;
@@ -79,23 +90,25 @@ export class EllipsePipeline {
79
90
  // inWorld = transform · (scaleSq + (left, top))
80
91
  // inClip = pixel→clip(inWorld)
81
92
  const t = transform;
82
- const mat = new Float32Array([
83
- t.a * w * sx,
84
- t.b * w * sy,
85
- 0,
86
- t.c * h * sx,
87
- t.d * h * sy,
88
- 0,
89
- (t.a * left + t.c * top + t.e) * sx - 1,
90
- (t.b * left + t.d * top + t.f) * sy + 1,
91
- 1,
92
- ]);
93
- gl.uniformMatrix3fv(this.uTransform, false, mat);
93
+ scratchMat3[0] = t.a * w * sx;
94
+ scratchMat3[1] = t.b * w * sy;
95
+ scratchMat3[2] = 0;
96
+ scratchMat3[3] = t.c * h * sx;
97
+ scratchMat3[4] = t.d * h * sy;
98
+ scratchMat3[5] = 0;
99
+ scratchMat3[6] = (t.a * left + t.c * top + t.e) * sx - 1;
100
+ scratchMat3[7] = (t.b * left + t.d * top + t.f) * sy + 1;
101
+ scratchMat3[8] = 1;
102
+ gl.uniformMatrix3fv(this.uTransform, false, scratchMat3);
94
103
  gl.uniform3f(this.uColor, color[0], color[1], color[2]);
95
104
  gl.uniform1f(this.uOpacity, opacity);
96
105
  gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
106
+ // Reset to the default VAO so this pipeline's attribute state can't
107
+ // leak into other pipelines (matches the rect-batch discipline).
108
+ gl.bindVertexArray(null);
97
109
  }
98
110
  dispose() {
111
+ this.gl.deleteVertexArray(this.vao);
99
112
  this.gl.deleteBuffer(this.vbo);
100
113
  this.gl.deleteProgram(this.program);
101
114
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2-ellipse.js","sourceRoot":"","sources":["../src/webgl2-ellipse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl2-ellipse.js","sourceRoot":"","sources":["../src/webgl2-ellipse.ts"],"names":[],"mappings":"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"}
@@ -24,13 +24,12 @@ export declare class MsdfTextPipeline {
24
24
  private readonly gl;
25
25
  private readonly program;
26
26
  private readonly vbo;
27
+ private readonly vao;
27
28
  private readonly uTransform;
28
29
  private readonly uColor;
29
30
  private readonly uOpacity;
30
31
  private readonly uPxRange;
31
32
  private readonly uAtlas;
32
- private readonly aPos;
33
- private readonly aUV;
34
33
  constructor(gl: WebGL2RenderingContext);
35
34
  /**
36
35
  * Build per-glyph quads for `text` starting at the cursor position
@@ -80,4 +79,18 @@ export declare const glyphQuadGeometry: (g: AtlasGlyph, cursorX: number, cursorY
80
79
  u1: number;
81
80
  v1: number;
82
81
  };
82
+ /**
83
+ * Em-width of `text` under `atlas`/`fontId`: Σ over codepoints of
84
+ * `advance / unitsPerEm`. Multiply by `fontSize` for the pixel width the
85
+ * MSDF pipeline lays out (`drawText` steps the cursor by
86
+ * `advance * fontSize / unitsPerEm`). Missing glyphs (atlas full) are
87
+ * skipped, matching the layout walk's per-glyph contribution for runs it
88
+ * fully renders.
89
+ *
90
+ * Single pass, memoized: a repeat measure — or a measure of a string that
91
+ * was just drawn — returns without re-walking the codepoints. Exported so
92
+ * `WebGL2Target.textMetrics` shares this one implementation instead of a
93
+ * duplicate atlas walk.
94
+ */
95
+ export declare const measureGlyphRunEm: (text: string, atlas: GlyphAtlas, fontId?: number) => number;
83
96
  //# sourceMappingURL=webgl2-msdf-text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2-msdf-text.d.ts","sourceRoot":"","sources":["../src/webgl2-msdf-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,qBAAa,gBAAgB;IAWf,OAAO,CAAC,QAAQ,CAAC,EAAE;IAV/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEA,EAAE,EAAE,sBAAsB;IAcvD;;;;;;;;;OASG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAC9C;;;;;OAKG;IACH,WAAW,SAAI;IACf,wEAAwE;IACxE,MAAM,SAAI,GACT,MAAM;IAkET,OAAO,IAAI,IAAI;CAIhB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,GAAG,UAAU,EACb,SAAS,MAAM,EACf,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,OAAO;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAC5D;IACD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CA2CZ,CAAC"}
1
+ {"version":3,"file":"webgl2-msdf-text.d.ts","sourceRoot":"","sources":["../src/webgl2-msdf-text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIxD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,mCAAmC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED,qBAAa,gBAAgB;IAUf,OAAO,CAAC,QAAQ,CAAC,EAAE;IAT/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;gBAExB,EAAE,EAAE,sBAAsB;IA2BvD;;;;;;;;;OASG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAC9C;;;;;OAKG;IACH,WAAW,SAAI;IACf,wEAAwE;IACxE,MAAM,SAAI,GACT,MAAM;IA+ET,OAAO,IAAI,IAAI;CAKhB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,GAAG,UAAU,EACb,SAAS,MAAM,EACf,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,OAAO;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,KAC5D;IACD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CA2CZ,CAAC;AA6BF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,OAAO,UAAU,EAAE,eAAU,KAAG,MAuB/E,CAAC"}
@@ -1,28 +1,41 @@
1
1
  import { compileShader, glReq, linkProgram } from "./webgl-helpers.js";
2
+ import { WEBGL2_MSDF_RUN_WIDTH_CACHE_CAP } from "./constants.js";
2
3
  export class MsdfTextPipeline {
3
4
  gl;
4
5
  program;
5
6
  vbo;
7
+ vao;
6
8
  uTransform;
7
9
  uColor;
8
10
  uOpacity;
9
11
  uPxRange;
10
12
  uAtlas;
11
- aPos;
12
- aUV;
13
13
  constructor(gl) {
14
14
  this.gl = gl;
15
15
  const vert = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SRC, "MSDF");
16
16
  const frag = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SRC, "MSDF");
17
17
  this.program = linkProgram(gl, vert, frag, "MSDF");
18
18
  this.vbo = glReq(gl.createBuffer());
19
- this.aPos = gl.getAttribLocation(this.program, "aPos");
20
- this.aUV = gl.getAttribLocation(this.program, "aUV");
19
+ const aPos = gl.getAttribLocation(this.program, "aPos");
20
+ const aUV = gl.getAttribLocation(this.program, "aUV");
21
21
  this.uTransform = gl.getUniformLocation(this.program, "uTransform");
22
22
  this.uColor = gl.getUniformLocation(this.program, "uColor");
23
23
  this.uOpacity = gl.getUniformLocation(this.program, "uOpacity");
24
24
  this.uPxRange = gl.getUniformLocation(this.program, "uPxRange");
25
25
  this.uAtlas = gl.getUniformLocation(this.program, "uAtlas");
26
+ // Record the interleaved (x, y, u, v) layout on the persistent VBO
27
+ // into a VAO once — per draw the pipeline just binds the VAO and
28
+ // re-uploads vertex data with `bufferData` (bufferData targets the
29
+ // ARRAY_BUFFER binding point, not the VAO, so the recorded pointers
30
+ // stay valid).
31
+ this.vao = glReq(gl.createVertexArray());
32
+ gl.bindVertexArray(this.vao);
33
+ gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
34
+ gl.enableVertexAttribArray(aPos);
35
+ gl.vertexAttribPointer(aPos, 2, gl.FLOAT, false, 16, 0);
36
+ gl.enableVertexAttribArray(aUV);
37
+ gl.vertexAttribPointer(aUV, 2, gl.FLOAT, false, 16, 8);
38
+ gl.bindVertexArray(null);
26
39
  }
27
40
  /**
28
41
  * Build per-glyph quads for `text` starting at the cursor position
@@ -57,13 +70,20 @@ export class MsdfTextPipeline {
57
70
  const buf = scratchGlyphBuf;
58
71
  let writeOffset = 0;
59
72
  let cursor = x;
73
+ // `completed` stays true only if every codepoint resolved to a glyph
74
+ // — a `break` (atlas full) leaves a partial run whose width differs
75
+ // from the measure path (which skips the missing glyph and sums the
76
+ // rest), so we must not seed the shared width memo from it.
77
+ let completed = true;
60
78
  for (const ch of text) {
61
79
  const cp = ch.codePointAt(0);
62
80
  if (cp === undefined)
63
81
  continue;
64
82
  const glyph = atlas.getOrRasterize(cp, fontId);
65
- if (!glyph)
83
+ if (!glyph) {
84
+ completed = false;
66
85
  break; // atlas full or shaper unavailable
86
+ }
67
87
  const advancePx = (glyph.advance * fontSize) / glyph.unitsPerEm;
68
88
  if (glyph.empty) {
69
89
  cursor += advancePx;
@@ -73,17 +93,20 @@ export class MsdfTextPipeline {
73
93
  writeOffset += verticesPerGlyph * floatsPerVertex;
74
94
  cursor += advancePx;
75
95
  }
96
+ // This draw already walked every codepoint, so the run's em-width is
97
+ // known — seed the shared memo so a later `measureText` on the same
98
+ // string is O(1) (single pass across draw + measure). Only for full
99
+ // runs and a positive fontSize (em = px / fontSize).
100
+ if (completed && fontSize > 0)
101
+ rememberRunEm(atlas, text, fontId, (cursor - x) / fontSize);
76
102
  if (writeOffset === 0)
77
103
  return cursor - x; // every glyph empty / unavailable
78
104
  const tex = atlas.uploadTo(this.gl);
79
105
  const gl = this.gl;
80
106
  gl.useProgram(this.program);
107
+ gl.bindVertexArray(this.vao);
81
108
  gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
82
109
  gl.bufferData(gl.ARRAY_BUFFER, buf.subarray(0, writeOffset), gl.DYNAMIC_DRAW);
83
- gl.enableVertexAttribArray(this.aPos);
84
- gl.vertexAttribPointer(this.aPos, 2, gl.FLOAT, false, 16, 0);
85
- gl.enableVertexAttribArray(this.aUV);
86
- gl.vertexAttribPointer(this.aUV, 2, gl.FLOAT, false, 16, 8);
87
110
  // Alignment: shift the whole run left by `width × alignFactor` in
88
111
  // world space, folded into the transform's translation (screen
89
112
  // shift = column-0 × worldDx). One walk total — no separate width
@@ -108,9 +131,13 @@ export class MsdfTextPipeline {
108
131
  gl.bindTexture(gl.TEXTURE_2D, tex);
109
132
  gl.uniform1i(this.uAtlas, 0);
110
133
  gl.drawArrays(gl.TRIANGLES, 0, writeOffset / floatsPerVertex);
134
+ // Reset to the default VAO so this pipeline's attribute state can't
135
+ // leak into other pipelines (matches the rect-batch discipline).
136
+ gl.bindVertexArray(null);
111
137
  return cursor - x;
112
138
  }
113
139
  dispose() {
140
+ this.gl.deleteVertexArray(this.vao);
114
141
  this.gl.deleteBuffer(this.vbo);
115
142
  this.gl.deleteProgram(this.program);
116
143
  }
@@ -167,6 +194,71 @@ export const glyphQuadGeometry = (g, cursorX, cursorY, fontSize, atlas) => {
167
194
  const v1 = (g.atlasY + usedH_atlas - inset) / atlas.atlasSize;
168
195
  return { left, top, right, bottom, u0, v0, u1, v1 };
169
196
  };
197
+ /**
198
+ * Per-atlas memo of run em-widths (Σ advance/unitsPerEm), keyed by
199
+ * `(fontId, text)`. Advances are immutable once a glyph is cached in the
200
+ * atlas, so this value never goes stale; the atlas is the WeakMap key so
201
+ * a disposed atlas's memo is collected with it. Each per-atlas Map is an
202
+ * insertion-ordered LRU capped at {@link WEBGL2_MSDF_RUN_WIDTH_CACHE_CAP}.
203
+ */
204
+ const runEmWidthMemo = new WeakMap();
205
+ const runKey = (text, fontId) => `${fontId}${text}`;
206
+ const rememberRunEm = (atlas, text, fontId, em) => {
207
+ let perAtlas = runEmWidthMemo.get(atlas);
208
+ if (!perAtlas) {
209
+ perAtlas = new Map();
210
+ runEmWidthMemo.set(atlas, perAtlas);
211
+ }
212
+ const key = runKey(text, fontId);
213
+ // Touch to move to the tail (freshest) so eviction drops the coldest.
214
+ perAtlas.delete(key);
215
+ perAtlas.set(key, em);
216
+ if (perAtlas.size > WEBGL2_MSDF_RUN_WIDTH_CACHE_CAP) {
217
+ const oldest = perAtlas.keys().next().value;
218
+ if (oldest !== undefined)
219
+ perAtlas.delete(oldest);
220
+ }
221
+ };
222
+ /**
223
+ * Em-width of `text` under `atlas`/`fontId`: Σ over codepoints of
224
+ * `advance / unitsPerEm`. Multiply by `fontSize` for the pixel width the
225
+ * MSDF pipeline lays out (`drawText` steps the cursor by
226
+ * `advance * fontSize / unitsPerEm`). Missing glyphs (atlas full) are
227
+ * skipped, matching the layout walk's per-glyph contribution for runs it
228
+ * fully renders.
229
+ *
230
+ * Single pass, memoized: a repeat measure — or a measure of a string that
231
+ * was just drawn — returns without re-walking the codepoints. Exported so
232
+ * `WebGL2Target.textMetrics` shares this one implementation instead of a
233
+ * duplicate atlas walk.
234
+ */
235
+ export const measureGlyphRunEm = (text, atlas, fontId = 0) => {
236
+ if (text.length === 0)
237
+ return 0;
238
+ const key = runKey(text, fontId);
239
+ const perAtlas = runEmWidthMemo.get(atlas);
240
+ if (perAtlas) {
241
+ const cached = perAtlas.get(key);
242
+ if (cached !== undefined) {
243
+ // Touch on hit so hot runs stay warm under LRU pressure.
244
+ perAtlas.delete(key);
245
+ perAtlas.set(key, cached);
246
+ return cached;
247
+ }
248
+ }
249
+ let em = 0;
250
+ for (const ch of text) {
251
+ const cp = ch.codePointAt(0);
252
+ if (cp === undefined)
253
+ continue;
254
+ const glyph = atlas.getOrRasterize(cp, fontId);
255
+ if (!glyph)
256
+ continue;
257
+ em += glyph.advance / glyph.unitsPerEm;
258
+ }
259
+ rememberRunEm(atlas, text, fontId, em);
260
+ return em;
261
+ };
170
262
  const writeGlyphQuad = (buf, offset, g, cursorX, cursorY, fontSize, atlas) => {
171
263
  const { left, top, right, bottom, u0, v0, u1, v1 } = glyphQuadGeometry(g, cursorX, cursorY, fontSize, atlas);
172
264
  // Two triangles, six vertices, (x, y, u, v) each.
@@ -1 +1 @@
1
- {"version":3,"file":"webgl2-msdf-text.js","sourceRoot":"","sources":["../src/webgl2-msdf-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl2-msdf-text.js","sourceRoot":"","sources":["../src/webgl2-msdf-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Floats per instance in a {@link RectBatch}:
3
+ * [m0x, m0y, m1x, m1y, tx, ty, r, g, b, a]
4
+ *
5
+ * The first six carry the rect's already-projected clip-space affine
6
+ * (unit-quad → NDC) as two column vectors + a translation — the same
7
+ * matrix the non-batched rect-fill path feeds `uniformMatrix3fv`, minus
8
+ * the constant `[0, 0, 1]` third column the vertex shader reconstructs.
9
+ * The last four carry the fill colour with `a` = effective alpha
10
+ * (`opacity * fillAlpha`); the shader premultiplies to match the
11
+ * `blendFunc(ONE, 1-SRC_ALPHA)` contract.
12
+ */
13
+ export declare const RECT_INSTANCE_FLOATS = 10;
14
+ /**
15
+ * CPU-side accumulator for instanced sharp-rect fills — the pure,
16
+ * GL-free half of the batcher. {@link WebGL2Target} queues one instance
17
+ * per axis-aligned `rect()` + `fill()` and drains the queue via
18
+ * {@link flush} whenever a non-batchable draw intervenes or the frame
19
+ * ends, so draw order (z-order) is preserved: every rect queued before
20
+ * an interrupting op is emitted, in submission order, before that op.
21
+ *
22
+ * Kept free of any `WebGLRenderingContext` reference so the flush /
23
+ * ordering / packing logic is unit-testable in Node — the GL upload +
24
+ * `drawArraysInstanced` live in {@link RectInstancePipeline}, injected as
25
+ * the {@link flush} sink.
26
+ *
27
+ * Capacity ratchets up to the next power of two on demand and never
28
+ * shrinks; single-threaded WebGL serialises all pushes so no locking is
29
+ * needed.
30
+ */
31
+ export declare class RectBatch {
32
+ private data;
33
+ private instanceCount;
34
+ constructor(initialInstances?: number);
35
+ /** Number of instances queued since the last flush. */
36
+ get pending(): number;
37
+ /**
38
+ * Queue one rect-fill instance. `m0*` / `m1*` / `t*` are the projected
39
+ * clip-space affine columns (see {@link RECT_INSTANCE_FLOATS}); `r,g,b`
40
+ * are the fill colour in 0–1 and `a` the effective alpha.
41
+ */
42
+ add(m0x: number, m0y: number, m1x: number, m1y: number, tx: number, ty: number, r: number, g: number, b: number, a: number): void;
43
+ /**
44
+ * Drain the queue through `sink` (one instanced draw) and reset. No-op
45
+ * when empty. Returns whether a draw was issued. `sink` receives the
46
+ * backing buffer (which may be longer than `count * stride` — read only
47
+ * the first `count` instances) and the instance count.
48
+ */
49
+ flush(sink: (data: Float32Array, instanceCount: number) => void): boolean;
50
+ /** Drop queued instances without drawing (context loss / dispose). */
51
+ reset(): void;
52
+ }
53
+ /**
54
+ * GL half of the sharp-rect batcher: owns the instanced program, a VAO
55
+ * binding a static unit-quad (per-vertex) to a growable per-instance
56
+ * buffer, and issues one `drawArraysInstanced` per flush.
57
+ *
58
+ * One draw call renders the whole queued run regardless of instance
59
+ * count — the win over the per-rect `drawArrays` path that motivated the
60
+ * batcher (B19). Instances draw in submission order with blending on and
61
+ * depth off, so later rects blend over earlier ones exactly as
62
+ * sequential draws would.
63
+ */
64
+ export declare class RectInstancePipeline {
65
+ private readonly gl;
66
+ private readonly program;
67
+ private readonly vao;
68
+ private readonly unitQuadVbo;
69
+ private readonly instanceVbo;
70
+ /** Byte capacity currently allocated on `instanceVbo`. */
71
+ private instanceBytes;
72
+ constructor(gl: WebGL2RenderingContext);
73
+ /**
74
+ * Upload the first `instanceCount` instances of `data` and draw them
75
+ * in one instanced call. Leaves the default VAO bound so the caller's
76
+ * non-VAO solid-program plumbing keeps working.
77
+ */
78
+ draw(data: Float32Array, instanceCount: number): void;
79
+ dispose(): void;
80
+ }
81
+ //# sourceMappingURL=webgl2-rect-batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl2-rect-batch.d.ts","sourceRoot":"","sources":["../src/webgl2-rect-batch.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,aAAa,CAAK;gBAEd,gBAAgB,GAAE,MAAqC;IAInE,uDAAuD;IACvD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;;;OAIG;IACH,GAAG,CACD,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,IAAI;IAuBP;;;;;OAKG;IACH,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO;IAOzE,sEAAsE;IACtE,KAAK,IAAI,IAAI;CAGd;AAED;;;;;;;;;;GAUG;AACH,qBAAa,oBAAoB;IAQnB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAP/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,0DAA0D;IAC1D,OAAO,CAAC,aAAa,CAAK;gBAEG,EAAE,EAAE,sBAAsB;IA2CvD;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAoBrD,OAAO,IAAI,IAAI;CAMhB"}