@oh-just-another/renderer-core 0.57.1 → 0.59.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 +70 -0
- package/README.md +98 -20
- package/dist/.tsbuildinfo +1 -1
- package/dist/animation-adapter.d.ts +22 -20
- package/dist/animation-adapter.d.ts.map +1 -1
- package/dist/animation-adapter.js +14 -15
- package/dist/animation-adapter.js.map +1 -1
- package/dist/built-in-renderers.d.ts +1 -2
- package/dist/built-in-renderers.d.ts.map +1 -1
- package/dist/built-in-renderers.js +144 -60
- package/dist/built-in-renderers.js.map +1 -1
- package/dist/constants.d.ts +64 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +67 -0
- package/dist/constants.js.map +1 -1
- package/dist/dim-target.d.ts +20 -0
- package/dist/dim-target.d.ts.map +1 -0
- package/dist/dim-target.js +37 -0
- package/dist/dim-target.js.map +1 -0
- package/dist/edge-cache-bitmap.d.ts +3 -4
- package/dist/edge-cache-bitmap.d.ts.map +1 -1
- package/dist/edge-cache-bitmap.js +4 -14
- package/dist/edge-cache-bitmap.js.map +1 -1
- package/dist/edge-renderer.d.ts +1 -1
- package/dist/edge-renderer.d.ts.map +1 -1
- package/dist/edge-renderer.js +13 -17
- package/dist/edge-renderer.js.map +1 -1
- package/dist/grid-renderer.d.ts.map +1 -1
- package/dist/grid-renderer.js +7 -20
- package/dist/grid-renderer.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/js-rasterizer.d.ts.map +1 -1
- package/dist/js-rasterizer.js +1 -5
- package/dist/js-rasterizer.js.map +1 -1
- package/dist/layer-cache-composite.d.ts +4 -7
- package/dist/layer-cache-composite.d.ts.map +1 -1
- package/dist/layer-cache-composite.js +5 -19
- package/dist/layer-cache-composite.js.map +1 -1
- package/dist/lru-cache.d.ts +16 -0
- package/dist/lru-cache.d.ts.map +1 -0
- package/dist/lru-cache.js +48 -0
- package/dist/lru-cache.js.map +1 -0
- package/dist/rasterizer.d.ts.map +1 -1
- package/dist/rasterizer.js +3 -4
- package/dist/rasterizer.js.map +1 -1
- package/dist/render-target.d.ts +12 -1
- package/dist/render-target.d.ts.map +1 -1
- package/dist/scene-renderer.d.ts +13 -7
- package/dist/scene-renderer.d.ts.map +1 -1
- package/dist/scene-renderer.js +34 -18
- package/dist/scene-renderer.js.map +1 -1
- package/dist/shape-cache-bitmap.d.ts +0 -1
- package/dist/shape-cache-bitmap.d.ts.map +1 -1
- package/dist/shape-cache-bitmap.js +4 -16
- package/dist/shape-cache-bitmap.js.map +1 -1
- package/dist/shape-renderer.d.ts +9 -0
- package/dist/shape-renderer.d.ts.map +1 -1
- package/dist/shape-renderer.js.map +1 -1
- package/dist/text-editing.d.ts +2 -4
- package/dist/text-editing.d.ts.map +1 -1
- package/dist/text-editing.js +1 -5
- package/dist/text-editing.js.map +1 -1
- package/dist/text-layout.d.ts +1 -1
- package/dist/text-shaper.d.ts +6 -9
- package/dist/text-shaper.d.ts.map +1 -1
- package/dist/text-shaper.js +4 -7
- package/dist/text-shaper.js.map +1 -1
- package/dist/tile-renderer.d.ts +13 -20
- package/dist/tile-renderer.d.ts.map +1 -1
- package/dist/tile-renderer.js +6 -9
- package/dist/tile-renderer.js.map +1 -1
- package/dist/wasm-bytes.d.ts +40 -0
- package/dist/wasm-bytes.d.ts.map +1 -0
- package/dist/wasm-bytes.js +88 -0
- package/dist/wasm-bytes.js.map +1 -0
- package/dist/worker-render.d.ts +4 -11
- package/dist/worker-render.d.ts.map +1 -1
- package/dist/worker-render.js +3 -4
- package/dist/worker-render.js.map +1 -1
- package/package.json +4 -4
package/dist/text-layout.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface WrapOptions {
|
|
|
16
16
|
*/
|
|
17
17
|
readonly fontFamily?: string;
|
|
18
18
|
/**
|
|
19
|
-
* Optional `TextShaper` (
|
|
19
|
+
* Optional `TextShaper` (e.g. a WASM shaping engine) that
|
|
20
20
|
* replaces the default `target.measureText` path. When set,
|
|
21
21
|
* the wrap algorithm queries `shaper.measure(line, font)` per
|
|
22
22
|
* candidate line, so layouts stay deterministic across
|
package/dist/text-shaper.d.ts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import type { TextAlign, TextBaseline } from "./render-target.js";
|
|
2
1
|
/**
|
|
3
2
|
* Text-shaping abstraction. Lets a host swap the default
|
|
4
|
-
* `canvas.measureText`-based path for a richer engine
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* hot path.
|
|
3
|
+
* `canvas.measureText`-based path for a richer shaping engine when
|
|
4
|
+
* consistent server-side ↔ browser layout matters or when batching
|
|
5
|
+
* many measurements is the hot path.
|
|
8
6
|
*
|
|
9
|
-
* The
|
|
10
|
-
*
|
|
11
|
-
*
|
|
7
|
+
* The default path delegates to `ctx.measureText`. Hosts that need
|
|
8
|
+
* deterministic cross-environment layout implement this interface and
|
|
9
|
+
* install it via {@link setActiveTextShaper}.
|
|
12
10
|
*/
|
|
13
11
|
export interface TextShaper {
|
|
14
12
|
/**
|
|
@@ -41,7 +39,6 @@ export interface ShapedGlyph {
|
|
|
41
39
|
/** Y offset from the line baseline. */
|
|
42
40
|
readonly y: number;
|
|
43
41
|
}
|
|
44
|
-
export type { TextAlign, TextBaseline };
|
|
45
42
|
/**
|
|
46
43
|
* Install a process-global text shaper. Subsequent `getActiveTextShaper()`
|
|
47
44
|
* calls (used by the built-in `drawText` renderer) return it; passing `null`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-shaper.d.ts","sourceRoot":"","sources":["../src/text-shaper.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"text-shaper.d.ts","sourceRoot":"","sources":["../src/text-shaper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3D;;;OAGG;IACH,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,WAAW,EAAE,CAAC;CAChE;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;IAC7C,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AASD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,UAAU,GAAG,IAAI,KAAG,IAE/D,CAAC;AAEF,eAAO,MAAM,mBAAmB,QAAO,UAAU,GAAG,IAAoB,CAAC"}
|
package/dist/text-shaper.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
// Process-global active shaper.
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// ElementRenderer, a module-level registry that `drawText` consults at call
|
|
6
|
-
// time. Editor sets it via `setActiveTextShaper(options.textShaper)` on
|
|
7
|
-
// construction.
|
|
1
|
+
// Process-global active shaper. The built-in text renderer's signature is
|
|
2
|
+
// `(shape, target)` with no extra arg, so rather than thread a shaper
|
|
3
|
+
// through every renderer it consults this module-level registry at call
|
|
4
|
+
// time.
|
|
8
5
|
let activeShaper = null;
|
|
9
6
|
/**
|
|
10
7
|
* Install a process-global text shaper. Subsequent `getActiveTextShaper()`
|
package/dist/text-shaper.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-shaper.js","sourceRoot":"","sources":["../src/text-shaper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"text-shaper.js","sourceRoot":"","sources":["../src/text-shaper.ts"],"names":[],"mappings":"AA2CA,0EAA0E;AAC1E,sEAAsE;AACtE,wEAAwE;AACxE,QAAQ;AAER,IAAI,YAAY,GAAsB,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAyB,EAAQ,EAAE;IACrE,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAsB,EAAE,CAAC,YAAY,CAAC"}
|
package/dist/tile-renderer.d.ts
CHANGED
|
@@ -54,23 +54,19 @@ export interface TileCacheEntry<B = unknown> {
|
|
|
54
54
|
export interface TileCache<B = unknown> {
|
|
55
55
|
get(key: TileKey): TileCacheEntry<B> | undefined;
|
|
56
56
|
set(entry: TileCacheEntry<B>): void;
|
|
57
|
-
/**
|
|
58
|
-
* Drop any cached tile that contains the given shape id. Called
|
|
59
|
-
* by the editor when a shape's scene reference changes.
|
|
60
|
-
*/
|
|
57
|
+
/** Drop any cached tile that contains the given shape id. */
|
|
61
58
|
invalidateForElement(id: ElementId): void;
|
|
62
59
|
/**
|
|
63
60
|
* Drop any cached tile whose `bounds` intersect the given world
|
|
64
|
-
* rectangle.
|
|
65
|
-
*
|
|
66
|
-
*
|
|
61
|
+
* rectangle. Covers a shape add (no previous id in the reverse
|
|
62
|
+
* index) or a move (the before/after AABB union covers both old and
|
|
63
|
+
* new tiles).
|
|
67
64
|
*/
|
|
68
65
|
invalidateRect(rect: Bounds): void;
|
|
69
66
|
/**
|
|
70
|
-
* Convenience routing
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
* / `afterBounds` are present.
|
|
67
|
+
* Convenience routing: dispatches to `invalidateForElement` (remove),
|
|
68
|
+
* `invalidateRect` (add), or both (move) based on which of
|
|
69
|
+
* `removedElementId` / `beforeBounds` / `afterBounds` are present.
|
|
74
70
|
*/
|
|
75
71
|
invalidateForPatch(options: {
|
|
76
72
|
readonly removedElementId?: ElementId;
|
|
@@ -88,9 +84,8 @@ export interface TileCache<B = unknown> {
|
|
|
88
84
|
* OffscreenCanvas / SharedArrayBuffer is the host's call.
|
|
89
85
|
*
|
|
90
86
|
* Invalidation is shape-id-indexed: every `set` also updates a
|
|
91
|
-
* reverse index `Map<ElementId, Set<tileKey>>` so
|
|
92
|
-
*
|
|
93
|
-
* instead of scanning every tile.
|
|
87
|
+
* reverse index `Map<ElementId, Set<tileKey>>` so `invalidateForElement
|
|
88
|
+
* (id)` runs in O(touched tiles) instead of scanning every tile.
|
|
94
89
|
*/
|
|
95
90
|
export declare class InMemoryTileCache<B = unknown> implements TileCache<B> {
|
|
96
91
|
private readonly entries;
|
|
@@ -105,16 +100,14 @@ export declare class InMemoryTileCache<B = unknown> implements TileCache<B> {
|
|
|
105
100
|
invalidateRect(rect: Bounds): void;
|
|
106
101
|
clear(): void;
|
|
107
102
|
/**
|
|
108
|
-
*
|
|
109
|
-
* scene Patch and invalidates touched tiles via the right
|
|
110
|
-
* cheap path:
|
|
103
|
+
* Invalidate touched tiles via the right cheap path:
|
|
111
104
|
* • shape removed → invalidateForElement (id still in reverse index)
|
|
112
105
|
* • shape added → invalidateRect (no id yet — drop tiles that
|
|
113
106
|
* touch the new shape's bounds)
|
|
114
|
-
* • shape moved → both:
|
|
107
|
+
* • shape moved → both: invalidateForElement (old tiles) + rect
|
|
115
108
|
* (new bounds)
|
|
116
|
-
* Caller
|
|
117
|
-
*
|
|
109
|
+
* Caller supplies the bounds; this package is pure and doesn't know
|
|
110
|
+
* about Element geometry.
|
|
118
111
|
*/
|
|
119
112
|
invalidateForPatch(options: {
|
|
120
113
|
readonly removedElementId?: ElementId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-renderer.d.ts","sourceRoot":"","sources":["../src/tile-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;;;GAQG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,SAAS,OAAO,CAAC;AAkC9B;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,QAGhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,MAAM,WAAW,OAAO;IACtB,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACjD,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACpC
|
|
1
|
+
{"version":3,"file":"tile-renderer.d.ts","sourceRoot":"","sources":["../src/tile-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEhE;;;;;;;;GAQG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,SAAS,OAAO,CAAC;AAkC9B;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,QAGhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,OAAO,CAAC;AAElC,MAAM,WAAW,OAAO;IACtB,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnB,yCAAyC;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,OAAO;IACpC,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACjD,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACpC,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE;QAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI,CAAC;IACT,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;CACf;AAID;;;;;;;;;GASG;AACH,qBAAa,iBAAiB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,SAAS,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwC;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqC;IACpE,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,OAAO,GAAE,MAA6B;IAIlD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,SAAS;IAUhD,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI;IAoBnC,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAehD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAelC,KAAK,IAAI,IAAI;IAMb;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAAO,EAAE;QAC1B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI;IAMR,OAAO,CAAC,cAAc;CAUvB"}
|
package/dist/tile-renderer.js
CHANGED
|
@@ -72,9 +72,8 @@ const keyOf = (k) => `${k.col},${k.row}@${k.zoom}`;
|
|
|
72
72
|
* OffscreenCanvas / SharedArrayBuffer is the host's call.
|
|
73
73
|
*
|
|
74
74
|
* Invalidation is shape-id-indexed: every `set` also updates a
|
|
75
|
-
* reverse index `Map<ElementId, Set<tileKey>>` so
|
|
76
|
-
*
|
|
77
|
-
* instead of scanning every tile.
|
|
75
|
+
* reverse index `Map<ElementId, Set<tileKey>>` so `invalidateForElement
|
|
76
|
+
* (id)` runs in O(touched tiles) instead of scanning every tile.
|
|
78
77
|
*/
|
|
79
78
|
export class InMemoryTileCache {
|
|
80
79
|
entries = new Map();
|
|
@@ -156,16 +155,14 @@ export class InMemoryTileCache {
|
|
|
156
155
|
this.bytes = 0;
|
|
157
156
|
}
|
|
158
157
|
/**
|
|
159
|
-
*
|
|
160
|
-
* scene Patch and invalidates touched tiles via the right
|
|
161
|
-
* cheap path:
|
|
158
|
+
* Invalidate touched tiles via the right cheap path:
|
|
162
159
|
* • shape removed → invalidateForElement (id still in reverse index)
|
|
163
160
|
* • shape added → invalidateRect (no id yet — drop tiles that
|
|
164
161
|
* touch the new shape's bounds)
|
|
165
|
-
* • shape moved → both:
|
|
162
|
+
* • shape moved → both: invalidateForElement (old tiles) + rect
|
|
166
163
|
* (new bounds)
|
|
167
|
-
* Caller
|
|
168
|
-
*
|
|
164
|
+
* Caller supplies the bounds; this package is pure and doesn't know
|
|
165
|
+
* about Element geometry.
|
|
169
166
|
*/
|
|
170
167
|
invalidateForPatch(options) {
|
|
171
168
|
if (options.removedElementId)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tile-renderer.js","sourceRoot":"","sources":["../src/tile-renderer.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,wEAAwE;AACxE,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,GAAW,EAAE;IACvC,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,SAAkD,CAAC;IAC/D,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,GAAG,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAC1C,uBAAuB,EACvB,mBAAmB,EAAE,GAAG,uBAAuB,CAChD,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"tile-renderer.js","sourceRoot":"","sources":["../src/tile-renderer.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAE9B;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,wEAAwE;AACxE,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,GAAW,EAAE;IACvC,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,SAAkD,CAAC;IAC/D,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,IAAI,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO,GAAG,CAAC,YAAY,CAAC;IAC1B,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAC1C,uBAAuB,EACvB,mBAAmB,EAAE,GAAG,uBAAuB,CAChD,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;AAiDlC,MAAM,KAAK,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,OAAO,iBAAiB;IACX,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC/C,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC5D,KAAK,GAAG,CAAC,CAAC;IACD,GAAG,CAAS;IAE7B,YAAY,UAAkB,oBAAoB;QAChD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC;IACrB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,GAAY;QACd,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzB,uDAAuD;QACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,GAAG,CAAC,KAAwB;QAC1B,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ;gBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACnB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED,oBAAoB,CAAC,SAAoB;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;YACtB,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC7B,IAAI,GAAG,KAAK,SAAS;oBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACnC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;YAC7B,MAAM,QAAQ,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;YACpF,IAAI,QAAQ;gBAAE,SAAS;YACvB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ;gBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,OAIlB;QACC,IAAI,OAAO,CAAC,gBAAgB;YAAE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClF,IAAI,OAAO,CAAC,YAAY;YAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,WAAW;YAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO;QACnC,sDAAsD;QACtD,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG;gBAAE,MAAM;YAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;YAC1B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ;gBAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalise a wasm module source into raw bytes.
|
|
3
|
+
*
|
|
4
|
+
* Accepts an already-resolved `ArrayBuffer` / `Uint8Array` / `Response`, or a
|
|
5
|
+
* URL / string to fetch. `file://` URLs are read straight from disk because
|
|
6
|
+
* Node's WHATWG `fetch` refuses them (not implemented as of Node 22), so
|
|
7
|
+
* bundled loaders keep working in tests / SSR / CLI contexts.
|
|
8
|
+
*
|
|
9
|
+
* `context` labels the error thrown on a failed fetch (e.g.
|
|
10
|
+
* `"WasmRasterizer.loadModule"`).
|
|
11
|
+
*/
|
|
12
|
+
export declare const fetchModuleBytes: (source: string | URL | ArrayBuffer | Uint8Array | Response, context: string) => Promise<ArrayBuffer>;
|
|
13
|
+
/**
|
|
14
|
+
* Instantiate a WASM module, preferring `WebAssembly.instantiateStreaming`
|
|
15
|
+
* when the source is a fetchable http(s) URL / Response — compilation
|
|
16
|
+
* overlaps the download and skips the intermediate ArrayBuffer copy.
|
|
17
|
+
* Falls back to the buffered `fetchModuleBytes` + `instantiate` path for
|
|
18
|
+
* raw bytes, `file://` URLs (Node reads them from disk), hosts without
|
|
19
|
+
* `instantiateStreaming`, or servers that mis-serve the wasm MIME type
|
|
20
|
+
* (streaming compilation requires `application/wasm`).
|
|
21
|
+
*
|
|
22
|
+
* Shared by every wasm-backed package (`raster-wasm`, `text-wasm`) so
|
|
23
|
+
* the streaming-with-fallback policy lives in one place.
|
|
24
|
+
*/
|
|
25
|
+
export declare const instantiateWasm: (source: string | URL | ArrayBuffer | Uint8Array | Response, context: string) => Promise<WebAssembly.Instance>;
|
|
26
|
+
/** Minimal WASM bump-allocator surface used for FFI marshalling. */
|
|
27
|
+
export interface WasmArena {
|
|
28
|
+
readonly alloc: (size: number) => number;
|
|
29
|
+
readonly free: (ptr: number, size: number) => void;
|
|
30
|
+
readonly memory: {
|
|
31
|
+
readonly buffer: ArrayBufferLike;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/** Copy `bytes` into freshly-alloc'd WASM memory; returns the pointer + a `free` cleanup. */
|
|
35
|
+
export declare const allocBytes: (wasm: WasmArena, bytes: Uint8Array) => {
|
|
36
|
+
readonly ptr: number;
|
|
37
|
+
readonly len: number;
|
|
38
|
+
readonly free: () => void;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=wasm-bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-bytes.d.ts","sourceRoot":"","sources":["../src/wasm-bytes.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,MAAM,GAAG,GAAG,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,EAC1D,SAAS,MAAM,KACd,OAAO,CAAC,WAAW,CAuBrB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,GAAG,GAAG,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,EAC1D,SAAS,MAAM,KACd,OAAO,CAAC,WAAW,CAAC,QAAQ,CAsB9B,CAAC;AAEF,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC;CACvD;AAED,6FAA6F;AAC7F,eAAO,MAAM,UAAU,GACrB,MAAM,SAAS,EACf,OAAO,UAAU,KAChB;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;CAWzE,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/* ^ TypeScript ships the `WebAssembly` namespace types only inside
|
|
3
|
+
* lib.dom / lib.webworker; the API itself is a pure JS-engine global
|
|
4
|
+
* (present in Node and browsers alike), so this is a types-only opt-in
|
|
5
|
+
* — no DOM value is used by this module or package. */
|
|
6
|
+
/**
|
|
7
|
+
* Normalise a wasm module source into raw bytes.
|
|
8
|
+
*
|
|
9
|
+
* Accepts an already-resolved `ArrayBuffer` / `Uint8Array` / `Response`, or a
|
|
10
|
+
* URL / string to fetch. `file://` URLs are read straight from disk because
|
|
11
|
+
* Node's WHATWG `fetch` refuses them (not implemented as of Node 22), so
|
|
12
|
+
* bundled loaders keep working in tests / SSR / CLI contexts.
|
|
13
|
+
*
|
|
14
|
+
* `context` labels the error thrown on a failed fetch (e.g.
|
|
15
|
+
* `"WasmRasterizer.loadModule"`).
|
|
16
|
+
*/
|
|
17
|
+
export const fetchModuleBytes = async (source, context) => {
|
|
18
|
+
if (source instanceof ArrayBuffer)
|
|
19
|
+
return source;
|
|
20
|
+
if (source instanceof Uint8Array) {
|
|
21
|
+
return source.buffer.slice(source.byteOffset, source.byteOffset + source.byteLength);
|
|
22
|
+
}
|
|
23
|
+
if (source instanceof Response)
|
|
24
|
+
return source.arrayBuffer();
|
|
25
|
+
// file:// path goes through fs — Node's fetch doesn't accept it.
|
|
26
|
+
const urlStr = typeof source === "string" ? source : source.href;
|
|
27
|
+
if (urlStr.startsWith("file:")) {
|
|
28
|
+
const { readFile } = await import("node:fs/promises");
|
|
29
|
+
const { fileURLToPath } = await import("node:url");
|
|
30
|
+
const path = fileURLToPath(urlStr);
|
|
31
|
+
const buf = await readFile(path);
|
|
32
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
33
|
+
}
|
|
34
|
+
const res = await fetch(source);
|
|
35
|
+
if (!res.ok) {
|
|
36
|
+
throw new Error(`${context}: fetch failed (${res.status})`);
|
|
37
|
+
}
|
|
38
|
+
return res.arrayBuffer();
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Instantiate a WASM module, preferring `WebAssembly.instantiateStreaming`
|
|
42
|
+
* when the source is a fetchable http(s) URL / Response — compilation
|
|
43
|
+
* overlaps the download and skips the intermediate ArrayBuffer copy.
|
|
44
|
+
* Falls back to the buffered `fetchModuleBytes` + `instantiate` path for
|
|
45
|
+
* raw bytes, `file://` URLs (Node reads them from disk), hosts without
|
|
46
|
+
* `instantiateStreaming`, or servers that mis-serve the wasm MIME type
|
|
47
|
+
* (streaming compilation requires `application/wasm`).
|
|
48
|
+
*
|
|
49
|
+
* Shared by every wasm-backed package (`raster-wasm`, `text-wasm`) so
|
|
50
|
+
* the streaming-with-fallback policy lives in one place.
|
|
51
|
+
*/
|
|
52
|
+
export const instantiateWasm = async (source, context) => {
|
|
53
|
+
const streamable = typeof WebAssembly.instantiateStreaming === "function" &&
|
|
54
|
+
(source instanceof Response ||
|
|
55
|
+
((typeof source === "string" || source instanceof URL) &&
|
|
56
|
+
!String(source).startsWith("file:")));
|
|
57
|
+
if (streamable) {
|
|
58
|
+
try {
|
|
59
|
+
// Clone a passed-in Response so the buffered fallback can still
|
|
60
|
+
// consume the original body if streaming compilation rejects.
|
|
61
|
+
const res = source instanceof Response ? source.clone() : await fetch(source);
|
|
62
|
+
const { instance } = await WebAssembly.instantiateStreaming(res, {});
|
|
63
|
+
return instance;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Fall through to the buffered path — it re-fetches (or reads the
|
|
67
|
+
// original Response) and surfaces the real compile error if the
|
|
68
|
+
// module itself is broken.
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const bytes = await fetchModuleBytes(source, context);
|
|
72
|
+
const { instance } = await WebAssembly.instantiate(bytes, {});
|
|
73
|
+
return instance;
|
|
74
|
+
};
|
|
75
|
+
/** Copy `bytes` into freshly-alloc'd WASM memory; returns the pointer + a `free` cleanup. */
|
|
76
|
+
export const allocBytes = (wasm, bytes) => {
|
|
77
|
+
const len = bytes.byteLength;
|
|
78
|
+
const ptr = wasm.alloc(len);
|
|
79
|
+
new Uint8Array(wasm.memory.buffer, ptr, len).set(bytes);
|
|
80
|
+
return {
|
|
81
|
+
ptr,
|
|
82
|
+
len,
|
|
83
|
+
free: () => {
|
|
84
|
+
wasm.free(ptr, len);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=wasm-bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-bytes.js","sourceRoot":"","sources":["../src/wasm-bytes.ts"],"names":[],"mappings":"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"}
|
package/dist/worker-render.d.ts
CHANGED
|
@@ -3,13 +3,7 @@ import type { Scene } from "@oh-just-another/scene";
|
|
|
3
3
|
/**
|
|
4
4
|
* Worker-backed renderer protocol. Defines the postMessage contract between
|
|
5
5
|
* the main-thread orchestrator and an OffscreenCanvas worker that owns a
|
|
6
|
-
* layer of the scene.
|
|
7
|
-
*
|
|
8
|
-
* workers: {
|
|
9
|
-
* canvas2d: true, // OffscreenCanvas in worker
|
|
10
|
-
* webgl: false,
|
|
11
|
-
* textShaper: true, // shared text-shaper worker
|
|
12
|
-
* }
|
|
6
|
+
* layer of the scene.
|
|
13
7
|
*/
|
|
14
8
|
export type WorkerRenderMessage = {
|
|
15
9
|
readonly type: "init";
|
|
@@ -45,10 +39,9 @@ export type WorkerRenderResponse = {
|
|
|
45
39
|
readonly message: string;
|
|
46
40
|
};
|
|
47
41
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* the postMessage overhead.
|
|
42
|
+
* Scene-size threshold above which moving rendering to a worker pays
|
|
43
|
+
* off. Below it, in-thread rendering is cheaper than the postMessage
|
|
44
|
+
* overhead.
|
|
52
45
|
*/
|
|
53
46
|
export declare const WORKER_AUTO_THRESHOLD = 5000;
|
|
54
47
|
//# sourceMappingURL=worker-render.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-render.d.ts","sourceRoot":"","sources":["../src/worker-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"worker-render.d.ts","sourceRoot":"","sources":["../src/worker-render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAEpD;;;;GAIG;AAEH,MAAM,MAAM,mBAAmB,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5E;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,OAAO,EAAE,CAAC;IACrC,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IACE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,OAAQ,CAAC"}
|
package/dist/worker-render.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* the postMessage overhead.
|
|
2
|
+
* Scene-size threshold above which moving rendering to a worker pays
|
|
3
|
+
* off. Below it, in-thread rendering is cheaper than the postMessage
|
|
4
|
+
* overhead.
|
|
6
5
|
*/
|
|
7
6
|
export const WORKER_AUTO_THRESHOLD = 5_000;
|
|
8
7
|
//# sourceMappingURL=worker-render.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-render.js","sourceRoot":"","sources":["../src/worker-render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"worker-render.js","sourceRoot":"","sources":["../src/worker-render.ts"],"names":[],"mappings":"AAsCA;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oh-just-another/renderer-core",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.59.0",
|
|
4
|
+
"description": "Backend-agnostic rendering abstraction: a RenderTarget surface, an element-renderer registry, and a Scene walker.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Rustam Garifulin <rustam@n69.in>",
|
|
7
7
|
"repository": {
|
|
@@ -40,8 +40,8 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@oh-just-another/types": "0.57.0",
|
|
43
|
-
"@oh-just-another/math": "0.
|
|
44
|
-
"@oh-just-another/scene": "0.
|
|
43
|
+
"@oh-just-another/math": "0.58.0",
|
|
44
|
+
"@oh-just-another/scene": "0.60.0",
|
|
45
45
|
"@oh-just-another/tokens": "0.57.0"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|