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.
Files changed (78) hide show
  1. package/README.md +198 -167
  2. package/THIRD_PARTY_NOTICES.md +55 -163
  3. package/dist/COPYRIGHT +56 -164
  4. package/dist/index.d.ts +26 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +24 -147
  7. package/dist/index.js.map +1 -0
  8. package/dist/ts/akarisub.d.ts +323 -0
  9. package/dist/ts/akarisub.d.ts.map +1 -0
  10. package/dist/ts/akarisub.js +2235 -0
  11. package/dist/ts/akarisub.js.map +1 -0
  12. package/dist/ts/timing.d.ts +63 -0
  13. package/dist/ts/timing.d.ts.map +1 -0
  14. package/dist/ts/timing.js +219 -0
  15. package/dist/ts/timing.js.map +1 -0
  16. package/dist/ts/{ts/types.d.ts → types.d.ts} +176 -78
  17. package/dist/ts/types.d.ts.map +1 -0
  18. package/dist/ts/types.js +2 -0
  19. package/dist/ts/{ts/types.js.map → types.js.map} +1 -1
  20. package/dist/ts/{ts/utils.d.ts → utils.d.ts} +24 -37
  21. package/dist/ts/utils.d.ts.map +1 -0
  22. package/dist/ts/{ts/utils.js → utils.js} +12 -56
  23. package/dist/ts/utils.js.map +1 -0
  24. package/dist/ts/wasm.d.ts +12 -0
  25. package/dist/ts/wasm.d.ts.map +1 -0
  26. package/dist/ts/wasm.js +46 -0
  27. package/dist/ts/wasm.js.map +1 -0
  28. package/dist/ts/{ts/webgl2-renderer.d.ts → webgl2-renderer.d.ts} +17 -12
  29. package/dist/ts/webgl2-renderer.d.ts.map +1 -0
  30. package/dist/ts/{ts/webgl2-renderer.js → webgl2-renderer.js} +17 -27
  31. package/dist/ts/webgl2-renderer.js.map +1 -0
  32. package/dist/ts/webgpu-renderer.d.ts +88 -0
  33. package/dist/ts/webgpu-renderer.d.ts.map +1 -0
  34. package/dist/ts/{ts/webgpu-renderer.js → webgpu-renderer.js} +173 -71
  35. package/dist/ts/webgpu-renderer.js.map +1 -0
  36. package/dist/ts/worker.d.ts +2 -0
  37. package/dist/ts/{ts/worker.d.ts.map → worker.d.ts.map} +1 -1
  38. package/dist/ts/{ts/worker.js → worker.js} +1064 -264
  39. package/dist/ts/worker.js.map +1 -0
  40. package/dist/wrapper.d.ts +8 -0
  41. package/dist/wrapper.d.ts.map +1 -0
  42. package/dist/{ts/index.js → wrapper.js} +4 -14
  43. package/dist/wrapper.js.map +1 -0
  44. package/package.json +24 -22
  45. package/pkg/akarisub.js +53 -0
  46. package/{dist/akarisub-worker.wasm → pkg/akarisub.wasm} +0 -0
  47. package/src/wrapper.ts +46 -0
  48. package/dist/akarisub-worker.js +0 -39
  49. package/dist/akarisub.umd.js +0 -159
  50. package/dist/ts/index.d.ts +0 -14
  51. package/dist/ts/index.d.ts.map +0 -1
  52. package/dist/ts/index.js.map +0 -1
  53. package/dist/ts/ts/akarisub.d.ts +0 -225
  54. package/dist/ts/ts/akarisub.d.ts.map +0 -1
  55. package/dist/ts/ts/akarisub.js +0 -1073
  56. package/dist/ts/ts/akarisub.js.map +0 -1
  57. package/dist/ts/ts/types.d.ts.map +0 -1
  58. package/dist/ts/ts/types.js +0 -5
  59. package/dist/ts/ts/utils.d.ts.map +0 -1
  60. package/dist/ts/ts/utils.js.map +0 -1
  61. package/dist/ts/ts/webgl2-renderer.d.ts.map +0 -1
  62. package/dist/ts/ts/webgl2-renderer.js.map +0 -1
  63. package/dist/ts/ts/webgpu-renderer.d.ts +0 -62
  64. package/dist/ts/ts/webgpu-renderer.d.ts.map +0 -1
  65. package/dist/ts/ts/webgpu-renderer.js.map +0 -1
  66. package/dist/ts/ts/worker.d.ts +0 -6
  67. package/dist/ts/ts/worker.js.map +0 -1
  68. package/dist/ts/wrapper.d.ts +0 -8
  69. package/dist/ts/wrapper.d.ts.map +0 -1
  70. package/dist/ts/wrapper.js +0 -9
  71. package/dist/ts/wrapper.js.map +0 -1
  72. package/src/ts/akarisub.ts +0 -1272
  73. package/src/ts/types.ts +0 -397
  74. package/src/ts/utils.ts +0 -512
  75. package/src/ts/webgl2-renderer.ts +0 -426
  76. package/src/ts/webgpu-renderer.ts +0 -691
  77. package/src/ts/worker.ts +0 -2052
  78. /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
- /** Color matrix conversion values for SVG filter */
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 color space index map */
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
- /** Get cached alpha bug value */
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
- /** Get cached bitmap bug value */
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":"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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"}
@@ -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
- // Round layers up to a multiple of 8, clamped to the layer cap
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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"}