akarisub 0.2.2 → 1.0.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/README.md +198 -167
- package/THIRD_PARTY_NOTICES.md +55 -163
- package/dist/COPYRIGHT +56 -164
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -147
- package/dist/index.js.map +1 -0
- package/dist/ts/{ts/akarisub.d.ts → akarisub.d.ts} +80 -99
- package/dist/ts/akarisub.d.ts.map +1 -0
- package/dist/ts/akarisub.js +2086 -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} +103 -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} +0 -31
- package/dist/ts/utils.d.ts.map +1 -0
- package/dist/ts/{ts/utils.js → utils.js} +0 -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} +0 -12
- package/dist/ts/webgl2-renderer.d.ts.map +1 -0
- package/dist/ts/{ts/webgl2-renderer.js → webgl2-renderer.js} +0 -27
- package/dist/ts/webgl2-renderer.js.map +1 -0
- package/dist/ts/{ts/webgpu-renderer.d.ts → webgpu-renderer.d.ts} +17 -16
- package/dist/ts/webgpu-renderer.d.ts.map +1 -0
- package/dist/ts/{ts/webgpu-renderer.js → webgpu-renderer.js} +148 -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.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.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,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Utility functions for AkariSub.
|
|
3
|
-
*/
|
|
4
|
-
// =============================================================================
|
|
5
|
-
// Color Space Utilities
|
|
6
|
-
// =============================================================================
|
|
7
|
-
/** Map video color space to standard name */
|
|
8
1
|
export const webYCbCrMap = {
|
|
9
2
|
bt709: 'BT709',
|
|
10
3
|
bt470bg: 'BT601', // BT.601 PAL
|
|
11
4
|
smpte170m: 'BT601' // BT.601 NTSC
|
|
12
5
|
};
|
|
13
|
-
/** Color matrix conversion values for SVG filter */
|
|
14
6
|
export const colorMatrixConversionMap = {
|
|
15
7
|
BT601: {
|
|
16
8
|
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 +19,6 @@ export const colorMatrixConversionMap = {
|
|
|
27
19
|
BT601: '0.913 0.0774 0.0096 0 0 -0.1051 1.1508 -0.0456 0 0 0.0063 0.0207 0.973'
|
|
28
20
|
}
|
|
29
21
|
};
|
|
30
|
-
/** libass YCbCr color space index map */
|
|
31
22
|
export const libassYCbCrMap = [
|
|
32
23
|
null,
|
|
33
24
|
'BT601',
|
|
@@ -41,9 +32,6 @@ export const libassYCbCrMap = [
|
|
|
41
32
|
'FCC',
|
|
42
33
|
'FCC'
|
|
43
34
|
];
|
|
44
|
-
/**
|
|
45
|
-
* Generate SVG filter URL for color space conversion.
|
|
46
|
-
*/
|
|
47
35
|
export function getColorSpaceFilterUrl(subtitleColorSpace, videoColorSpace) {
|
|
48
36
|
if (!subtitleColorSpace || !videoColorSpace)
|
|
49
37
|
return null;
|
|
@@ -54,12 +42,6 @@ export function getColorSpaceFilterUrl(subtitleColorSpace, videoColorSpace) {
|
|
|
54
42
|
return null;
|
|
55
43
|
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
44
|
}
|
|
57
|
-
// =============================================================================
|
|
58
|
-
// Canvas Utilities
|
|
59
|
-
// =============================================================================
|
|
60
|
-
/**
|
|
61
|
-
* Compute canvas size with prescaling.
|
|
62
|
-
*/
|
|
63
45
|
export function computeCanvasSize(width, height, prescaleFactor, prescaleHeightLimit, maxRenderHeight) {
|
|
64
46
|
const scalefactor = prescaleFactor <= 0 ? 1.0 : prescaleFactor;
|
|
65
47
|
const ratio = globalThis.devicePixelRatio || 1;
|
|
@@ -81,9 +63,6 @@ export function computeCanvasSize(width, height, prescaleFactor, prescaleHeightL
|
|
|
81
63
|
height = newH;
|
|
82
64
|
return { width, height };
|
|
83
65
|
}
|
|
84
|
-
/**
|
|
85
|
-
* Get video position and size accounting for aspect ratio.
|
|
86
|
-
*/
|
|
87
66
|
export function getVideoPosition(video, videoWidth = video.videoWidth, videoHeight = video.videoHeight) {
|
|
88
67
|
const videoRatio = videoWidth / videoHeight;
|
|
89
68
|
const { offsetWidth, offsetHeight } = video;
|
|
@@ -100,9 +79,6 @@ export function getVideoPosition(video, videoWidth = video.videoWidth, videoHeig
|
|
|
100
79
|
const y = (offsetHeight - height) / 2;
|
|
101
80
|
return { width, height, x, y };
|
|
102
81
|
}
|
|
103
|
-
// =============================================================================
|
|
104
|
-
// Alpha Bug Fix
|
|
105
|
-
// =============================================================================
|
|
106
82
|
/**
|
|
107
83
|
* Fix alpha bug in some browsers (transparent pixels rendered as non-black).
|
|
108
84
|
*/
|
|
@@ -111,7 +87,6 @@ export function fixAlpha(uint8, hasAlphaBug) {
|
|
|
111
87
|
return uint8;
|
|
112
88
|
const len = uint8.length;
|
|
113
89
|
const len4 = len - (len % 16); // Process 4 pixels at a time (16 bytes)
|
|
114
|
-
// Unrolled loop for 4 pixels at a time
|
|
115
90
|
let j = 3;
|
|
116
91
|
for (; j < len4; j += 16) {
|
|
117
92
|
if (uint8[j] < 2)
|
|
@@ -123,18 +98,12 @@ export function fixAlpha(uint8, hasAlphaBug) {
|
|
|
123
98
|
if (uint8[j + 12] < 2)
|
|
124
99
|
uint8[j + 12] = 1;
|
|
125
100
|
}
|
|
126
|
-
// Handle remaining pixels
|
|
127
101
|
for (; j < len; j += 4) {
|
|
128
102
|
if (uint8[j] < 2)
|
|
129
103
|
uint8[j] = 1;
|
|
130
104
|
}
|
|
131
105
|
return uint8;
|
|
132
106
|
}
|
|
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
|
-
*/
|
|
138
107
|
export function parseAss(content, stopAtEvents = false) {
|
|
139
108
|
const sections = [];
|
|
140
109
|
const lines = content.split(/[\r\n]+/g);
|
|
@@ -149,7 +118,6 @@ export function parseAss(content, stopAtEvents = false) {
|
|
|
149
118
|
if (firstChar === '[') {
|
|
150
119
|
const m = line.match(/^\[(.*)\]$/);
|
|
151
120
|
if (m) {
|
|
152
|
-
// Early termination for font detection performance
|
|
153
121
|
if (stopAtEvents && m[1].toLowerCase() === 'events') {
|
|
154
122
|
break;
|
|
155
123
|
}
|
|
@@ -204,17 +172,10 @@ export function parseAss(content, stopAtEvents = false) {
|
|
|
204
172
|
}
|
|
205
173
|
return sections;
|
|
206
174
|
}
|
|
207
|
-
// =============================================================================
|
|
208
|
-
// ASS Content Transformation Utilities
|
|
209
|
-
// =============================================================================
|
|
210
175
|
const blurRegex = /\\blur(?:[0-9]+\.)?[0-9]+/gm;
|
|
211
|
-
/**
|
|
212
|
-
* Remove all blur tags from subtitle content.
|
|
213
|
-
*/
|
|
214
176
|
export function dropBlur(subContent) {
|
|
215
177
|
return subContent.replace(blurRegex, '');
|
|
216
178
|
}
|
|
217
|
-
// Common video resolutions to detect source resolution
|
|
218
179
|
const commonResolutions = [
|
|
219
180
|
{ w: 7680, h: 4320 }, // 8K
|
|
220
181
|
{ w: 3840, h: 2160 }, // 4K UHD
|
|
@@ -222,9 +183,6 @@ const commonResolutions = [
|
|
|
222
183
|
{ w: 1920, h: 1080 }, // 1080p
|
|
223
184
|
{ w: 1280, h: 720 } // 720p
|
|
224
185
|
];
|
|
225
|
-
/**
|
|
226
|
-
* Detect the likely source resolution based on max position values.
|
|
227
|
-
*/
|
|
228
186
|
function detectSourceResolution(maxX, maxY) {
|
|
229
187
|
const sorted = [...commonResolutions].sort((a, b) => a.w - b.w);
|
|
230
188
|
for (const res of sorted) {
|
|
@@ -315,14 +273,8 @@ export function fixPlayRes(subContent) {
|
|
|
315
273
|
});
|
|
316
274
|
return newContent.substring(0, eventsMatch.index) + eventsSection;
|
|
317
275
|
}
|
|
318
|
-
// =============================================================================
|
|
319
|
-
// Feature Detection
|
|
320
|
-
// =============================================================================
|
|
321
276
|
let _hasAlphaBug = null;
|
|
322
277
|
let _hasBitmapBug = null;
|
|
323
|
-
/**
|
|
324
|
-
* Test for browser image bugs.
|
|
325
|
-
*/
|
|
326
278
|
export async function testImageBugs() {
|
|
327
279
|
if (_hasAlphaBug !== null && _hasBitmapBug !== null) {
|
|
328
280
|
return { hasAlphaBug: _hasAlphaBug, hasBitmapBug: _hasBitmapBug };
|
|
@@ -331,7 +283,6 @@ export async function testImageBugs() {
|
|
|
331
283
|
const ctx1 = canvas1.getContext('2d', { willReadFrequently: true });
|
|
332
284
|
if (!ctx1)
|
|
333
285
|
throw new Error('Canvas rendering not supported');
|
|
334
|
-
// Test ImageData constructor
|
|
335
286
|
if (typeof ImageData.prototype.constructor === 'function') {
|
|
336
287
|
try {
|
|
337
288
|
new ImageData(new Uint8ClampedArray([0, 0, 0, 0]), 1, 1);
|
|
@@ -340,7 +291,6 @@ export async function testImageBugs() {
|
|
|
340
291
|
console.log('Detected that ImageData is not constructable despite browser saying so');
|
|
341
292
|
}
|
|
342
293
|
}
|
|
343
|
-
// Test for alpha bug
|
|
344
294
|
const canvas2 = document.createElement('canvas');
|
|
345
295
|
const ctx2 = canvas2.getContext('2d', { willReadFrequently: true });
|
|
346
296
|
if (!ctx2)
|
|
@@ -357,7 +307,6 @@ export async function testImageBugs() {
|
|
|
357
307
|
if (_hasAlphaBug) {
|
|
358
308
|
console.log('Detected a browser having issue with transparent pixels, applying workaround');
|
|
359
309
|
}
|
|
360
|
-
// Test for bitmap bug
|
|
361
310
|
if (typeof createImageBitmap !== 'undefined') {
|
|
362
311
|
const subarray = new Uint8ClampedArray([255, 0, 255, 0, 255]).subarray(1, 5);
|
|
363
312
|
ctx2.drawImage(await createImageBitmap(new ImageData(subarray, 1)), 0, 0);
|
|
@@ -378,17 +327,12 @@ export async function testImageBugs() {
|
|
|
378
327
|
canvas2.remove();
|
|
379
328
|
return { hasAlphaBug: _hasAlphaBug, hasBitmapBug: _hasBitmapBug };
|
|
380
329
|
}
|
|
381
|
-
/**
|
|
382
|
-
* Run all feature detection tests.
|
|
383
|
-
*/
|
|
384
330
|
export async function runFeatureTests() {
|
|
385
331
|
return testImageBugs();
|
|
386
332
|
}
|
|
387
|
-
/** Get cached alpha bug value */
|
|
388
333
|
export function getAlphaBug() {
|
|
389
334
|
return _hasAlphaBug;
|
|
390
335
|
}
|
|
391
|
-
/** Get cached bitmap bug value */
|
|
392
336
|
export function getBitmapBug() {
|
|
393
337
|
return _hasBitmapBug;
|
|
394
338
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/ts/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,5 @@
|
|
|
1
1
|
import type { RenderImage } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Check if WebGL2 is supported in the current browser.
|
|
4
|
-
*/
|
|
5
2
|
export declare function isWebGL2Supported(): boolean;
|
|
6
|
-
/**
|
|
7
|
-
* High-performance WebGL2 subtitle renderer for AkariSub.
|
|
8
|
-
*/
|
|
9
3
|
export declare class WebGL2Renderer {
|
|
10
4
|
private _gl;
|
|
11
5
|
private _canvas;
|
|
@@ -33,17 +27,11 @@ export declare class WebGL2Renderer {
|
|
|
33
27
|
private _ensureTextureArray;
|
|
34
28
|
setCanvas(canvas: HTMLCanvasElement, width: number, height: number): Promise<void>;
|
|
35
29
|
updateSize(width: number, height: number): void;
|
|
36
|
-
/**
|
|
37
|
-
* Render from ImageBitmaps (async render mode)
|
|
38
|
-
*/
|
|
39
30
|
renderBitmaps(images: {
|
|
40
31
|
image: ImageBitmap;
|
|
41
32
|
x: number;
|
|
42
33
|
y: number;
|
|
43
34
|
}[], _canvasWidth: number, _canvasHeight: number): void;
|
|
44
|
-
/**
|
|
45
|
-
* Render from raw ArrayBuffer data (non-async render mode)
|
|
46
|
-
*/
|
|
47
35
|
render(images: RenderImage[], _canvasWidth: number, _canvasHeight: number): void;
|
|
48
36
|
clear(): void;
|
|
49
37
|
get initialized(): boolean;
|
|
@@ -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,wBAAgB,iBAAiB,IAAI,OAAO,CAQ3C;AAkBD,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,cAEC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;YAEa,aAAa;IAM3B,OAAO,CAAC,OAAO;IAwDf,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,mBAAmB;IASrB,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvF;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ9C;IAED,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,MAAM,CACJ,MAAM,EAAE,WAAW,EAAE,EACrB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,IAAI,CA8DN;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,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,9 @@ 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
|
-
*/
|
|
63
57
|
export function isWebGL2Supported() {
|
|
64
58
|
if (typeof document === 'undefined')
|
|
65
59
|
return false;
|
|
@@ -85,9 +79,6 @@ function compileShader(gl, type, source) {
|
|
|
85
79
|
}
|
|
86
80
|
return shader;
|
|
87
81
|
}
|
|
88
|
-
/**
|
|
89
|
-
* High-performance WebGL2 subtitle renderer for AkariSub.
|
|
90
|
-
*/
|
|
91
82
|
export class WebGL2Renderer {
|
|
92
83
|
_gl = null;
|
|
93
84
|
_canvas = null;
|
|
@@ -130,7 +121,6 @@ export class WebGL2Renderer {
|
|
|
130
121
|
if (!gl)
|
|
131
122
|
throw new Error('Failed to create WebGL2 context');
|
|
132
123
|
this._gl = gl;
|
|
133
|
-
// Compile and link program
|
|
134
124
|
const vert = compileShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER);
|
|
135
125
|
const frag = compileShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
|
|
136
126
|
const program = gl.createProgram();
|
|
@@ -145,12 +135,10 @@ export class WebGL2Renderer {
|
|
|
145
135
|
this._program = program;
|
|
146
136
|
this._resolutionLoc = gl.getUniformLocation(program, 'u_resolution');
|
|
147
137
|
this._texArraySizeLoc = gl.getUniformLocation(program, 'u_texArraySize');
|
|
148
|
-
// VAO + instance VBO
|
|
149
138
|
this._vao = gl.createVertexArray();
|
|
150
139
|
gl.bindVertexArray(this._vao);
|
|
151
140
|
this._instanceBuffer = gl.createBuffer();
|
|
152
141
|
gl.bindBuffer(gl.ARRAY_BUFFER, this._instanceBuffer);
|
|
153
|
-
// Size: MAX_IMAGES * 8 floats * 4 bytes
|
|
154
142
|
gl.bufferData(gl.ARRAY_BUFFER, MAX_IMAGES_PER_BATCH * 32, gl.DYNAMIC_DRAW);
|
|
155
143
|
// stride = 32 bytes (8 × float)
|
|
156
144
|
const aDestRect = gl.getAttribLocation(program, 'a_destRect');
|
|
@@ -162,24 +150,18 @@ export class WebGL2Renderer {
|
|
|
162
150
|
gl.vertexAttribPointer(aTexInfo, 4, gl.FLOAT, false, 32, 16);
|
|
163
151
|
gl.vertexAttribDivisor(aTexInfo, 1);
|
|
164
152
|
gl.bindVertexArray(null);
|
|
165
|
-
// Texture array
|
|
166
153
|
this._allocateTextureArray(256, 256, 32);
|
|
167
|
-
// Premultiplied-alpha blending
|
|
168
154
|
gl.enable(gl.BLEND);
|
|
169
155
|
gl.blendEquation(gl.FUNC_ADD);
|
|
170
156
|
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
|
|
171
157
|
this._initialized = true;
|
|
172
158
|
}
|
|
173
|
-
// ==========================================================================
|
|
174
|
-
// Texture management
|
|
175
|
-
// ==========================================================================
|
|
176
159
|
// Round up to a multiple of 64: gives headroom against size jitter without
|
|
177
160
|
// power-of-2 over-allocation (a 1920x1080 blend region would otherwise
|
|
178
161
|
// round to 2048x2048 and waste ~2x memory).
|
|
179
162
|
_roundDim(n) {
|
|
180
163
|
return (Math.max(n, 64) + 63) & ~63;
|
|
181
164
|
}
|
|
182
|
-
// Round layers up to a multiple of 8, clamped to the layer cap
|
|
183
165
|
_roundLayers(n) {
|
|
184
166
|
return Math.min((Math.max(n, 8) + 7) & ~7, MAX_TEXTURE_ARRAY_LAYERS);
|
|
185
167
|
}
|
|
@@ -210,9 +192,6 @@ export class WebGL2Renderer {
|
|
|
210
192
|
const newL = Math.max(c, Math.min(this._texLayers, 16));
|
|
211
193
|
this._allocateTextureArray(newW, newH, newL);
|
|
212
194
|
}
|
|
213
|
-
// ==========================================================================
|
|
214
|
-
// Public interface
|
|
215
|
-
// ==========================================================================
|
|
216
195
|
async setCanvas(canvas, width, height) {
|
|
217
196
|
await this.init();
|
|
218
197
|
if (width <= 0 || height <= 0)
|
|
@@ -236,9 +215,6 @@ export class WebGL2Renderer {
|
|
|
236
215
|
this._lastCanvasWidth = width;
|
|
237
216
|
this._lastCanvasHeight = height;
|
|
238
217
|
}
|
|
239
|
-
/**
|
|
240
|
-
* Render from ImageBitmaps (async render mode)
|
|
241
|
-
*/
|
|
242
218
|
renderBitmaps(images, _canvasWidth, _canvasHeight) {
|
|
243
219
|
if (!this._gl || !this._initialized)
|
|
244
220
|
return;
|
|
@@ -295,9 +271,6 @@ export class WebGL2Renderer {
|
|
|
295
271
|
gl.bindVertexArray(null);
|
|
296
272
|
}
|
|
297
273
|
}
|
|
298
|
-
/**
|
|
299
|
-
* Render from raw ArrayBuffer data (non-async render mode)
|
|
300
|
-
*/
|
|
301
274
|
render(images, _canvasWidth, _canvasHeight) {
|
|
302
275
|
if (!this._gl || !this._initialized)
|
|
303
276
|
return;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgl2-renderer.js","sourceRoot":"","sources":["../../src/ts/webgl2-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import type { RenderImage } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Check if WebGPU is supported in the current browser.
|
|
4
|
-
*/
|
|
5
2
|
export declare function isWebGPUSupported(): boolean;
|
|
6
|
-
/**
|
|
7
|
-
* High-performance WebGPU subtitle renderer for AkariSub.
|
|
8
|
-
*/
|
|
9
3
|
export declare class WebGPURenderer {
|
|
10
4
|
private device;
|
|
11
5
|
private context;
|
|
6
|
+
private stageContexts;
|
|
12
7
|
private pipeline;
|
|
13
8
|
private bindGroupLayout;
|
|
14
9
|
private uniformBuffer;
|
|
@@ -19,6 +14,9 @@ export declare class WebGPURenderer {
|
|
|
19
14
|
private textureArrayWidth;
|
|
20
15
|
private textureArrayHeight;
|
|
21
16
|
private pendingDestroyTextures;
|
|
17
|
+
private externalUploadCanvas;
|
|
18
|
+
private externalUploadContext;
|
|
19
|
+
private warnedExternalUploadFallback;
|
|
22
20
|
private readonly imageDataArray;
|
|
23
21
|
private readonly resolutionArray;
|
|
24
22
|
private bindGroup;
|
|
@@ -38,24 +36,27 @@ export declare class WebGPURenderer {
|
|
|
38
36
|
private ensureTextureArray;
|
|
39
37
|
private updateBindGroup;
|
|
40
38
|
setCanvas(canvas: HTMLCanvasElement, width: number, height: number): Promise<void>;
|
|
41
|
-
updateSize(width: number, height: number): void;
|
|
42
39
|
/**
|
|
43
|
-
* Render
|
|
44
|
-
*
|
|
40
|
+
* Render a prepared full-frame subtitle snapshot into its own WebGPU canvas.
|
|
41
|
+
* Keeping prepared frames on the selected backend avoids switching to a 2D
|
|
42
|
+
* compositor during playback (and lets Chromium keep one GPU overlay stack).
|
|
45
43
|
*/
|
|
44
|
+
renderBitmapToCanvas(canvas: HTMLCanvasElement, bitmap: ImageBitmap, width: number, height: number): boolean;
|
|
45
|
+
releaseCanvas(canvas: HTMLCanvasElement): void;
|
|
46
|
+
updateSize(width: number, height: number): void;
|
|
46
47
|
renderBitmaps(images: {
|
|
47
48
|
image: ImageBitmap;
|
|
48
49
|
x: number;
|
|
49
50
|
y: number;
|
|
50
|
-
}[],
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
render(images: RenderImage[], _canvasWidth: number, _canvasHeight: number): void;
|
|
51
|
+
}[], canvasWidth: number, canvasHeight: number): boolean;
|
|
52
|
+
submittedWorkDone(): Promise<void>;
|
|
53
|
+
private renderBitmapsToContext;
|
|
54
|
+
render(images: RenderImage[], _canvasWidth: number, _canvasHeight: number): boolean;
|
|
55
|
+
private uploadImageBitmap;
|
|
56
56
|
private uploadTextureData;
|
|
57
57
|
private cleanupPendingTextures;
|
|
58
|
-
clear():
|
|
58
|
+
clear(): boolean;
|
|
59
|
+
private clearContext;
|
|
59
60
|
get initialized(): boolean;
|
|
60
61
|
destroy(): void;
|
|
61
62
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webgpu-renderer.d.ts","sourceRoot":"","sources":["../../src/ts/webgpu-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAgG1C,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAUD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,aAAa,CAAiD;IACtE,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,eAAe,CAAkC;IAEzD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,eAAe,CAAyB;IAEhD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,gBAAgB,CAA8B;IACtD,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,kBAAkB,CAAI;IAE9B,OAAO,CAAC,sBAAsB,CAAmB;IACjD,OAAO,CAAC,oBAAoB,CAAmD;IAC/E,OAAO,CAAC,qBAAqB,CAA4E;IACzG,OAAO,CAAC,4BAA4B,CAAQ;IAE5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IAEtD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,cAAc,CAAO;IAE7B,OAAO,CAAC,eAAe,CAAI;IAC3B,OAAO,CAAC,gBAAgB,CAAI;IAE5B,MAAM,EAAE,gBAAgB,CAAe;IAEvC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,YAAY,CAAQ;IAE5B,cAEC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;YAEa,WAAW;IA4EzB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,eAAe;IAcjB,SAAS,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BvF;IAED;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAkB3G;IAED,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAS7C;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAY9C;IAED,aAAa,CACX,MAAM,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,EACtD,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAGT;IAED,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjC;IAED,OAAO,CAAC,sBAAsB;IA4G9B,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CA6GlF;IAED,OAAO,CAAC,iBAAiB;IA+CzB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,sBAAsB;IAW9B,KAAK,IAAI,OAAO,CAIf;IAED,OAAO,CAAC,YAAY;IA0BpB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,OAAO,IAAI,IAAI,CAgCd;CACF"}
|