akarisub 0.2.2 → 1.0.1
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/README.md +198 -167
- package/THIRD_PARTY_NOTICES.md +55 -163
- package/dist/COPYRIGHT +56 -164
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -147
- package/dist/index.js.map +1 -0
- package/dist/ts/akarisub.d.ts +323 -0
- package/dist/ts/akarisub.d.ts.map +1 -0
- package/dist/ts/akarisub.js +2235 -0
- package/dist/ts/akarisub.js.map +1 -0
- package/dist/ts/timing.d.ts +63 -0
- package/dist/ts/timing.d.ts.map +1 -0
- package/dist/ts/timing.js +219 -0
- package/dist/ts/timing.js.map +1 -0
- package/dist/ts/{ts/types.d.ts → types.d.ts} +176 -78
- package/dist/ts/types.d.ts.map +1 -0
- package/dist/ts/types.js +2 -0
- package/dist/ts/{ts/types.js.map → types.js.map} +1 -1
- package/dist/ts/{ts/utils.d.ts → utils.d.ts} +24 -37
- package/dist/ts/utils.d.ts.map +1 -0
- package/dist/ts/{ts/utils.js → utils.js} +12 -56
- package/dist/ts/utils.js.map +1 -0
- package/dist/ts/wasm.d.ts +12 -0
- package/dist/ts/wasm.d.ts.map +1 -0
- package/dist/ts/wasm.js +46 -0
- package/dist/ts/wasm.js.map +1 -0
- package/dist/ts/{ts/webgl2-renderer.d.ts → webgl2-renderer.d.ts} +17 -12
- package/dist/ts/webgl2-renderer.d.ts.map +1 -0
- package/dist/ts/{ts/webgl2-renderer.js → webgl2-renderer.js} +17 -27
- package/dist/ts/webgl2-renderer.js.map +1 -0
- package/dist/ts/webgpu-renderer.d.ts +88 -0
- package/dist/ts/webgpu-renderer.d.ts.map +1 -0
- package/dist/ts/{ts/webgpu-renderer.js → webgpu-renderer.js} +173 -71
- package/dist/ts/webgpu-renderer.js.map +1 -0
- package/dist/ts/worker.d.ts +2 -0
- package/dist/ts/{ts/worker.d.ts.map → worker.d.ts.map} +1 -1
- package/dist/ts/{ts/worker.js → worker.js} +1064 -264
- package/dist/ts/worker.js.map +1 -0
- package/dist/wrapper.d.ts +8 -0
- package/dist/wrapper.d.ts.map +1 -0
- package/dist/{ts/index.js → wrapper.js} +4 -14
- package/dist/wrapper.js.map +1 -0
- package/package.json +24 -22
- package/pkg/akarisub.js +53 -0
- package/{dist/akarisub-worker.wasm → pkg/akarisub.wasm} +0 -0
- package/src/wrapper.ts +46 -0
- package/dist/akarisub-worker.js +0 -39
- package/dist/akarisub.umd.js +0 -159
- package/dist/ts/index.d.ts +0 -14
- package/dist/ts/index.d.ts.map +0 -1
- package/dist/ts/index.js.map +0 -1
- package/dist/ts/ts/akarisub.d.ts +0 -225
- package/dist/ts/ts/akarisub.d.ts.map +0 -1
- package/dist/ts/ts/akarisub.js +0 -1073
- package/dist/ts/ts/akarisub.js.map +0 -1
- package/dist/ts/ts/types.d.ts.map +0 -1
- package/dist/ts/ts/types.js +0 -5
- package/dist/ts/ts/utils.d.ts.map +0 -1
- package/dist/ts/ts/utils.js.map +0 -1
- package/dist/ts/ts/webgl2-renderer.d.ts.map +0 -1
- package/dist/ts/ts/webgl2-renderer.js.map +0 -1
- package/dist/ts/ts/webgpu-renderer.d.ts +0 -62
- package/dist/ts/ts/webgpu-renderer.d.ts.map +0 -1
- package/dist/ts/ts/webgpu-renderer.js.map +0 -1
- package/dist/ts/ts/worker.d.ts +0 -6
- package/dist/ts/ts/worker.js.map +0 -1
- package/dist/ts/wrapper.d.ts +0 -8
- package/dist/ts/wrapper.d.ts.map +0 -1
- package/dist/ts/wrapper.js +0 -9
- package/dist/ts/wrapper.js.map +0 -1
- package/src/ts/akarisub.ts +0 -1272
- package/src/ts/types.ts +0 -397
- package/src/ts/utils.ts +0 -512
- package/src/ts/webgl2-renderer.ts +0 -426
- package/src/ts/webgpu-renderer.ts +0 -691
- package/src/ts/worker.ts +0 -2052
- /package/{dist → assets}/default.woff2 +0 -0
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility functions for AkariSub.
|
|
3
|
-
*/
|
|
4
|
-
// =============================================================================
|
|
5
|
-
// Color Space Utilities
|
|
6
|
-
// =============================================================================
|
|
7
|
-
/** Map video color space to standard name */
|
|
1
|
+
/** Map from HTMLVideoElement color-space names to {@linkcode WebYCbCrColorSpace}. */
|
|
8
2
|
export const webYCbCrMap = {
|
|
9
3
|
bt709: 'BT709',
|
|
10
4
|
bt470bg: 'BT601', // BT.601 PAL
|
|
11
5
|
smpte170m: 'BT601' // BT.601 NTSC
|
|
12
6
|
};
|
|
13
|
-
/**
|
|
7
|
+
/** feColorMatrix values that convert a subtitle matrix into a video matrix. */
|
|
14
8
|
export const colorMatrixConversionMap = {
|
|
15
9
|
BT601: {
|
|
16
10
|
BT709: '1.0863 -0.0723 -0.014 0 0 0.0965 0.8451 0.0584 0 0 -0.0141 -0.0277 1.0418'
|
|
@@ -27,7 +21,7 @@ export const colorMatrixConversionMap = {
|
|
|
27
21
|
BT601: '0.913 0.0774 0.0096 0 0 -0.1051 1.1508 -0.0456 0 0 0.0063 0.0207 0.973'
|
|
28
22
|
}
|
|
29
23
|
};
|
|
30
|
-
/** libass YCbCr
|
|
24
|
+
/** libass `YCbCr Matrix` header values indexed by the libass enum. */
|
|
31
25
|
export const libassYCbCrMap = [
|
|
32
26
|
null,
|
|
33
27
|
'BT601',
|
|
@@ -41,9 +35,7 @@ export const libassYCbCrMap = [
|
|
|
41
35
|
'FCC',
|
|
42
36
|
'FCC'
|
|
43
37
|
];
|
|
44
|
-
/**
|
|
45
|
-
* Generate SVG filter URL for color space conversion.
|
|
46
|
-
*/
|
|
38
|
+
/** SVG filter URL that converts `subtitleColorSpace` into `videoColorSpace`, or `null` when none is needed. */
|
|
47
39
|
export function getColorSpaceFilterUrl(subtitleColorSpace, videoColorSpace) {
|
|
48
40
|
if (!subtitleColorSpace || !videoColorSpace)
|
|
49
41
|
return null;
|
|
@@ -54,12 +46,7 @@ export function getColorSpaceFilterUrl(subtitleColorSpace, videoColorSpace) {
|
|
|
54
46
|
return null;
|
|
55
47
|
return `url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><filter id='f'><feColorMatrix type='matrix' values='${matrix} 0 0 0 0 0 1 0'/></filter></svg>#f")`;
|
|
56
48
|
}
|
|
57
|
-
|
|
58
|
-
// Canvas Utilities
|
|
59
|
-
// =============================================================================
|
|
60
|
-
/**
|
|
61
|
-
* Compute canvas size with prescaling.
|
|
62
|
-
*/
|
|
49
|
+
/** Canvas pixel size after device-pixel-ratio and prescale limits. */
|
|
63
50
|
export function computeCanvasSize(width, height, prescaleFactor, prescaleHeightLimit, maxRenderHeight) {
|
|
64
51
|
const scalefactor = prescaleFactor <= 0 ? 1.0 : prescaleFactor;
|
|
65
52
|
const ratio = globalThis.devicePixelRatio || 1;
|
|
@@ -81,9 +68,7 @@ export function computeCanvasSize(width, height, prescaleFactor, prescaleHeightL
|
|
|
81
68
|
height = newH;
|
|
82
69
|
return { width, height };
|
|
83
70
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Get video position and size accounting for aspect ratio.
|
|
86
|
-
*/
|
|
71
|
+
/** Letterboxed video rectangle inside the element's layout box. */
|
|
87
72
|
export function getVideoPosition(video, videoWidth = video.videoWidth, videoHeight = video.videoHeight) {
|
|
88
73
|
const videoRatio = videoWidth / videoHeight;
|
|
89
74
|
const { offsetWidth, offsetHeight } = video;
|
|
@@ -100,9 +85,6 @@ export function getVideoPosition(video, videoWidth = video.videoWidth, videoHeig
|
|
|
100
85
|
const y = (offsetHeight - height) / 2;
|
|
101
86
|
return { width, height, x, y };
|
|
102
87
|
}
|
|
103
|
-
// =============================================================================
|
|
104
|
-
// Alpha Bug Fix
|
|
105
|
-
// =============================================================================
|
|
106
88
|
/**
|
|
107
89
|
* Fix alpha bug in some browsers (transparent pixels rendered as non-black).
|
|
108
90
|
*/
|
|
@@ -111,7 +93,6 @@ export function fixAlpha(uint8, hasAlphaBug) {
|
|
|
111
93
|
return uint8;
|
|
112
94
|
const len = uint8.length;
|
|
113
95
|
const len4 = len - (len % 16); // Process 4 pixels at a time (16 bytes)
|
|
114
|
-
// Unrolled loop for 4 pixels at a time
|
|
115
96
|
let j = 3;
|
|
116
97
|
for (; j < len4; j += 16) {
|
|
117
98
|
if (uint8[j] < 2)
|
|
@@ -123,18 +104,13 @@ export function fixAlpha(uint8, hasAlphaBug) {
|
|
|
123
104
|
if (uint8[j + 12] < 2)
|
|
124
105
|
uint8[j + 12] = 1;
|
|
125
106
|
}
|
|
126
|
-
// Handle remaining pixels
|
|
127
107
|
for (; j < len; j += 4) {
|
|
128
108
|
if (uint8[j] < 2)
|
|
129
109
|
uint8[j] = 1;
|
|
130
110
|
}
|
|
131
111
|
return uint8;
|
|
132
112
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Parse ASS file content.
|
|
135
|
-
* @param content - ASS file content
|
|
136
|
-
* @param stopAtEvents - Stop parsing when [Events] section is reached (for font detection)
|
|
137
|
-
*/
|
|
113
|
+
/** Parse ASS/SSA text into named sections. Stops before `[Events]` when `stopAtEvents` is set. */
|
|
138
114
|
export function parseAss(content, stopAtEvents = false) {
|
|
139
115
|
const sections = [];
|
|
140
116
|
const lines = content.split(/[\r\n]+/g);
|
|
@@ -149,7 +125,6 @@ export function parseAss(content, stopAtEvents = false) {
|
|
|
149
125
|
if (firstChar === '[') {
|
|
150
126
|
const m = line.match(/^\[(.*)\]$/);
|
|
151
127
|
if (m) {
|
|
152
|
-
// Early termination for font detection performance
|
|
153
128
|
if (stopAtEvents && m[1].toLowerCase() === 'events') {
|
|
154
129
|
break;
|
|
155
130
|
}
|
|
@@ -204,17 +179,11 @@ export function parseAss(content, stopAtEvents = false) {
|
|
|
204
179
|
}
|
|
205
180
|
return sections;
|
|
206
181
|
}
|
|
207
|
-
// =============================================================================
|
|
208
|
-
// ASS Content Transformation Utilities
|
|
209
|
-
// =============================================================================
|
|
210
182
|
const blurRegex = /\\blur(?:[0-9]+\.)?[0-9]+/gm;
|
|
211
|
-
/**
|
|
212
|
-
* Remove all blur tags from subtitle content.
|
|
213
|
-
*/
|
|
183
|
+
/** Strip `\\blur` override tags from an ASS document. */
|
|
214
184
|
export function dropBlur(subContent) {
|
|
215
185
|
return subContent.replace(blurRegex, '');
|
|
216
186
|
}
|
|
217
|
-
// Common video resolutions to detect source resolution
|
|
218
187
|
const commonResolutions = [
|
|
219
188
|
{ w: 7680, h: 4320 }, // 8K
|
|
220
189
|
{ w: 3840, h: 2160 }, // 4K UHD
|
|
@@ -222,9 +191,6 @@ const commonResolutions = [
|
|
|
222
191
|
{ w: 1920, h: 1080 }, // 1080p
|
|
223
192
|
{ w: 1280, h: 720 } // 720p
|
|
224
193
|
];
|
|
225
|
-
/**
|
|
226
|
-
* Detect the likely source resolution based on max position values.
|
|
227
|
-
*/
|
|
228
194
|
function detectSourceResolution(maxX, maxY) {
|
|
229
195
|
const sorted = [...commonResolutions].sort((a, b) => a.w - b.w);
|
|
230
196
|
for (const res of sorted) {
|
|
@@ -315,14 +281,9 @@ export function fixPlayRes(subContent) {
|
|
|
315
281
|
});
|
|
316
282
|
return newContent.substring(0, eventsMatch.index) + eventsSection;
|
|
317
283
|
}
|
|
318
|
-
// =============================================================================
|
|
319
|
-
// Feature Detection
|
|
320
|
-
// =============================================================================
|
|
321
284
|
let _hasAlphaBug = null;
|
|
322
285
|
let _hasBitmapBug = null;
|
|
323
|
-
/**
|
|
324
|
-
* Test for browser image bugs.
|
|
325
|
-
*/
|
|
286
|
+
/** Probe canvas `ImageData` and `ImageBitmap` bugs used by the renderer workarounds. */
|
|
326
287
|
export async function testImageBugs() {
|
|
327
288
|
if (_hasAlphaBug !== null && _hasBitmapBug !== null) {
|
|
328
289
|
return { hasAlphaBug: _hasAlphaBug, hasBitmapBug: _hasBitmapBug };
|
|
@@ -331,7 +292,6 @@ export async function testImageBugs() {
|
|
|
331
292
|
const ctx1 = canvas1.getContext('2d', { willReadFrequently: true });
|
|
332
293
|
if (!ctx1)
|
|
333
294
|
throw new Error('Canvas rendering not supported');
|
|
334
|
-
// Test ImageData constructor
|
|
335
295
|
if (typeof ImageData.prototype.constructor === 'function') {
|
|
336
296
|
try {
|
|
337
297
|
new ImageData(new Uint8ClampedArray([0, 0, 0, 0]), 1, 1);
|
|
@@ -340,7 +300,6 @@ export async function testImageBugs() {
|
|
|
340
300
|
console.log('Detected that ImageData is not constructable despite browser saying so');
|
|
341
301
|
}
|
|
342
302
|
}
|
|
343
|
-
// Test for alpha bug
|
|
344
303
|
const canvas2 = document.createElement('canvas');
|
|
345
304
|
const ctx2 = canvas2.getContext('2d', { willReadFrequently: true });
|
|
346
305
|
if (!ctx2)
|
|
@@ -357,7 +316,6 @@ export async function testImageBugs() {
|
|
|
357
316
|
if (_hasAlphaBug) {
|
|
358
317
|
console.log('Detected a browser having issue with transparent pixels, applying workaround');
|
|
359
318
|
}
|
|
360
|
-
// Test for bitmap bug
|
|
361
319
|
if (typeof createImageBitmap !== 'undefined') {
|
|
362
320
|
const subarray = new Uint8ClampedArray([255, 0, 255, 0, 255]).subarray(1, 5);
|
|
363
321
|
ctx2.drawImage(await createImageBitmap(new ImageData(subarray, 1)), 0, 0);
|
|
@@ -378,17 +336,15 @@ export async function testImageBugs() {
|
|
|
378
336
|
canvas2.remove();
|
|
379
337
|
return { hasAlphaBug: _hasAlphaBug, hasBitmapBug: _hasBitmapBug };
|
|
380
338
|
}
|
|
381
|
-
/**
|
|
382
|
-
* Run all feature detection tests.
|
|
383
|
-
*/
|
|
339
|
+
/** Run canvas feature tests. Currently the same as {@linkcode testImageBugs}. */
|
|
384
340
|
export async function runFeatureTests() {
|
|
385
341
|
return testImageBugs();
|
|
386
342
|
}
|
|
387
|
-
/**
|
|
343
|
+
/** Last {@linkcode testImageBugs} alpha-bug result, or `null` before the first probe. */
|
|
388
344
|
export function getAlphaBug() {
|
|
389
345
|
return _hasAlphaBug;
|
|
390
346
|
}
|
|
391
|
-
/**
|
|
347
|
+
/** Last {@linkcode testImageBugs} partial-bitmap-bug result, or `null` before the first probe. */
|
|
392
348
|
export function getBitmapBug() {
|
|
393
349
|
return _hasBitmapBug;
|
|
394
350
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/ts/utils.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,CAAC,MAAM,WAAW,GAAuC;IAC7D,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,OAAO,EAAE,aAAa;IAC/B,SAAS,EAAE,OAAO,CAAC,cAAc;CAClC,CAAA;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAA2C;IAC9E,KAAK,EAAE;QACL,KAAK,EAAE,2EAA2E;KACnF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,0EAA0E;KAClF;IACD,GAAG,EAAE;QACH,KAAK,EAAE,4EAA4E;QACnF,KAAK,EAAE,uEAAuE;KAC/E;IACD,SAAS,EAAE;QACT,KAAK,EAAE,2EAA2E;QAClF,KAAK,EAAE,wEAAwE;KAChF;CACF,CAAA;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAAkC;IAC3D,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,WAAW;IACX,WAAW;IACX,KAAK;IACL,KAAK;CACN,CAAA;AAED,+GAA+G;AAC/G,MAAM,UAAU,sBAAsB,CACpC,kBAAsC,EACtC,eAAmC;IAEnC,IAAI,CAAC,kBAAkB,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAA;IACxD,IAAI,kBAAkB,KAAK,eAAe;QAAE,OAAO,IAAI,CAAA;IAEvD,MAAM,MAAM,GAAG,wBAAwB,CAAC,kBAAkB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;IAC9E,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,OAAO,4HAA4H,MAAM,sCAAsC,CAAA;AACjL,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,MAAc,EACd,cAAsB,EACtB,mBAA2B,EAC3B,eAAuB;IAEvB,MAAM,WAAW,GAAG,cAAc,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAA;IAC9D,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,IAAI,CAAC,CAAA;IAE9C,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;IAChC,CAAC;IAED,MAAM,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,IAAI,IAAI,GAAG,MAAM,GAAG,KAAK,CAAA;IAEzB,IAAI,GAAG,GAAG,IAAI,GAAG,WAAW,IAAI,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAC1D,IAAI,IAAI,WAAW,CAAA;IACrB,CAAC;SAAM,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClD,IAAI,GAAG,mBAAmB,CAAA;IAC5B,CAAC;IAED,IAAI,eAAe,GAAG,CAAC,IAAI,IAAI,GAAG,eAAe,EAAE,CAAC;QAClD,IAAI,GAAG,eAAe,CAAA;IACxB,CAAC;IAED,KAAK,IAAI,IAAI,GAAG,MAAM,CAAA;IACtB,MAAM,GAAG,IAAI,CAAA;IAEb,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAC1B,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAC9B,KAAuB,EACvB,UAAU,GAAW,KAAK,CAAC,UAAU,EACrC,WAAW,GAAW,KAAK,CAAC,WAAW;IAEvC,MAAM,UAAU,GAAG,UAAU,GAAG,WAAW,CAAA;IAC3C,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,KAAK,CAAA;IAC3C,MAAM,YAAY,GAAG,WAAW,GAAG,YAAY,CAAA;IAE/C,IAAI,KAAK,GAAG,WAAW,CAAA;IACvB,IAAI,MAAM,GAAG,YAAY,CAAA;IAEzB,IAAI,YAAY,GAAG,UAAU,EAAE,CAAC;QAC9B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC,CAAA;IAC/C,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,CAAA;IAC/C,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IACnC,MAAM,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAErC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAwB,EAAE,WAAoB;IACrE,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAA;IAE9B,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAA;IACxB,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA,CAAC,wCAAwC;IAEtE,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC9B,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAoBD,kGAAkG;AAClG,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,YAAY,GAAY,KAAK;IACrE,MAAM,QAAQ,GAAiB,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAA;IAC9B,IAAI,MAAM,GAAoB,IAAI,CAAA;IAClC,IAAI,cAAc,GAAsB,IAAI,CAAA;IAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAQ;QAEzC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEzB,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;YAClC,IAAI,CAAC,EAAE,CAAC;gBACN,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;oBACpD,MAAK;gBACP,CAAC;gBACD,MAAM,GAAG,IAAI,CAAA;gBACb,cAAc,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;gBACzC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBAC7B,SAAQ;YACV,CAAC;QACH,CAAC;QAED,IAAI,CAAC,cAAc;YAAE,SAAQ;QAE7B,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBACvB,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;aACzB,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAClC,IAAI,QAAQ,KAAK,CAAC,CAAC;gBAAE,SAAQ;YAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACvC,IAAI,KAAK,GAA+C,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YAE3F,IAAI,MAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC/B,IAAI,MAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBAC5D,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;oBAC/C,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACzB,CAAC;gBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAChC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAClC,CAAC;gBAED,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,GAAG,GAA2B,EAAE,CAAA;oBACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;oBACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;wBACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;oBAC9B,CAAC;oBACD,KAAK,GAAG,GAAG,CAAA;gBACb,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,QAAQ,CAAA;gBAClB,CAAC;YACH,CAAC;YAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACrB,MAAM,GAAG,KAAiB,CAAA;YAC5B,CAAC;YAED,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,SAAS,GAAG,6BAA6B,CAAA;AAE/C,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,UAAkB;IACzC,OAAO,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,iBAAiB,GAAG;IACxB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK;IAC3B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;IAC/B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ;IAC9B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ;IAC9B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO;CAC5B,CAAA;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,IAAY;IACxD,MAAM,MAAM,GAAG,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;YACnC,OAAO,GAAG,CAAA;QACZ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAA;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,QAAiB;IACnD,MAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACrD,OAAO,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAChF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAC5D,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAE5D,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACtE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEtE,MAAM,QAAQ,GAAG,gDAAgD,CAAA;IACjE,MAAM,SAAS,GAAG,8EAA8E,CAAA;IAChG,MAAM,QAAQ,GAAG,gDAAgD,CAAA;IACjE,MAAM,aAAa,GAAG,qFAAqF,CAAA;IAE3G,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,IAAI,IAAI,GAAG,CAAC,CAAA;IAEZ,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,QAAkB,EAAE,QAAkB,EAAE,EAAE;QACxE,IAAI,KAA6B,CAAA;QACjC,MAAM,SAAS,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAC/C,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBACxC,IAAI,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBACxC,IAAI,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3B,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3B,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtC,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAA;IAE3D,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAA;IAErC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,GAAG,CAAA;IAEnB,IAAI,UAAU,GAAG,UAAU,CAAA;IAE3B,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IAC5D,IAAI,CAAC,WAAW;QAAE,OAAO,UAAU,CAAA;IAEnC,IAAI,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;IAElC,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,QAAQ,EACR,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,CAC3G,CAAA;IAED,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,0HAA0H,EAC1H,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;QAC7B,MAAM,GAAG,GAAG,UAAU,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;QACpM,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;IAC/C,CAAC,CACF,CAAA;IAED,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,QAAQ,EACR,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG,CAC3G,CAAA;IAED,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,uFAAuF,EACvF,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAC3B,KAAK,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,GAAG,CAC/L,CAAA;IAED,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAChH,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,iBAAiB,EACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,EAAE,CAC9D,CAAA;IACD,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,kBAAkB,EAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAC9D,CAAA;IACD,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,kBAAkB,EAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAC9D,CAAA;IACD,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,oBAAoB,EACpB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAC9D,CAAA;IACD,aAAa,GAAG,aAAa,CAAC,OAAO,CACnC,oBAAoB,EACpB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAC9D,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACrD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,aAAa,EAAE,GAAG,CAAC,CAAA;QACpD,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IACzG,CAAC,CAAC,CAAA;IAEF,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,0DAA0D,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1G,OAAO,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5D,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;QAC9F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,KAAM,CAAC,GAAG,aAAa,CAAA;AACpE,CAAC;AAED,IAAI,YAAY,GAAmB,IAAI,CAAA;AACvC,IAAI,aAAa,GAAmB,IAAI,CAAA;AAExC,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,YAAY,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAA;IACnE,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAA;IACnE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAE5D,IAAI,OAAO,SAAS,CAAC,SAAS,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,IAAI,SAAS,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAA;IACnE,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAE5D,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAA;IACjC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IACnC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAE1B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACnF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAElD,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACvC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAA;IAC7F,CAAC;IAED,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5E,IAAI,CAAC,SAAS,CAAC,MAAM,iBAAiB,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACzE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9C,aAAa,GAAG,KAAK,CAAA;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gBACzC,aAAa,GAAG,IAAI,CAAA;gBACpB,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAA;gBACxF,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,KAAK,CAAA;IACvB,CAAC;IAED,OAAO,CAAC,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,MAAM,EAAE,CAAA;IAEhB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAA;AACnE,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,eAAe;IAInC,OAAO,aAAa,EAAE,CAAA;AACxB,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,WAAW;IACzB,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,YAAY;IAC1B,OAAO,aAAa,CAAA;AACtB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM glue and binary URL resolution.
|
|
3
|
+
*/
|
|
4
|
+
/** Get the bundled fallback font URL (always returns an absolute URL). */
|
|
5
|
+
export declare function getDefaultFontUrl(): string;
|
|
6
|
+
/** Get the WASM file URL (always returns an absolute URL). */
|
|
7
|
+
export declare function getWasmUrl(): string;
|
|
8
|
+
/** Get the WASM glue script URL (always returns an absolute URL). */
|
|
9
|
+
export declare function getWasmGlueUrl(): string;
|
|
10
|
+
/** Derive a glue URL from a WASM URL when the caller only provided wasmUrl. */
|
|
11
|
+
export declare function glueUrlFromWasmUrl(wasmUrl: string): string;
|
|
12
|
+
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../src/ts/wasm.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C;AAED,8DAA8D;AAC9D,wBAAgB,UAAU,IAAI,MAAM,CAUnC;AAED,qEAAqE;AACrE,wBAAgB,cAAc,IAAI,MAAM,CAUvC;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI1D"}
|
package/dist/ts/wasm.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WASM glue and binary URL resolution.
|
|
3
|
+
*/
|
|
4
|
+
/** Get the bundled fallback font URL (always returns an absolute URL). */
|
|
5
|
+
export function getDefaultFontUrl() {
|
|
6
|
+
try {
|
|
7
|
+
return new URL('../../assets/default.woff2', import.meta.url).href;
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
if (typeof window !== 'undefined') {
|
|
11
|
+
return new URL('/akarisub/default.woff2', window.location.origin).href;
|
|
12
|
+
}
|
|
13
|
+
return '/akarisub/default.woff2';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Get the WASM file URL (always returns an absolute URL). */
|
|
17
|
+
export function getWasmUrl() {
|
|
18
|
+
try {
|
|
19
|
+
return new URL('../../pkg/akarisub.wasm', import.meta.url).href;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
if (typeof window !== 'undefined') {
|
|
23
|
+
return new URL('/akarisub/akarisub.wasm', window.location.origin).href;
|
|
24
|
+
}
|
|
25
|
+
return '/akarisub/akarisub.wasm';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/** Get the WASM glue script URL (always returns an absolute URL). */
|
|
29
|
+
export function getWasmGlueUrl() {
|
|
30
|
+
try {
|
|
31
|
+
return new URL('../../pkg/akarisub.js', import.meta.url).href;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
if (typeof window !== 'undefined') {
|
|
35
|
+
return new URL('/akarisub/akarisub.js', window.location.origin).href;
|
|
36
|
+
}
|
|
37
|
+
return '/akarisub/akarisub.js';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** Derive a glue URL from a WASM URL when the caller only provided wasmUrl. */
|
|
41
|
+
export function glueUrlFromWasmUrl(wasmUrl) {
|
|
42
|
+
const derivedUrl = new URL(wasmUrl, typeof location !== 'undefined' ? location.href : 'http://localhost/');
|
|
43
|
+
derivedUrl.pathname = derivedUrl.pathname.replace(/\.wasm$/, '.js');
|
|
44
|
+
return derivedUrl.href;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=wasm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../src/ts/wasm.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0EAA0E;AAC1E,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,4BAA4B,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;QACxE,CAAC;QAED,OAAO,yBAAyB,CAAA;IAClC,CAAC;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,yBAAyB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;QACxE,CAAC;QAED,OAAO,yBAAyB,CAAA;IAClC,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,uBAAuB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;QACtE,CAAC;QAED,OAAO,uBAAuB,CAAA;IAChC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAA;IAC1G,UAAU,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACnE,OAAO,UAAU,CAAC,IAAI,CAAA;AACxB,CAAC"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import type { RenderImage } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Check if WebGL2 is supported in the current browser.
|
|
4
|
-
*/
|
|
2
|
+
/** True when a WebGL2 context can be created. */
|
|
5
3
|
export declare function isWebGL2Supported(): boolean;
|
|
6
|
-
/**
|
|
7
|
-
* High-performance WebGL2 subtitle renderer for AkariSub.
|
|
8
|
-
*/
|
|
4
|
+
/** Premultiplied-alpha WebGL2 compositor for subtitle bitmaps. */
|
|
9
5
|
export declare class WebGL2Renderer {
|
|
10
6
|
private _gl;
|
|
11
7
|
private _canvas;
|
|
@@ -23,30 +19,39 @@ export declare class WebGL2Renderer {
|
|
|
23
19
|
private _lastCanvasHeight;
|
|
24
20
|
private _initialized;
|
|
25
21
|
private _initPromise;
|
|
22
|
+
/** Allocate instance buffers. Call {@linkcode init} before rendering. */
|
|
26
23
|
constructor();
|
|
24
|
+
/** Compile shaders after {@linkcode setCanvas} is first called. */
|
|
27
25
|
init(): Promise<void>;
|
|
26
|
+
/** @internal */
|
|
28
27
|
private _checkSupport;
|
|
28
|
+
/** @internal */
|
|
29
29
|
private _initGL;
|
|
30
|
+
/** @internal */
|
|
30
31
|
private _roundDim;
|
|
32
|
+
/** @internal */
|
|
31
33
|
private _roundLayers;
|
|
34
|
+
/** @internal */
|
|
32
35
|
private _allocateTextureArray;
|
|
36
|
+
/** @internal */
|
|
33
37
|
private _ensureTextureArray;
|
|
38
|
+
/** Bind `canvas` as the GL surface and size the viewport. */
|
|
34
39
|
setCanvas(canvas: HTMLCanvasElement, width: number, height: number): Promise<void>;
|
|
40
|
+
/** Resize the GL viewport to match the canvas. */
|
|
35
41
|
updateSize(width: number, height: number): void;
|
|
36
|
-
/**
|
|
37
|
-
* Render from ImageBitmaps (async render mode)
|
|
38
|
-
*/
|
|
42
|
+
/** Composite ImageBitmap planes onto the bound canvas. */
|
|
39
43
|
renderBitmaps(images: {
|
|
40
44
|
image: ImageBitmap;
|
|
41
45
|
x: number;
|
|
42
46
|
y: number;
|
|
43
47
|
}[], _canvasWidth: number, _canvasHeight: number): void;
|
|
44
|
-
/**
|
|
45
|
-
* Render from raw ArrayBuffer data (non-async render mode)
|
|
46
|
-
*/
|
|
48
|
+
/** Composite {@linkcode RenderImage} planes onto the bound canvas. */
|
|
47
49
|
render(images: RenderImage[], _canvasWidth: number, _canvasHeight: number): void;
|
|
50
|
+
/** Clear the bound canvas to transparent black. */
|
|
48
51
|
clear(): void;
|
|
52
|
+
/** True after {@linkcode init} has completed successfully. */
|
|
49
53
|
get initialized(): boolean;
|
|
54
|
+
/** Delete GL objects and drop the context. */
|
|
50
55
|
destroy(): void;
|
|
51
56
|
}
|
|
52
57
|
//# sourceMappingURL=webgl2-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl2-renderer.d.ts","sourceRoot":"","sources":["../../src/ts/webgl2-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA6D1C,iDAAiD;AACjD,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAkBD,kEAAkE;AAClE,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAsC;IACjD,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,IAAI,CAAsC;IAClD,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,gBAAgB,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAE5C,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,YAAY,CAA6B;IAEjD,yEAAyE;IACzE,cAEC;IAED,mEAAmE;IAC7D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED,gBAAgB;YACF,aAAa;IAM3B,gBAAgB;IAChB,OAAO,CAAC,OAAO;IAwDf,gBAAgB;IAChB,OAAO,CAAC,SAAS;IAIjB,gBAAgB;IAChB,OAAO,CAAC,YAAY;IAIpB,gBAAgB;IAChB,OAAO,CAAC,qBAAqB;IAoB7B,gBAAgB;IAChB,OAAO,CAAC,mBAAmB;IAS3B,6DAA6D;IACvD,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvF;IAED,kDAAkD;IAClD,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ9C;IAED,0DAA0D;IAC1D,aAAa,CACX,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EACtD,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,IAAI,CAwDN;IAED,sEAAsE;IACtE,MAAM,CACJ,MAAM,EAAE,WAAW,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,IAAI,CA8DN;IAED,mDAAmD;IACnD,KAAK,IAAI,IAAI,CAIZ;IAED,8DAA8D;IAC9D,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,8CAA8C;IAC9C,OAAO,IAAI,IAAI,CAgBd;CACF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
const MAX_IMAGES_PER_BATCH = 256;
|
|
2
2
|
const MAX_TEXTURE_ARRAY_LAYERS = 256;
|
|
3
|
-
// GLSL Vertex Shader (GLSL ES 3.00)
|
|
4
3
|
const VERTEX_SHADER = /* glsl */ `#version 300 es
|
|
5
4
|
precision highp float;
|
|
6
5
|
|
|
@@ -36,7 +35,6 @@ void main() {
|
|
|
36
35
|
v_texSize = a_texInfo.xy;
|
|
37
36
|
}
|
|
38
37
|
`;
|
|
39
|
-
// GLSL Fragment Shader (GLSL ES 3.00)
|
|
40
38
|
const FRAGMENT_SHADER = /* glsl */ `#version 300 es
|
|
41
39
|
precision highp float;
|
|
42
40
|
precision highp sampler2DArray;
|
|
@@ -53,13 +51,10 @@ out vec4 fragColor;
|
|
|
53
51
|
void main() {
|
|
54
52
|
vec2 normalizedCoord = v_uv * v_texSize / vec2(u_texArraySize);
|
|
55
53
|
vec4 color = texture(u_texArray, vec3(normalizedCoord, float(v_texIndex)));
|
|
56
|
-
// Premultiplied alpha output (matches WebGPU renderer behaviour)
|
|
57
54
|
fragColor = vec4(color.rgb * color.a, color.a);
|
|
58
55
|
}
|
|
59
56
|
`;
|
|
60
|
-
/**
|
|
61
|
-
* Check if WebGL2 is supported in the current browser.
|
|
62
|
-
*/
|
|
57
|
+
/** True when a WebGL2 context can be created. */
|
|
63
58
|
export function isWebGL2Supported() {
|
|
64
59
|
if (typeof document === 'undefined')
|
|
65
60
|
return false;
|
|
@@ -85,9 +80,7 @@ function compileShader(gl, type, source) {
|
|
|
85
80
|
}
|
|
86
81
|
return shader;
|
|
87
82
|
}
|
|
88
|
-
/**
|
|
89
|
-
* High-performance WebGL2 subtitle renderer for AkariSub.
|
|
90
|
-
*/
|
|
83
|
+
/** Premultiplied-alpha WebGL2 compositor for subtitle bitmaps. */
|
|
91
84
|
export class WebGL2Renderer {
|
|
92
85
|
_gl = null;
|
|
93
86
|
_canvas = null;
|
|
@@ -105,15 +98,18 @@ export class WebGL2Renderer {
|
|
|
105
98
|
_lastCanvasHeight = 0;
|
|
106
99
|
_initialized = false;
|
|
107
100
|
_initPromise = null;
|
|
101
|
+
/** Allocate instance buffers. Call {@linkcode init} before rendering. */
|
|
108
102
|
constructor() {
|
|
109
103
|
this._instanceData = new Float32Array(MAX_IMAGES_PER_BATCH * 8);
|
|
110
104
|
}
|
|
105
|
+
/** Compile shaders after {@linkcode setCanvas} is first called. */
|
|
111
106
|
async init() {
|
|
112
107
|
if (this._initPromise)
|
|
113
108
|
return this._initPromise;
|
|
114
109
|
this._initPromise = this._checkSupport();
|
|
115
110
|
return this._initPromise;
|
|
116
111
|
}
|
|
112
|
+
/** @internal */
|
|
117
113
|
async _checkSupport() {
|
|
118
114
|
if (typeof document === 'undefined')
|
|
119
115
|
throw new Error('WebGL2 requires a DOM environment');
|
|
@@ -121,6 +117,7 @@ export class WebGL2Renderer {
|
|
|
121
117
|
if (!canvas.getContext('webgl2'))
|
|
122
118
|
throw new Error('WebGL2 not supported');
|
|
123
119
|
}
|
|
120
|
+
/** @internal */
|
|
124
121
|
_initGL() {
|
|
125
122
|
if (!this._canvas)
|
|
126
123
|
throw new Error('Canvas not set before _initGL');
|
|
@@ -130,7 +127,6 @@ export class WebGL2Renderer {
|
|
|
130
127
|
if (!gl)
|
|
131
128
|
throw new Error('Failed to create WebGL2 context');
|
|
132
129
|
this._gl = gl;
|
|
133
|
-
// Compile and link program
|
|
134
130
|
const vert = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
|
|
135
131
|
const frag = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
|
|
136
132
|
const program = gl.createProgram();
|
|
@@ -145,12 +141,10 @@ export class WebGL2Renderer {
|
|
|
145
141
|
this._program = program;
|
|
146
142
|
this._resolutionLoc = gl.getUniformLocation(program, 'u_resolution');
|
|
147
143
|
this._texArraySizeLoc = gl.getUniformLocation(program, 'u_texArraySize');
|
|
148
|
-
// VAO + instance VBO
|
|
149
144
|
this._vao = gl.createVertexArray();
|
|
150
145
|
gl.bindVertexArray(this._vao);
|
|
151
146
|
this._instanceBuffer = gl.createBuffer();
|
|
152
147
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._instanceBuffer);
|
|
153
|
-
// Size: MAX_IMAGES * 8 floats * 4 bytes
|
|
154
148
|
gl.bufferData(gl.ARRAY_BUFFER, MAX_IMAGES_PER_BATCH * 32, gl.DYNAMIC_DRAW);
|
|
155
149
|
// stride = 32 bytes (8 × float)
|
|
156
150
|
const aDestRect = gl.getAttribLocation(program, 'a_destRect');
|
|
@@ -162,27 +156,24 @@ export class WebGL2Renderer {
|
|
|
162
156
|
gl.vertexAttribPointer(aTexInfo, 4, gl.FLOAT, false, 32, 16);
|
|
163
157
|
gl.vertexAttribDivisor(aTexInfo, 1);
|
|
164
158
|
gl.bindVertexArray(null);
|
|
165
|
-
// Texture array
|
|
166
159
|
this._allocateTextureArray(256, 256, 32);
|
|
167
|
-
// Premultiplied-alpha blending
|
|
168
160
|
gl.enable(gl.BLEND);
|
|
169
161
|
gl.blendEquation(gl.FUNC_ADD);
|
|
170
162
|
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
171
163
|
this._initialized = true;
|
|
172
164
|
}
|
|
173
|
-
// ==========================================================================
|
|
174
|
-
// Texture management
|
|
175
|
-
// ==========================================================================
|
|
176
165
|
// Round up to a multiple of 64: gives headroom against size jitter without
|
|
177
166
|
// power-of-2 over-allocation (a 1920x1080 blend region would otherwise
|
|
178
167
|
// round to 2048x2048 and waste ~2x memory).
|
|
168
|
+
/** @internal */
|
|
179
169
|
_roundDim(n) {
|
|
180
170
|
return (Math.max(n, 64) + 63) & ~63;
|
|
181
171
|
}
|
|
182
|
-
|
|
172
|
+
/** @internal */
|
|
183
173
|
_roundLayers(n) {
|
|
184
174
|
return Math.min((Math.max(n, 8) + 7) & ~7, MAX_TEXTURE_ARRAY_LAYERS);
|
|
185
175
|
}
|
|
176
|
+
/** @internal */
|
|
186
177
|
_allocateTextureArray(width, height, layers) {
|
|
187
178
|
const gl = this._gl;
|
|
188
179
|
const w = this._roundDim(width);
|
|
@@ -201,6 +192,7 @@ export class WebGL2Renderer {
|
|
|
201
192
|
this._texHeight = h;
|
|
202
193
|
this._texLayers = l;
|
|
203
194
|
}
|
|
195
|
+
/** @internal */
|
|
204
196
|
_ensureTextureArray(maxW, maxH, count) {
|
|
205
197
|
const c = Math.min(count, MAX_TEXTURE_ARRAY_LAYERS);
|
|
206
198
|
if (maxW <= this._texWidth && maxH <= this._texHeight && c <= this._texLayers)
|
|
@@ -210,9 +202,7 @@ export class WebGL2Renderer {
|
|
|
210
202
|
const newL = Math.max(c, Math.min(this._texLayers, 16));
|
|
211
203
|
this._allocateTextureArray(newW, newH, newL);
|
|
212
204
|
}
|
|
213
|
-
|
|
214
|
-
// Public interface
|
|
215
|
-
// ==========================================================================
|
|
205
|
+
/** Bind `canvas` as the GL surface and size the viewport. */
|
|
216
206
|
async setCanvas(canvas, width, height) {
|
|
217
207
|
await this.init();
|
|
218
208
|
if (width <= 0 || height <= 0)
|
|
@@ -225,6 +215,7 @@ export class WebGL2Renderer {
|
|
|
225
215
|
this._lastCanvasWidth = width;
|
|
226
216
|
this._lastCanvasHeight = height;
|
|
227
217
|
}
|
|
218
|
+
/** Resize the GL viewport to match the canvas. */
|
|
228
219
|
updateSize(width, height) {
|
|
229
220
|
if (!this._gl || !this._canvas || width <= 0 || height <= 0)
|
|
230
221
|
return;
|
|
@@ -236,9 +227,7 @@ export class WebGL2Renderer {
|
|
|
236
227
|
this._lastCanvasWidth = width;
|
|
237
228
|
this._lastCanvasHeight = height;
|
|
238
229
|
}
|
|
239
|
-
/**
|
|
240
|
-
* Render from ImageBitmaps (async render mode)
|
|
241
|
-
*/
|
|
230
|
+
/** Composite ImageBitmap planes onto the bound canvas. */
|
|
242
231
|
renderBitmaps(images, _canvasWidth, _canvasHeight) {
|
|
243
232
|
if (!this._gl || !this._initialized)
|
|
244
233
|
return;
|
|
@@ -295,9 +284,7 @@ export class WebGL2Renderer {
|
|
|
295
284
|
gl.bindVertexArray(null);
|
|
296
285
|
}
|
|
297
286
|
}
|
|
298
|
-
/**
|
|
299
|
-
* Render from raw ArrayBuffer data (non-async render mode)
|
|
300
|
-
*/
|
|
287
|
+
/** Composite {@linkcode RenderImage} planes onto the bound canvas. */
|
|
301
288
|
render(images, _canvasWidth, _canvasHeight) {
|
|
302
289
|
if (!this._gl || !this._initialized)
|
|
303
290
|
return;
|
|
@@ -361,15 +348,18 @@ export class WebGL2Renderer {
|
|
|
361
348
|
gl.bindVertexArray(null);
|
|
362
349
|
}
|
|
363
350
|
}
|
|
351
|
+
/** Clear the bound canvas to transparent black. */
|
|
364
352
|
clear() {
|
|
365
353
|
if (!this._gl)
|
|
366
354
|
return;
|
|
367
355
|
this._gl.clearColor(0, 0, 0, 0);
|
|
368
356
|
this._gl.clear(this._gl.COLOR_BUFFER_BIT);
|
|
369
357
|
}
|
|
358
|
+
/** True after {@linkcode init} has completed successfully. */
|
|
370
359
|
get initialized() {
|
|
371
360
|
return this._initialized;
|
|
372
361
|
}
|
|
362
|
+
/** Delete GL objects and drop the context. */
|
|
373
363
|
destroy() {
|
|
374
364
|
const gl = this._gl;
|
|
375
365
|
if (gl) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl2-renderer.js","sourceRoot":"","sources":["../../src/ts/webgl2-renderer.ts"],"names":[],"mappings":"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"}
|