@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.
- package/CHANGELOG.md +108 -0
- package/README.md +10 -7
- package/dist/.tsbuildinfo +1 -1
- package/dist/canvas-target.d.ts +6 -1
- package/dist/canvas-target.d.ts.map +1 -1
- package/dist/canvas-target.js +12 -2
- package/dist/canvas-target.js.map +1 -1
- package/dist/constants.d.ts +49 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +49 -0
- package/dist/constants.js.map +1 -1
- package/dist/hi-dpi.d.ts +10 -0
- package/dist/hi-dpi.d.ts.map +1 -1
- package/dist/hi-dpi.js +12 -1
- package/dist/hi-dpi.js.map +1 -1
- package/dist/image-source.d.ts +11 -0
- package/dist/image-source.d.ts.map +1 -1
- package/dist/image-source.js +20 -0
- package/dist/image-source.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/layered-canvas.d.ts +7 -1
- package/dist/layered-canvas.d.ts.map +1 -1
- package/dist/layered-canvas.js +6 -3
- package/dist/layered-canvas.js.map +1 -1
- package/dist/layered-surface.d.ts +16 -0
- package/dist/layered-surface.d.ts.map +1 -1
- package/dist/layered-surface.js +59 -14
- package/dist/layered-surface.js.map +1 -1
- package/dist/recording-target.d.ts +56 -13
- package/dist/recording-target.d.ts.map +1 -1
- package/dist/recording-target.js +229 -38
- package/dist/recording-target.js.map +1 -1
- package/dist/render-worker.js +19 -7
- package/dist/render-worker.js.map +1 -1
- package/dist/replay-codec.d.ts +56 -0
- package/dist/replay-codec.d.ts.map +1 -0
- package/dist/replay-codec.js +543 -0
- package/dist/replay-codec.js.map +1 -0
- package/dist/tile-compositor.d.ts +52 -1
- package/dist/tile-compositor.d.ts.map +1 -1
- package/dist/tile-compositor.js +82 -5
- package/dist/tile-compositor.js.map +1 -1
- package/dist/webgl2-curve.d.ts +12 -2
- package/dist/webgl2-curve.d.ts.map +1 -1
- package/dist/webgl2-curve.js +168 -40
- package/dist/webgl2-curve.js.map +1 -1
- package/dist/webgl2-ellipse.d.ts +1 -29
- package/dist/webgl2-ellipse.d.ts.map +1 -1
- package/dist/webgl2-ellipse.js +35 -22
- package/dist/webgl2-ellipse.js.map +1 -1
- package/dist/webgl2-msdf-text.d.ts +15 -2
- package/dist/webgl2-msdf-text.d.ts.map +1 -1
- package/dist/webgl2-msdf-text.js +101 -9
- package/dist/webgl2-msdf-text.js.map +1 -1
- package/dist/webgl2-rect-batch.d.ts +81 -0
- package/dist/webgl2-rect-batch.d.ts.map +1 -0
- package/dist/webgl2-rect-batch.js +201 -0
- package/dist/webgl2-rect-batch.js.map +1 -0
- package/dist/webgl2-stroke.d.ts +14 -35
- package/dist/webgl2-stroke.d.ts.map +1 -1
- package/dist/webgl2-stroke.js +27 -30
- package/dist/webgl2-stroke.js.map +1 -1
- package/dist/webgl2-target.d.ts +95 -13
- package/dist/webgl2-target.d.ts.map +1 -1
- package/dist/webgl2-target.js +423 -230
- package/dist/webgl2-target.js.map +1 -1
- 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;
|
|
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"}
|
package/dist/webgl2-ellipse.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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.
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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":"AACA,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,OAAO,eAAe;
|
|
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;
|
|
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"}
|
package/dist/webgl2-msdf-text.js
CHANGED
|
@@ -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
|
-
|
|
20
|
-
|
|
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"}
|