@oh-just-another/renderer-canvas 0.59.0 → 0.60.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 +54 -0
- package/README.md +3 -0
- 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 +50 -13
- package/dist/layered-surface.js.map +1 -1
- package/dist/recording-target.d.ts +36 -12
- package/dist/recording-target.d.ts.map +1 -1
- package/dist/recording-target.js +159 -33
- package/dist/recording-target.js.map +1 -1
- package/dist/tile-compositor.d.ts +43 -1
- package/dist/tile-compositor.d.ts.map +1 -1
- package/dist/tile-compositor.js +48 -5
- package/dist/tile-compositor.js.map +1 -1
- package/dist/webgl2-curve.d.ts +11 -0
- package/dist/webgl2-curve.d.ts.map +1 -1
- package/dist/webgl2-curve.js +147 -32
- package/dist/webgl2-curve.js.map +1 -1
- package/dist/webgl2-ellipse.d.ts +0 -27
- package/dist/webgl2-ellipse.d.ts.map +1 -1
- package/dist/webgl2-ellipse.js +17 -12
- package/dist/webgl2-ellipse.js.map +1 -1
- package/dist/webgl2-msdf-text.d.ts +14 -0
- package/dist/webgl2-msdf-text.d.ts.map +1 -1
- package/dist/webgl2-msdf-text.js +80 -1
- 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 +6 -30
- package/dist/webgl2-stroke.d.ts.map +1 -1
- package/dist/webgl2-stroke.js +16 -24
- package/dist/webgl2-stroke.js.map +1 -1
- package/dist/webgl2-target.d.ts +63 -7
- package/dist/webgl2-target.d.ts.map +1 -1
- package/dist/webgl2-target.js +308 -193
- package/dist/webgl2-target.js.map +1 -1
- package/package.json +4 -3
package/dist/webgl2-curve.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CurveTriangleBatch } from "@oh-just-another/curve-mesh";
|
|
2
|
+
import { WEBGL2_CURVE_TRIANGULATION_CACHE_CAP } from "./constants.js";
|
|
2
3
|
import { compileShader, glReq, linkProgram } from "./webgl-helpers.js";
|
|
3
4
|
export class LoopBlinnCurvePipeline {
|
|
4
5
|
gl;
|
|
@@ -31,27 +32,9 @@ export class LoopBlinnCurvePipeline {
|
|
|
31
32
|
draw(curves, color, opacity, transform, surfaceSize) {
|
|
32
33
|
if (curves.length === 0 || opacity <= 0)
|
|
33
34
|
return;
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
if (seg.kind === "q") {
|
|
37
|
-
const [p0, p1, p2] = seg.points;
|
|
38
|
-
if (!p0 || !p1 || !p2)
|
|
39
|
-
continue;
|
|
40
|
-
const tri = quadraticToTriangle(p0, p1, p2);
|
|
41
|
-
if (tri)
|
|
42
|
-
triangles.push(tri);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
const [p0, p1, p2, p3] = seg.points;
|
|
46
|
-
if (!p0 || !p1 || !p2 || !p3)
|
|
47
|
-
continue;
|
|
48
|
-
for (const tri of cubicToTriangles(p0, p1, p2, p3))
|
|
49
|
-
triangles.push(tri);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (triangles.length === 0)
|
|
35
|
+
const { positions, uvs } = triangulateCached(curves);
|
|
36
|
+
if (positions.length === 0)
|
|
53
37
|
return;
|
|
54
|
-
const { positions, uvs } = packCurveTriangles(triangles);
|
|
55
38
|
const gl = this.gl;
|
|
56
39
|
gl.useProgram(this.program);
|
|
57
40
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
|
|
@@ -73,20 +56,152 @@ export class LoopBlinnCurvePipeline {
|
|
|
73
56
|
this.gl.deleteProgram(this.program);
|
|
74
57
|
}
|
|
75
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Module-level scratch for `affineToClipMat3` — same reuse pattern as
|
|
61
|
+
* the earcut / stroke / `applyMat` scratch buffers in webgl2-target.
|
|
62
|
+
* Consumed synchronously by `uniformMatrix3fv` (which copies the values
|
|
63
|
+
* into GL state), so one shared buffer avoids a Float32Array allocation
|
|
64
|
+
* per curve draw.
|
|
65
|
+
*/
|
|
66
|
+
const scratchClipMat3 = new Float32Array(9);
|
|
76
67
|
const affineToClipMat3 = (t, w, h) => {
|
|
77
68
|
const sx = 2 / w;
|
|
78
69
|
const sy = -2 / h;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
70
|
+
scratchClipMat3[0] = t.a * sx;
|
|
71
|
+
scratchClipMat3[1] = t.b * sy;
|
|
72
|
+
scratchClipMat3[2] = 0;
|
|
73
|
+
scratchClipMat3[3] = t.c * sx;
|
|
74
|
+
scratchClipMat3[4] = t.d * sy;
|
|
75
|
+
scratchClipMat3[5] = 0;
|
|
76
|
+
scratchClipMat3[6] = t.e * sx - 1;
|
|
77
|
+
scratchClipMat3[7] = t.f * sy + 1;
|
|
78
|
+
scratchClipMat3[8] = 1;
|
|
79
|
+
return scratchClipMat3;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Content-keyed LRU cache of Loop-Blinn triangulations, shared by all
|
|
83
|
+
* `LoopBlinnCurvePipeline` instances (the data is GL-independent).
|
|
84
|
+
*
|
|
85
|
+
* Renderers emit paths in element-local coordinates and `draw()` gets
|
|
86
|
+
* the view transform separately (applied in the vertex shader), so:
|
|
87
|
+
* - identical geometry (every same-size rounded rect) shares one entry;
|
|
88
|
+
* - pan / zoom / drag never invalidate an entry;
|
|
89
|
+
* - no scale bucket is needed — triangulation is scale-independent
|
|
90
|
+
* (fixed cubic subdivision count, no screen-space adaptivity).
|
|
91
|
+
*
|
|
92
|
+
* The `curves` array is rebuilt by `WebGL2Target` on every
|
|
93
|
+
* `beginPath()`, so there is no stable object identity to key a WeakMap
|
|
94
|
+
* on; instead the key is the flat list of segment kinds +
|
|
95
|
+
* control-point coordinates, addressed by a 32-bit FNV-1a hash with a
|
|
96
|
+
* full float comparison on hit (hash collisions fall back to
|
|
97
|
+
* recompute + replace). `Map` insertion order gives LRU: hits re-insert
|
|
98
|
+
* at the tail, overflow evicts the head.
|
|
99
|
+
*/
|
|
100
|
+
const curveMeshCache = new Map();
|
|
101
|
+
/** Scratch for building the flat key without per-draw allocation. */
|
|
102
|
+
let scratchKey = new Float64Array(64);
|
|
103
|
+
const ensureKeyCapacity = (n) => {
|
|
104
|
+
if (scratchKey.length >= n)
|
|
105
|
+
return;
|
|
106
|
+
let cap = scratchKey.length;
|
|
107
|
+
while (cap < n)
|
|
108
|
+
cap *= 2;
|
|
109
|
+
scratchKey = new Float64Array(cap);
|
|
110
|
+
};
|
|
111
|
+
/** Views over one float64 for hashing its bit pattern. */
|
|
112
|
+
const hashFloatBuf = new Float64Array(1);
|
|
113
|
+
const hashFloatBits = new Uint32Array(hashFloatBuf.buffer);
|
|
114
|
+
/** Shared zero-allocation triangulation sink (see `CurveTriangleBatch`). */
|
|
115
|
+
const sharedBatch = new CurveTriangleBatch();
|
|
116
|
+
/**
|
|
117
|
+
* Flatten `curves` into `scratchKey` (kind marker + control points per
|
|
118
|
+
* segment) and return the used length.
|
|
119
|
+
*/
|
|
120
|
+
const buildKey = (curves) => {
|
|
121
|
+
// Worst case per segment: 1 kind marker + 4 points × 2 coords.
|
|
122
|
+
ensureKeyCapacity(curves.length * 9);
|
|
123
|
+
const key = scratchKey;
|
|
124
|
+
let off = 0;
|
|
125
|
+
for (const seg of curves) {
|
|
126
|
+
key[off++] = seg.kind === "q" ? 1 : 2;
|
|
127
|
+
for (const p of seg.points) {
|
|
128
|
+
key[off++] = p.x;
|
|
129
|
+
key[off++] = p.y;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return off;
|
|
133
|
+
};
|
|
134
|
+
/** FNV-1a over the bit patterns of `key[0..len)`. */
|
|
135
|
+
const hashKey = (key, len) => {
|
|
136
|
+
let h = 0x811c9dc5;
|
|
137
|
+
for (let i = 0; i < len; i++) {
|
|
138
|
+
hashFloatBuf[0] = key[i] ?? 0;
|
|
139
|
+
h = Math.imul(h ^ (hashFloatBits[0] ?? 0), 0x01000193);
|
|
140
|
+
h = Math.imul(h ^ (hashFloatBits[1] ?? 0), 0x01000193);
|
|
141
|
+
}
|
|
142
|
+
return h >>> 0;
|
|
143
|
+
};
|
|
144
|
+
const keysEqual = (a, b, len) => {
|
|
145
|
+
if (a.length !== len)
|
|
146
|
+
return false;
|
|
147
|
+
for (let i = 0; i < len; i++) {
|
|
148
|
+
if (a[i] !== b[i])
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
};
|
|
153
|
+
/** Triangulate `curves` through the shared batch into a fresh entry. */
|
|
154
|
+
const triangulate = (curves, keyLen) => {
|
|
155
|
+
sharedBatch.reset();
|
|
156
|
+
for (const seg of curves) {
|
|
157
|
+
if (seg.kind === "q") {
|
|
158
|
+
const [p0, p1, p2] = seg.points;
|
|
159
|
+
if (!p0 || !p1 || !p2)
|
|
160
|
+
continue;
|
|
161
|
+
sharedBatch.addQuadratic(p0, p1, p2);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const [p0, p1, p2, p3] = seg.points;
|
|
165
|
+
if (!p0 || !p1 || !p2 || !p3)
|
|
166
|
+
continue;
|
|
167
|
+
sharedBatch.addCubic(p0, p1, p2, p3);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
key: scratchKey.slice(0, keyLen),
|
|
172
|
+
// Copy out of the shared batch — entries outlive the next batch use.
|
|
173
|
+
positions: new Float32Array(sharedBatch.positions),
|
|
174
|
+
uvs: new Float32Array(sharedBatch.uvs),
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Cached triangulation lookup. Returns per-entry packed buffers —
|
|
179
|
+
* valid until the entry is evicted, which can't happen before the
|
|
180
|
+
* caller's synchronous `bufferData` upload.
|
|
181
|
+
*
|
|
182
|
+
* Exported for tests only — not part of the package's public API.
|
|
183
|
+
*/
|
|
184
|
+
export const triangulateCached = (curves) => {
|
|
185
|
+
const keyLen = buildKey(curves);
|
|
186
|
+
const hash = hashKey(scratchKey, keyLen);
|
|
187
|
+
const cached = curveMeshCache.get(hash);
|
|
188
|
+
if (cached && keysEqual(cached.key, scratchKey, keyLen)) {
|
|
189
|
+
// Touch — re-insert at the tail so LRU eviction picks colder entries.
|
|
190
|
+
curveMeshCache.delete(hash);
|
|
191
|
+
curveMeshCache.set(hash, cached);
|
|
192
|
+
return cached;
|
|
193
|
+
}
|
|
194
|
+
// Miss or hash collision — recompute and (re)place the slot.
|
|
195
|
+
const entry = triangulate(curves, keyLen);
|
|
196
|
+
curveMeshCache.delete(hash);
|
|
197
|
+
curveMeshCache.set(hash, entry);
|
|
198
|
+
while (curveMeshCache.size > WEBGL2_CURVE_TRIANGULATION_CACHE_CAP) {
|
|
199
|
+
const oldest = curveMeshCache.keys().next().value;
|
|
200
|
+
if (oldest === undefined)
|
|
201
|
+
break;
|
|
202
|
+
curveMeshCache.delete(oldest);
|
|
203
|
+
}
|
|
204
|
+
return entry;
|
|
90
205
|
};
|
|
91
206
|
/**
|
|
92
207
|
* Vertex shader passes through the Loop-Blinn (u, v, w) coordinates as
|
package/dist/webgl2-curve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl2-curve.js","sourceRoot":"","sources":["../src/webgl2-curve.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"webgl2-curve.js","sourceRoot":"","sources":["../src/webgl2-curve.ts"],"names":[],"mappings":"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"}
|
package/dist/webgl2-ellipse.d.ts
CHANGED
|
@@ -1,31 +1,4 @@
|
|
|
1
1
|
import type { Transform } from "@oh-just-another/types";
|
|
2
|
-
/**
|
|
3
|
-
* Fragment-shader SDF ellipse pipeline for `WebGL2Target`. Renders an
|
|
4
|
-
* ellipse as a single textured quad (4 vertices, 2 triangles)
|
|
5
|
-
* regardless of radius — the fragment shader does an inside/outside
|
|
6
|
-
* test against the unit circle in normalised local coordinates.
|
|
7
|
-
*
|
|
8
|
-
* Vertex layout (static, interleaved):
|
|
9
|
-
* aPos aLocal
|
|
10
|
-
* 0,0 -1,-1
|
|
11
|
-
* 1,0 1,-1
|
|
12
|
-
* 0,1 -1, 1
|
|
13
|
-
* 1,1 1, 1
|
|
14
|
-
*
|
|
15
|
-
* `uTransform` maps `aPos` (unit square [0,1]²) through:
|
|
16
|
-
* 1. scale to ellipse bbox (2*rx, 2*ry)
|
|
17
|
-
* 2. translate to (cx-rx, cy-ry)
|
|
18
|
-
* 3. apply caller's world→screen affine
|
|
19
|
-
* 4. pixel→clip-space (NDC)
|
|
20
|
-
*
|
|
21
|
-
* The fragment shader gets `vLocal` interpolated across the quad:
|
|
22
|
-
* inside the ellipse → dot(vLocal, vLocal) < 1
|
|
23
|
-
* on the boundary → dot(vLocal, vLocal) = 1
|
|
24
|
-
* outside → dot(vLocal, vLocal) > 1
|
|
25
|
-
*
|
|
26
|
-
* `smoothstep(1+fwidth, 1-fwidth, r²)` gives sub-pixel AA at the
|
|
27
|
-
* boundary independent of zoom.
|
|
28
|
-
*/
|
|
29
2
|
export declare class EllipsePipeline {
|
|
30
3
|
private readonly gl;
|
|
31
4
|
private readonly program;
|
|
@@ -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;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;IAqCP,OAAO,IAAI,IAAI;CAIhB"}
|
package/dist/webgl2-ellipse.js
CHANGED
|
@@ -26,6 +26,13 @@ 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;
|
|
@@ -79,18 +86,16 @@ export class EllipsePipeline {
|
|
|
79
86
|
// inWorld = transform · (scaleSq + (left, top))
|
|
80
87
|
// inClip = pixel→clip(inWorld)
|
|
81
88
|
const t = transform;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
]);
|
|
93
|
-
gl.uniformMatrix3fv(this.uTransform, false, mat);
|
|
89
|
+
scratchMat3[0] = t.a * w * sx;
|
|
90
|
+
scratchMat3[1] = t.b * w * sy;
|
|
91
|
+
scratchMat3[2] = 0;
|
|
92
|
+
scratchMat3[3] = t.c * h * sx;
|
|
93
|
+
scratchMat3[4] = t.d * h * sy;
|
|
94
|
+
scratchMat3[5] = 0;
|
|
95
|
+
scratchMat3[6] = (t.a * left + t.c * top + t.e) * sx - 1;
|
|
96
|
+
scratchMat3[7] = (t.b * left + t.d * top + t.f) * sy + 1;
|
|
97
|
+
scratchMat3[8] = 1;
|
|
98
|
+
gl.uniformMatrix3fv(this.uTransform, false, scratchMat3);
|
|
94
99
|
gl.uniform3f(this.uColor, color[0], color[1], color[2]);
|
|
95
100
|
gl.uniform1f(this.uOpacity, opacity);
|
|
96
101
|
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
@@ -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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"}
|
|
@@ -80,4 +80,18 @@ export declare const glyphQuadGeometry: (g: AtlasGlyph, cursorX: number, cursorY
|
|
|
80
80
|
u1: number;
|
|
81
81
|
v1: number;
|
|
82
82
|
};
|
|
83
|
+
/**
|
|
84
|
+
* Em-width of `text` under `atlas`/`fontId`: Σ over codepoints of
|
|
85
|
+
* `advance / unitsPerEm`. Multiply by `fontSize` for the pixel width the
|
|
86
|
+
* MSDF pipeline lays out (`drawText` steps the cursor by
|
|
87
|
+
* `advance * fontSize / unitsPerEm`). Missing glyphs (atlas full) are
|
|
88
|
+
* skipped, matching the layout walk's per-glyph contribution for runs it
|
|
89
|
+
* fully renders.
|
|
90
|
+
*
|
|
91
|
+
* Single pass, memoized: a repeat measure — or a measure of a string that
|
|
92
|
+
* was just drawn — returns without re-walking the codepoints. Exported so
|
|
93
|
+
* `WebGL2Target.textMetrics` shares this one implementation instead of a
|
|
94
|
+
* duplicate atlas walk.
|
|
95
|
+
*/
|
|
96
|
+
export declare const measureGlyphRunEm: (text: string, atlas: GlyphAtlas, fontId?: number) => number;
|
|
83
97
|
//# 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;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;IA+ET,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;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,4 +1,5 @@
|
|
|
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;
|
|
@@ -57,13 +58,20 @@ export class MsdfTextPipeline {
|
|
|
57
58
|
const buf = scratchGlyphBuf;
|
|
58
59
|
let writeOffset = 0;
|
|
59
60
|
let cursor = x;
|
|
61
|
+
// `completed` stays true only if every codepoint resolved to a glyph
|
|
62
|
+
// — a `break` (atlas full) leaves a partial run whose width differs
|
|
63
|
+
// from the measure path (which skips the missing glyph and sums the
|
|
64
|
+
// rest), so we must not seed the shared width memo from it.
|
|
65
|
+
let completed = true;
|
|
60
66
|
for (const ch of text) {
|
|
61
67
|
const cp = ch.codePointAt(0);
|
|
62
68
|
if (cp === undefined)
|
|
63
69
|
continue;
|
|
64
70
|
const glyph = atlas.getOrRasterize(cp, fontId);
|
|
65
|
-
if (!glyph)
|
|
71
|
+
if (!glyph) {
|
|
72
|
+
completed = false;
|
|
66
73
|
break; // atlas full or shaper unavailable
|
|
74
|
+
}
|
|
67
75
|
const advancePx = (glyph.advance * fontSize) / glyph.unitsPerEm;
|
|
68
76
|
if (glyph.empty) {
|
|
69
77
|
cursor += advancePx;
|
|
@@ -73,6 +81,12 @@ export class MsdfTextPipeline {
|
|
|
73
81
|
writeOffset += verticesPerGlyph * floatsPerVertex;
|
|
74
82
|
cursor += advancePx;
|
|
75
83
|
}
|
|
84
|
+
// This draw already walked every codepoint, so the run's em-width is
|
|
85
|
+
// known — seed the shared memo so a later `measureText` on the same
|
|
86
|
+
// string is O(1) (single pass across draw + measure). Only for full
|
|
87
|
+
// runs and a positive fontSize (em = px / fontSize).
|
|
88
|
+
if (completed && fontSize > 0)
|
|
89
|
+
rememberRunEm(atlas, text, fontId, (cursor - x) / fontSize);
|
|
76
90
|
if (writeOffset === 0)
|
|
77
91
|
return cursor - x; // every glyph empty / unavailable
|
|
78
92
|
const tex = atlas.uploadTo(this.gl);
|
|
@@ -167,6 +181,71 @@ export const glyphQuadGeometry = (g, cursorX, cursorY, fontSize, atlas) => {
|
|
|
167
181
|
const v1 = (g.atlasY + usedH_atlas - inset) / atlas.atlasSize;
|
|
168
182
|
return { left, top, right, bottom, u0, v0, u1, v1 };
|
|
169
183
|
};
|
|
184
|
+
/**
|
|
185
|
+
* Per-atlas memo of run em-widths (Σ advance/unitsPerEm), keyed by
|
|
186
|
+
* `(fontId, text)`. Advances are immutable once a glyph is cached in the
|
|
187
|
+
* atlas, so this value never goes stale; the atlas is the WeakMap key so
|
|
188
|
+
* a disposed atlas's memo is collected with it. Each per-atlas Map is an
|
|
189
|
+
* insertion-ordered LRU capped at {@link WEBGL2_MSDF_RUN_WIDTH_CACHE_CAP}.
|
|
190
|
+
*/
|
|
191
|
+
const runEmWidthMemo = new WeakMap();
|
|
192
|
+
const runKey = (text, fontId) => `${fontId}${text}`;
|
|
193
|
+
const rememberRunEm = (atlas, text, fontId, em) => {
|
|
194
|
+
let perAtlas = runEmWidthMemo.get(atlas);
|
|
195
|
+
if (!perAtlas) {
|
|
196
|
+
perAtlas = new Map();
|
|
197
|
+
runEmWidthMemo.set(atlas, perAtlas);
|
|
198
|
+
}
|
|
199
|
+
const key = runKey(text, fontId);
|
|
200
|
+
// Touch to move to the tail (freshest) so eviction drops the coldest.
|
|
201
|
+
perAtlas.delete(key);
|
|
202
|
+
perAtlas.set(key, em);
|
|
203
|
+
if (perAtlas.size > WEBGL2_MSDF_RUN_WIDTH_CACHE_CAP) {
|
|
204
|
+
const oldest = perAtlas.keys().next().value;
|
|
205
|
+
if (oldest !== undefined)
|
|
206
|
+
perAtlas.delete(oldest);
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Em-width of `text` under `atlas`/`fontId`: Σ over codepoints of
|
|
211
|
+
* `advance / unitsPerEm`. Multiply by `fontSize` for the pixel width the
|
|
212
|
+
* MSDF pipeline lays out (`drawText` steps the cursor by
|
|
213
|
+
* `advance * fontSize / unitsPerEm`). Missing glyphs (atlas full) are
|
|
214
|
+
* skipped, matching the layout walk's per-glyph contribution for runs it
|
|
215
|
+
* fully renders.
|
|
216
|
+
*
|
|
217
|
+
* Single pass, memoized: a repeat measure — or a measure of a string that
|
|
218
|
+
* was just drawn — returns without re-walking the codepoints. Exported so
|
|
219
|
+
* `WebGL2Target.textMetrics` shares this one implementation instead of a
|
|
220
|
+
* duplicate atlas walk.
|
|
221
|
+
*/
|
|
222
|
+
export const measureGlyphRunEm = (text, atlas, fontId = 0) => {
|
|
223
|
+
if (text.length === 0)
|
|
224
|
+
return 0;
|
|
225
|
+
const key = runKey(text, fontId);
|
|
226
|
+
const perAtlas = runEmWidthMemo.get(atlas);
|
|
227
|
+
if (perAtlas) {
|
|
228
|
+
const cached = perAtlas.get(key);
|
|
229
|
+
if (cached !== undefined) {
|
|
230
|
+
// Touch on hit so hot runs stay warm under LRU pressure.
|
|
231
|
+
perAtlas.delete(key);
|
|
232
|
+
perAtlas.set(key, cached);
|
|
233
|
+
return cached;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
let em = 0;
|
|
237
|
+
for (const ch of text) {
|
|
238
|
+
const cp = ch.codePointAt(0);
|
|
239
|
+
if (cp === undefined)
|
|
240
|
+
continue;
|
|
241
|
+
const glyph = atlas.getOrRasterize(cp, fontId);
|
|
242
|
+
if (!glyph)
|
|
243
|
+
continue;
|
|
244
|
+
em += glyph.advance / glyph.unitsPerEm;
|
|
245
|
+
}
|
|
246
|
+
rememberRunEm(atlas, text, fontId, em);
|
|
247
|
+
return em;
|
|
248
|
+
};
|
|
170
249
|
const writeGlyphQuad = (buf, offset, g, cursorX, cursorY, fontSize, atlas) => {
|
|
171
250
|
const { left, top, right, bottom, u0, v0, u1, v1 } = glyphQuadGeometry(g, cursorX, cursorY, fontSize, atlas);
|
|
172
251
|
// 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"}
|