jassub 2.1.0 → 2.2.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 +28 -26
- package/dist/worker/webgl-renderer.d.ts +6 -9
- package/dist/worker/webgl-renderer.js +131 -93
- package/dist/worker/webgl-renderer.js.map +1 -1
- package/dist/worker/webgpu-renderer.js +3 -0
- package/dist/worker/webgpu-renderer.js.map +1 -1
- package/dist/worker/worker.d.ts +1 -2
- package/dist/worker/worker.js +8 -10
- package/dist/worker/worker.js.map +1 -1
- package/package.json +1 -1
- package/src/worker/webgl-renderer.ts +156 -127
- package/src/worker/webgpu-renderer.ts +4 -0
- package/src/worker/worker.ts +12 -12
package/README.md
CHANGED
|
@@ -4,24 +4,26 @@
|
|
|
4
4
|
<p align="center">
|
|
5
5
|
The Fastest JavaScript SSA/ASS Subtitle Renderer For Browsers.
|
|
6
6
|
</p>
|
|
7
|
-
JASSUB is a JS wrapper for <a href="https://github.com/libass/libass">libass</a>, which renders <a href="https://en.wikipedia.org/wiki/SubStation_Alpha">SSA/ASS subtitles</a> directly in your browser. It uses Emscripten to compile libass' C++ code to WASM, and
|
|
7
|
+
JASSUB is a JS wrapper for <a href="https://github.com/libass/libass">libass</a>, which renders <a href="https://en.wikipedia.org/wiki/SubStation_Alpha">SSA/ASS subtitles</a> directly in your browser. It uses Emscripten to compile libass' C++ code to WASM, and WebGL for hardware acceleration.
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
11
|
* Supports all SSA/ASS features (everything libass supports)
|
|
12
12
|
* Supports all OpenType, TrueType and WOFF fonts, as well as embedded fonts
|
|
13
|
-
* Supports anamorphic videos
|
|
14
|
-
* Supports color space mangling
|
|
13
|
+
* Supports anamorphic videos [(on browsers which support it)](https://caniuse.com/mdn-api_htmlvideoelement_requestvideoframecallback)
|
|
14
|
+
* Supports color space mangling [(on browsers which support it)](https://caniuse.com/mdn-api_videocolorspace)
|
|
15
15
|
* Capable of using local fonts [(on browsers which support it)](https://caniuse.com/mdn-api_window_querylocalfonts)
|
|
16
|
-
* Works fast (all the heavy lifting is done by WebAssembly and
|
|
16
|
+
* Works fast (all the heavy lifting is done by WebAssembly and WebGL, with absolutely minimal JS glue)
|
|
17
17
|
* Is fully multi-threaded
|
|
18
18
|
* Is asynchronous (renders when available, not in order of execution)
|
|
19
|
-
* Benefits from hardware acceleration (uses
|
|
19
|
+
* Benefits from hardware acceleration (uses WebGL)
|
|
20
20
|
* Doesn't manipulate the DOM to render subtitles
|
|
21
21
|
* Easy to use - just connect it to video element
|
|
22
22
|
|
|
23
23
|
## Requirements
|
|
24
24
|
|
|
25
|
+
The
|
|
26
|
+
|
|
25
27
|
```json
|
|
26
28
|
{
|
|
27
29
|
"Cross-Origin-Embedder-Policy": "require-corp",
|
|
@@ -29,9 +31,27 @@ JASSUB is a JS wrapper for <a href="https://github.com/libass/libass">libass</a>
|
|
|
29
31
|
}
|
|
30
32
|
```
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
headers are recommended to use this library, as it uses SharedArrayBuffer for multi-threading, but if you can't set them, it will fallback automatically to work in single-threaded mode.
|
|
35
|
+
|
|
36
|
+
At minimum WASM + WebGL2 + TextDecoder + OffscreenCanvas + Web Workers + Proxy + AbortController + Fetch + Promise + getVideoPlaybackQuality/requestVideoFrameCallback are required for JASSUB to work.
|
|
37
|
+
|
|
38
|
+
<!--
|
|
39
|
+
WASM: 57 11 52 / 51 11 47
|
|
40
|
+
WebGL2: 56 15 51 / 43 10.1 42
|
|
41
|
+
TextDecoder: 38 10.1 20 / 38 10.1 19
|
|
42
|
+
OffscreenCanvas: 69 17 105 / 58 16.2 44
|
|
43
|
+
BigInt: 67 15 68
|
|
44
|
+
Web Workers: 4 4 3.5
|
|
45
|
+
Promise: 33 7.1 29 / 4 3.1 2
|
|
46
|
+
Proxy: 49 10 18
|
|
47
|
+
AbortController: 66 12 57 / 4 3.1 2
|
|
48
|
+
Fetch: 42 10.1 39 / 41 10.1 34
|
|
49
|
+
getVPQ/rVFC: 80 8 42 / 28 8 42
|
|
50
|
+
-->
|
|
51
|
+
|
|
52
|
+
JASSUB supports Chrome/Safari/Firefox 80/17/105, you bring the support down to 67/16.2/68 if you enable some flags/settings in your browser for these features, and polyfill AbortController and getVideoPlaybackQuality. For other engines other polyfills might be needed. Babel is also recommended if you need to support older JS engines as JASSUB ships as ES modules with modern syntax.
|
|
33
53
|
|
|
34
|
-
See https://github.com/gpuweb/gpuweb/wiki/Implementation-Status for a WebGPU support table, and what flags you might need to enable it in your browser if you want to utilise it instead of WebGL2.
|
|
54
|
+
<!-- See https://github.com/gpuweb/gpuweb/wiki/Implementation-Status for a WebGPU support table, and what flags you might need to enable it in your browser if you want to utilise it instead of WebGL2. -->
|
|
35
55
|
|
|
36
56
|
## Usage
|
|
37
57
|
|
|
@@ -107,31 +127,13 @@ Make sure to always `await instance.ready` before running any methods!!!
|
|
|
107
127
|
|
|
108
128
|
## Looking for backwards compatibility with much older browser engines?
|
|
109
129
|
|
|
110
|
-
At minimum WASM + WebGL2 + TextDecoder + OffscreenCanvas + Web Workers + Proxy + AbortController + Fetch + Promise + getVideoPlaybackQuality/requestVideoFrameCallback are required for JASSUB to work.
|
|
111
|
-
|
|
112
|
-
<!--
|
|
113
|
-
WASM: 57 11 52 / 51 11 47
|
|
114
|
-
WebGL2: 56 15 51 / 43 10.1 42
|
|
115
|
-
TextDecoder: 38 10.1 20 / 38 10.1 19
|
|
116
|
-
OffscreenCanvas: 69 17 105 / 58 16.2 44
|
|
117
|
-
BigInt: 67 15 68
|
|
118
|
-
Web Workers: 4 4 3.5
|
|
119
|
-
Promise: 33 7.1 29 / 4 3.1 2
|
|
120
|
-
Proxy: 49 10 18
|
|
121
|
-
AbortController: 66 12 57 / 4 3.1 2
|
|
122
|
-
Fetch: 42 10.1 39 / 41 10.1 34
|
|
123
|
-
getVPQ/rVFC: 80 8 42 / 28 8 42
|
|
124
|
-
-->
|
|
125
|
-
|
|
126
|
-
JASSUB supports Chrome/Safari/Firefox 80/17/105, you bring the support down to 67/16.2/68 if you enable some flags/settings in your browser for these features, and polyfill AbortController and getVideoPlaybackQuality. For other engines other polyfills might be needed. Babel is also recommended if you need to support older JS engines as JASSUB ships as modern ES modules with modern syntax.
|
|
127
|
-
|
|
128
130
|
If you want to support even older engines, then please check the [v1.8.8 tag](https://github.com/ThaUnknown/jassub/releases/tag/1.8.8), or install it via:
|
|
129
131
|
|
|
130
132
|
```shell
|
|
131
133
|
[p]npm i jassub@1.8.8
|
|
132
134
|
```
|
|
133
135
|
|
|
134
|
-
Support for older browsers (without
|
|
136
|
+
Support for older browsers (without WebGL, WebAssembly threads, etc) has been dropped in v2.0.0 and later.
|
|
135
137
|
|
|
136
138
|
# How to build?
|
|
137
139
|
|
|
@@ -18,11 +18,6 @@ export declare const colorMatrixConversionMap: {
|
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
20
|
export type ColorSpace = keyof typeof colorMatrixConversionMap;
|
|
21
|
-
interface TextureInfo {
|
|
22
|
-
texture: WebGLTexture;
|
|
23
|
-
width: number;
|
|
24
|
-
height: number;
|
|
25
|
-
}
|
|
26
21
|
export declare class WebGL2Renderer {
|
|
27
22
|
gl: WebGL2RenderingContext | null;
|
|
28
23
|
program: WebGLProgram | null;
|
|
@@ -30,9 +25,12 @@ export declare class WebGL2Renderer {
|
|
|
30
25
|
u_resolution: WebGLUniformLocation | null;
|
|
31
26
|
u_destRect: WebGLUniformLocation | null;
|
|
32
27
|
u_color: WebGLUniformLocation | null;
|
|
33
|
-
|
|
28
|
+
u_texArray: WebGLUniformLocation | null;
|
|
34
29
|
u_colorMatrix: WebGLUniformLocation | null;
|
|
35
|
-
|
|
30
|
+
u_texLayer: WebGLUniformLocation | null;
|
|
31
|
+
texArray: WebGLTexture | null;
|
|
32
|
+
texArrayWidth: number;
|
|
33
|
+
texArrayHeight: number;
|
|
36
34
|
colorMatrix: Float32Array;
|
|
37
35
|
setCanvas(canvas: OffscreenCanvas, width: number, height: number): void;
|
|
38
36
|
createShader(type: number, source: string): WebGLShader | null;
|
|
@@ -41,8 +39,7 @@ export declare class WebGL2Renderer {
|
|
|
41
39
|
* Pass null or undefined to use identity (no conversion).
|
|
42
40
|
*/
|
|
43
41
|
setColorMatrix(subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC', videoColorSpace?: 'BT601' | 'BT709'): void;
|
|
44
|
-
|
|
42
|
+
createTexArray(width: number, height: number): void;
|
|
45
43
|
render(images: ASSImage[], heap: Uint8Array): void;
|
|
46
44
|
destroy(): void;
|
|
47
45
|
}
|
|
48
|
-
export {};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// @ts-expect-error new experimental API
|
|
2
|
+
const SUPPORTS_GROWTH = !!WebAssembly.Memory.prototype.toResizableBuffer;
|
|
1
3
|
const IDENTITY_MATRIX = new Float32Array([
|
|
2
4
|
1, 0, 0,
|
|
3
5
|
0, 1, 0,
|
|
@@ -47,71 +49,94 @@ export const colorMatrixConversionMap = {
|
|
|
47
49
|
])
|
|
48
50
|
}
|
|
49
51
|
};
|
|
50
|
-
// GLSL Vertex Shader
|
|
51
|
-
const VERTEX_SHADER = `#version 300 es
|
|
52
|
+
// GLSL ES 3.0 Vertex Shader
|
|
53
|
+
const VERTEX_SHADER = /* glsl */ `#version 300 es
|
|
52
54
|
precision highp float;
|
|
53
55
|
|
|
54
|
-
uniform vec2 u_resolution;
|
|
55
|
-
uniform vec4 u_destRect; // x, y, w, h
|
|
56
|
-
uniform vec4 u_color; // RGBA
|
|
57
|
-
|
|
58
|
-
out vec2 v_texCoord;
|
|
59
|
-
out vec4 v_color;
|
|
60
|
-
|
|
61
|
-
// Quad vertices (0,0 to 1,1)
|
|
62
56
|
const vec2 QUAD_POSITIONS[6] = vec2[6](
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
vec2(0.0, 0.0),
|
|
58
|
+
vec2(1.0, 0.0),
|
|
59
|
+
vec2(0.0, 1.0),
|
|
60
|
+
vec2(1.0, 0.0),
|
|
61
|
+
vec2(1.0, 1.0),
|
|
62
|
+
vec2(0.0, 1.0)
|
|
69
63
|
);
|
|
70
64
|
|
|
65
|
+
uniform vec2 u_resolution;
|
|
66
|
+
uniform vec4 u_destRect; // x, y, w, h
|
|
67
|
+
uniform vec4 u_color; // r, g, b, a
|
|
68
|
+
uniform float u_texLayer;
|
|
69
|
+
|
|
70
|
+
flat out vec2 v_destXY;
|
|
71
|
+
flat out vec4 v_color;
|
|
72
|
+
flat out vec2 v_texSize;
|
|
73
|
+
flat out float v_texLayer;
|
|
74
|
+
|
|
71
75
|
void main() {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
v_texCoord = quadPos;
|
|
83
|
-
v_color = u_color;
|
|
76
|
+
vec2 quadPos = QUAD_POSITIONS[gl_VertexID];
|
|
77
|
+
vec2 pixelPos = u_destRect.xy + quadPos * u_destRect.zw;
|
|
78
|
+
vec2 clipPos = (pixelPos / u_resolution) * 2.0 - 1.0;
|
|
79
|
+
clipPos.y = -clipPos.y;
|
|
80
|
+
|
|
81
|
+
gl_Position = vec4(clipPos, 0.0, 1.0);
|
|
82
|
+
v_destXY = u_destRect.xy;
|
|
83
|
+
v_color = u_color;
|
|
84
|
+
v_texSize = u_destRect.zw;
|
|
85
|
+
v_texLayer = u_texLayer;
|
|
84
86
|
}
|
|
85
87
|
`;
|
|
86
|
-
// GLSL Fragment Shader
|
|
87
|
-
const FRAGMENT_SHADER = `#version 300 es
|
|
88
|
+
// GLSL ES 3.0 Fragment Shader - use texelFetch for pixel-perfect sampling
|
|
89
|
+
const FRAGMENT_SHADER = /* glsl */ `#version 300 es
|
|
88
90
|
precision highp float;
|
|
91
|
+
precision highp sampler2DArray;
|
|
89
92
|
|
|
90
|
-
uniform
|
|
93
|
+
uniform sampler2DArray u_texArray;
|
|
91
94
|
uniform mat3 u_colorMatrix;
|
|
95
|
+
uniform vec2 u_resolution;
|
|
92
96
|
|
|
93
|
-
in vec2
|
|
94
|
-
in vec4 v_color;
|
|
97
|
+
flat in vec2 v_destXY;
|
|
98
|
+
flat in vec4 v_color;
|
|
99
|
+
flat in vec2 v_texSize;
|
|
100
|
+
flat in float v_texLayer;
|
|
95
101
|
|
|
96
102
|
out vec4 fragColor;
|
|
97
103
|
|
|
98
104
|
void main() {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
105
|
+
// Flip Y: WebGL's gl_FragCoord.y is 0 at bottom, but destXY.y is from top
|
|
106
|
+
vec2 fragPos = vec2(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y);
|
|
107
|
+
|
|
108
|
+
// Calculate local position within the quad (screen coords)
|
|
109
|
+
vec2 localPos = fragPos - v_destXY;
|
|
110
|
+
|
|
111
|
+
// Convert to integer texel coordinates for texelFetch
|
|
112
|
+
ivec2 texCoord = ivec2(floor(localPos));
|
|
113
|
+
|
|
114
|
+
// Bounds check (prevents out-of-bounds access)
|
|
115
|
+
ivec2 texSizeI = ivec2(v_texSize);
|
|
116
|
+
if (texCoord.x < 0 || texCoord.y < 0 || texCoord.x >= texSizeI.x || texCoord.y >= texSizeI.y) {
|
|
117
|
+
fragColor = vec4(0.0);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// texelFetch: integer coords, no interpolation, no precision issues
|
|
122
|
+
float mask = texelFetch(u_texArray, ivec3(texCoord, int(v_texLayer)), 0).r;
|
|
123
|
+
|
|
124
|
+
// Apply color matrix conversion (identity if no conversion needed)
|
|
125
|
+
vec3 correctedColor = u_colorMatrix * v_color.rgb;
|
|
126
|
+
|
|
127
|
+
// libass color alpha: 0 = opaque, 255 = transparent (inverted)
|
|
128
|
+
float colorAlpha = 1.0 - v_color.a;
|
|
129
|
+
|
|
130
|
+
// Final alpha = colorAlpha * mask
|
|
131
|
+
float a = colorAlpha * mask;
|
|
132
|
+
|
|
133
|
+
// Premultiplied alpha output
|
|
134
|
+
fragColor = vec4(correctedColor * a, a);
|
|
113
135
|
}
|
|
114
136
|
`;
|
|
137
|
+
// Texture array configuration
|
|
138
|
+
const TEX_ARRAY_SIZE = 64; // Fixed layer count
|
|
139
|
+
const TEX_INITIAL_SIZE = 256; // Initial width/height
|
|
115
140
|
export class WebGL2Renderer {
|
|
116
141
|
gl = null;
|
|
117
142
|
program = null;
|
|
@@ -120,10 +145,13 @@ export class WebGL2Renderer {
|
|
|
120
145
|
u_resolution = null;
|
|
121
146
|
u_destRect = null;
|
|
122
147
|
u_color = null;
|
|
123
|
-
|
|
148
|
+
u_texArray = null;
|
|
124
149
|
u_colorMatrix = null;
|
|
125
|
-
|
|
126
|
-
|
|
150
|
+
u_texLayer = null;
|
|
151
|
+
// Single texture array instead of individual textures
|
|
152
|
+
texArray = null;
|
|
153
|
+
texArrayWidth = 0;
|
|
154
|
+
texArrayHeight = 0;
|
|
127
155
|
colorMatrix = IDENTITY_MATRIX;
|
|
128
156
|
setCanvas(canvas, width, height) {
|
|
129
157
|
// WebGL2 doesn't allow 0-sized canvases
|
|
@@ -140,7 +168,8 @@ export class WebGL2Renderer {
|
|
|
140
168
|
premultipliedAlpha: true,
|
|
141
169
|
antialias: false,
|
|
142
170
|
depth: false,
|
|
143
|
-
stencil: false
|
|
171
|
+
stencil: false,
|
|
172
|
+
desynchronized: true
|
|
144
173
|
});
|
|
145
174
|
if (!this.gl) {
|
|
146
175
|
throw new Error('Could not get WebGL2 context');
|
|
@@ -160,12 +189,15 @@ export class WebGL2Renderer {
|
|
|
160
189
|
const info = this.gl.getProgramInfoLog(this.program);
|
|
161
190
|
throw new Error('Failed to link program: ' + info);
|
|
162
191
|
}
|
|
192
|
+
this.gl.deleteShader(vertexShader);
|
|
193
|
+
this.gl.deleteShader(fragmentShader);
|
|
163
194
|
// Get uniform locations
|
|
164
195
|
this.u_resolution = this.gl.getUniformLocation(this.program, 'u_resolution');
|
|
165
196
|
this.u_destRect = this.gl.getUniformLocation(this.program, 'u_destRect');
|
|
166
197
|
this.u_color = this.gl.getUniformLocation(this.program, 'u_color');
|
|
167
|
-
this.
|
|
198
|
+
this.u_texArray = this.gl.getUniformLocation(this.program, 'u_texArray');
|
|
168
199
|
this.u_colorMatrix = this.gl.getUniformLocation(this.program, 'u_colorMatrix');
|
|
200
|
+
this.u_texLayer = this.gl.getUniformLocation(this.program, 'u_texLayer');
|
|
169
201
|
// Create a VAO (required for WebGL2)
|
|
170
202
|
this.vao = this.gl.createVertexArray();
|
|
171
203
|
this.gl.bindVertexArray(this.vao);
|
|
@@ -175,13 +207,15 @@ export class WebGL2Renderer {
|
|
|
175
207
|
// Use the program
|
|
176
208
|
this.gl.useProgram(this.program);
|
|
177
209
|
// Set texture unit
|
|
178
|
-
this.gl.uniform1i(this.
|
|
210
|
+
this.gl.uniform1i(this.u_texArray, 0);
|
|
179
211
|
// Set initial color matrix
|
|
180
212
|
this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix);
|
|
181
213
|
// Set one-time GL state
|
|
182
214
|
this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, 1);
|
|
183
215
|
this.gl.clearColor(0, 0, 0, 0);
|
|
184
216
|
this.gl.activeTexture(this.gl.TEXTURE0);
|
|
217
|
+
// Create initial texture array
|
|
218
|
+
this.createTexArray(TEX_INITIAL_SIZE, TEX_INITIAL_SIZE);
|
|
185
219
|
}
|
|
186
220
|
// Update viewport and resolution uniform
|
|
187
221
|
this.gl.viewport(0, 0, width, height);
|
|
@@ -210,59 +244,63 @@ export class WebGL2Renderer {
|
|
|
210
244
|
this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix);
|
|
211
245
|
}
|
|
212
246
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
this.
|
|
218
|
-
this.gl.
|
|
219
|
-
|
|
220
|
-
this.gl.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
247
|
+
createTexArray(width, height) {
|
|
248
|
+
if (this.texArray) {
|
|
249
|
+
this.gl.deleteTexture(this.texArray);
|
|
250
|
+
}
|
|
251
|
+
this.texArray = this.gl.createTexture();
|
|
252
|
+
this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, this.texArray);
|
|
253
|
+
// Allocate storage for texture array
|
|
254
|
+
this.gl.texImage3D(this.gl.TEXTURE_2D_ARRAY, 0, this.gl.R8, width, height, TEX_ARRAY_SIZE, 0, this.gl.RED, this.gl.UNSIGNED_BYTE, null);
|
|
255
|
+
// Set texture parameters (no filtering needed for texelFetch, but set anyway)
|
|
256
|
+
this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_MIN_FILTER, this.gl.NEAREST);
|
|
257
|
+
this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_MAG_FILTER, this.gl.NEAREST);
|
|
258
|
+
this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);
|
|
259
|
+
this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);
|
|
260
|
+
this.texArrayWidth = width;
|
|
261
|
+
this.texArrayHeight = height;
|
|
226
262
|
}
|
|
227
263
|
render(images, heap) {
|
|
228
|
-
if (!this.gl || !this.program || !this.vao)
|
|
264
|
+
if (!this.gl || !this.program || !this.vao || !this.texArray)
|
|
229
265
|
return;
|
|
230
266
|
// Hack: work around shared memory issues, webGL doesnt support shared memory, so there are race conditions when growing memory
|
|
231
|
-
if (self.HEAPU8RAW.buffer !== self.WASMMEMORY.buffer) {
|
|
267
|
+
if ((self.HEAPU8RAW.buffer !== self.WASMMEMORY.buffer) || SUPPORTS_GROWTH) {
|
|
232
268
|
heap = self.HEAPU8RAW = new Uint8Array(self.WASMMEMORY.buffer);
|
|
233
269
|
}
|
|
234
270
|
// Clear canvas
|
|
235
271
|
this.gl.clear(this.gl.COLOR_BUFFER_BIT);
|
|
236
|
-
//
|
|
237
|
-
|
|
238
|
-
|
|
272
|
+
// Find max dimensions needed
|
|
273
|
+
let maxW = this.texArrayWidth;
|
|
274
|
+
let maxH = this.texArrayHeight;
|
|
275
|
+
for (const img of images) {
|
|
276
|
+
if (img.w > maxW)
|
|
277
|
+
maxW = img.w;
|
|
278
|
+
if (img.h > maxH)
|
|
279
|
+
maxH = img.h;
|
|
280
|
+
}
|
|
281
|
+
// Resize texture array if needed
|
|
282
|
+
if (maxW > this.texArrayWidth || maxH > this.texArrayHeight) {
|
|
283
|
+
this.createTexArray(maxW, maxH);
|
|
284
|
+
this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, this.texArray);
|
|
239
285
|
}
|
|
240
286
|
// Render each image
|
|
241
|
-
for (let i = 0,
|
|
287
|
+
for (let i = 0, texLayer = 0; i < images.length; i++) {
|
|
242
288
|
const img = images[i];
|
|
243
289
|
// Skip images with invalid dimensions
|
|
244
290
|
if (img.w <= 0 || img.h <= 0)
|
|
245
291
|
continue;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
// Upload bitmap data
|
|
250
|
-
|
|
251
|
-
this.gl.
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
this.gl.texSubImage2D(this.gl.TEXTURE_2D, 0, 0, 0, img.w, // But we only copy w pixels per row
|
|
255
|
-
img.h, this.gl.RED, this.gl.UNSIGNED_BYTE, heap, img.bitmap);
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.R8, img.w, img.h, 0, this.gl.RED, this.gl.UNSIGNED_BYTE, heap, img.bitmap);
|
|
259
|
-
texInfo.width = img.w;
|
|
260
|
-
texInfo.height = img.h;
|
|
261
|
-
}
|
|
262
|
-
// Reset unpack parameters
|
|
292
|
+
// Use modulo to cycle through layers if we have more images than layers
|
|
293
|
+
const layer = texLayer % TEX_ARRAY_SIZE;
|
|
294
|
+
texLayer++;
|
|
295
|
+
// Upload bitmap data to texture array layer
|
|
296
|
+
this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, img.stride);
|
|
297
|
+
this.gl.texSubImage3D(this.gl.TEXTURE_2D_ARRAY, 0, 0, 0, layer, // x, y, z offset
|
|
298
|
+
img.w, img.h, 1, // depth (1 layer)
|
|
299
|
+
this.gl.RED, this.gl.UNSIGNED_BYTE, heap, img.bitmap);
|
|
263
300
|
this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, 0);
|
|
264
|
-
//
|
|
301
|
+
// Set uniforms
|
|
265
302
|
this.gl.uniform4f(this.u_destRect, img.dst_x, img.dst_y, img.w, img.h);
|
|
303
|
+
this.gl.uniform1f(this.u_texLayer, layer);
|
|
266
304
|
// color (RGBA from 0xRRGGBBAA)
|
|
267
305
|
this.gl.uniform4f(this.u_color, ((img.color >>> 24) & 0xFF) / 255, ((img.color >>> 16) & 0xFF) / 255, ((img.color >>> 8) & 0xFF) / 255, (img.color & 0xFF) / 255);
|
|
268
306
|
// 6 vertices for quad
|
|
@@ -271,10 +309,10 @@ export class WebGL2Renderer {
|
|
|
271
309
|
}
|
|
272
310
|
destroy() {
|
|
273
311
|
if (this.gl) {
|
|
274
|
-
|
|
275
|
-
this.gl.deleteTexture(
|
|
312
|
+
if (this.texArray) {
|
|
313
|
+
this.gl.deleteTexture(this.texArray);
|
|
314
|
+
this.texArray = null;
|
|
276
315
|
}
|
|
277
|
-
this.textures = [];
|
|
278
316
|
if (this.vao) {
|
|
279
317
|
this.gl.deleteVertexArray(this.vao);
|
|
280
318
|
this.vao = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl-renderer.js","sourceRoot":"","sources":["../../src/worker/webgl-renderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"webgl-renderer.js","sourceRoot":"","sources":["../../src/worker/webgl-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgpu-renderer.js","sourceRoot":"","sources":["../../src/worker/webgpu-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"webgpu-renderer.js","sourceRoot":"","sources":["../../src/worker/webgpu-renderer.ts"],"names":[],"mappings":"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"}
|
package/dist/worker/worker.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { finalizer } from 'abslink';
|
|
2
2
|
import { WebGL2Renderer } from './webgl-renderer';
|
|
3
|
-
import { WebGPURenderer } from './webgpu-renderer';
|
|
4
3
|
import type { ASSEvent, ASSStyle } from '../jassub';
|
|
5
4
|
import type { JASSUB } from '../wasm/types.js';
|
|
6
5
|
interface opts {
|
|
@@ -23,7 +22,7 @@ export declare class ASSRenderer {
|
|
|
23
22
|
_subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC' | null;
|
|
24
23
|
_videoColorSpace?: 'BT709' | 'BT601';
|
|
25
24
|
_malloc: (size: number) => number;
|
|
26
|
-
_gpurender
|
|
25
|
+
_gpurender: WebGL2Renderer;
|
|
27
26
|
debug: boolean;
|
|
28
27
|
useLocalFonts: boolean;
|
|
29
28
|
_availableFonts: Record<string, Uint8Array | string>;
|
package/dist/worker/worker.js
CHANGED
|
@@ -4,14 +4,13 @@ import { expose } from 'abslink/w3c';
|
|
|
4
4
|
import WASM from '../wasm/jassub-worker.js';
|
|
5
5
|
import { libassYCbCrMap, read_, readAsync, _applyKeys } from './util';
|
|
6
6
|
import { WebGL2Renderer } from './webgl-renderer';
|
|
7
|
-
import { WebGPURenderer } from './webgpu-renderer';
|
|
8
7
|
export class ASSRenderer {
|
|
9
8
|
_offCanvas;
|
|
10
9
|
_wasm;
|
|
11
10
|
_subtitleColorSpace;
|
|
12
11
|
_videoColorSpace;
|
|
13
12
|
_malloc;
|
|
14
|
-
_gpurender;
|
|
13
|
+
_gpurender = new WebGL2Renderer();
|
|
15
14
|
debug = false;
|
|
16
15
|
useLocalFonts = false;
|
|
17
16
|
_availableFonts = {};
|
|
@@ -30,16 +29,16 @@ export class ASSRenderer {
|
|
|
30
29
|
// TODO: abslink doesnt support transferables yet
|
|
31
30
|
const handleMessage = async ({ data }) => {
|
|
32
31
|
if (data.name === 'offscreenCanvas') {
|
|
33
|
-
await this._ready
|
|
32
|
+
// await this._ready // needed for webGPU
|
|
34
33
|
this._offCanvas = data.ctrl;
|
|
35
34
|
this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height);
|
|
36
35
|
removeEventListener('message', handleMessage);
|
|
37
36
|
}
|
|
38
37
|
};
|
|
39
38
|
addEventListener('message', handleMessage);
|
|
40
|
-
const devicePromise = navigator.gpu?.requestAdapter({
|
|
41
|
-
|
|
42
|
-
}).then(adapter => adapter?.requestDevice())
|
|
39
|
+
// const devicePromise = navigator.gpu?.requestAdapter({
|
|
40
|
+
// powerPreference: 'high-performance'
|
|
41
|
+
// }).then(adapter => adapter?.requestDevice())
|
|
43
42
|
this._ready = WASM({ __url: data.wasmUrl }).then(async (Module) => {
|
|
44
43
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
45
44
|
this._malloc = Module._malloc;
|
|
@@ -57,10 +56,9 @@ export class ASSRenderer {
|
|
|
57
56
|
if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
|
|
58
57
|
this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0);
|
|
59
58
|
}
|
|
60
|
-
const device = await devicePromise
|
|
61
|
-
this._gpurender = device ? new WebGPURenderer(device) : new WebGL2Renderer()
|
|
62
|
-
if (this._offCanvas)
|
|
63
|
-
this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height);
|
|
59
|
+
// const device = await devicePromise
|
|
60
|
+
// this._gpurender = device ? new WebGPURenderer(device) : new WebGL2Renderer()
|
|
61
|
+
// if (this._offCanvas) this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height)
|
|
64
62
|
this._checkColorSpace();
|
|
65
63
|
});
|
|
66
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,IAAI,MAAM,0BAA0B,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,6 +6,9 @@ declare const self: DedicatedWorkerGlobalScope &
|
|
|
6
6
|
WASMMEMORY: WebAssembly.Memory
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
// @ts-expect-error new experimental API
|
|
10
|
+
const SUPPORTS_GROWTH = !!WebAssembly.Memory.prototype.toResizableBuffer
|
|
11
|
+
|
|
9
12
|
const IDENTITY_MATRIX = new Float32Array([
|
|
10
13
|
1, 0, 0,
|
|
11
14
|
0, 1, 0,
|
|
@@ -59,78 +62,96 @@ export const colorMatrixConversionMap = {
|
|
|
59
62
|
|
|
60
63
|
export type ColorSpace = keyof typeof colorMatrixConversionMap
|
|
61
64
|
|
|
62
|
-
// GLSL Vertex Shader
|
|
63
|
-
const VERTEX_SHADER =
|
|
65
|
+
// GLSL ES 3.0 Vertex Shader
|
|
66
|
+
const VERTEX_SHADER = /* glsl */`#version 300 es
|
|
64
67
|
precision highp float;
|
|
65
68
|
|
|
66
|
-
uniform vec2 u_resolution;
|
|
67
|
-
uniform vec4 u_destRect; // x, y, w, h
|
|
68
|
-
uniform vec4 u_color; // RGBA
|
|
69
|
-
|
|
70
|
-
out vec2 v_texCoord;
|
|
71
|
-
out vec4 v_color;
|
|
72
|
-
|
|
73
|
-
// Quad vertices (0,0 to 1,1)
|
|
74
69
|
const vec2 QUAD_POSITIONS[6] = vec2[6](
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
70
|
+
vec2(0.0, 0.0),
|
|
71
|
+
vec2(1.0, 0.0),
|
|
72
|
+
vec2(0.0, 1.0),
|
|
73
|
+
vec2(1.0, 0.0),
|
|
74
|
+
vec2(1.0, 1.0),
|
|
75
|
+
vec2(0.0, 1.0)
|
|
81
76
|
);
|
|
82
77
|
|
|
78
|
+
uniform vec2 u_resolution;
|
|
79
|
+
uniform vec4 u_destRect; // x, y, w, h
|
|
80
|
+
uniform vec4 u_color; // r, g, b, a
|
|
81
|
+
uniform float u_texLayer;
|
|
82
|
+
|
|
83
|
+
flat out vec2 v_destXY;
|
|
84
|
+
flat out vec4 v_color;
|
|
85
|
+
flat out vec2 v_texSize;
|
|
86
|
+
flat out float v_texLayer;
|
|
87
|
+
|
|
83
88
|
void main() {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
v_texCoord = quadPos;
|
|
95
|
-
v_color = u_color;
|
|
89
|
+
vec2 quadPos = QUAD_POSITIONS[gl_VertexID];
|
|
90
|
+
vec2 pixelPos = u_destRect.xy + quadPos * u_destRect.zw;
|
|
91
|
+
vec2 clipPos = (pixelPos / u_resolution) * 2.0 - 1.0;
|
|
92
|
+
clipPos.y = -clipPos.y;
|
|
93
|
+
|
|
94
|
+
gl_Position = vec4(clipPos, 0.0, 1.0);
|
|
95
|
+
v_destXY = u_destRect.xy;
|
|
96
|
+
v_color = u_color;
|
|
97
|
+
v_texSize = u_destRect.zw;
|
|
98
|
+
v_texLayer = u_texLayer;
|
|
96
99
|
}
|
|
97
100
|
`
|
|
98
101
|
|
|
99
|
-
// GLSL Fragment Shader
|
|
100
|
-
const FRAGMENT_SHADER =
|
|
102
|
+
// GLSL ES 3.0 Fragment Shader - use texelFetch for pixel-perfect sampling
|
|
103
|
+
const FRAGMENT_SHADER = /* glsl */`#version 300 es
|
|
101
104
|
precision highp float;
|
|
105
|
+
precision highp sampler2DArray;
|
|
102
106
|
|
|
103
|
-
uniform
|
|
107
|
+
uniform sampler2DArray u_texArray;
|
|
104
108
|
uniform mat3 u_colorMatrix;
|
|
109
|
+
uniform vec2 u_resolution;
|
|
105
110
|
|
|
106
|
-
in vec2
|
|
107
|
-
in vec4 v_color;
|
|
111
|
+
flat in vec2 v_destXY;
|
|
112
|
+
flat in vec4 v_color;
|
|
113
|
+
flat in vec2 v_texSize;
|
|
114
|
+
flat in float v_texLayer;
|
|
108
115
|
|
|
109
116
|
out vec4 fragColor;
|
|
110
117
|
|
|
111
118
|
void main() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
// Flip Y: WebGL's gl_FragCoord.y is 0 at bottom, but destXY.y is from top
|
|
120
|
+
vec2 fragPos = vec2(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y);
|
|
121
|
+
|
|
122
|
+
// Calculate local position within the quad (screen coords)
|
|
123
|
+
vec2 localPos = fragPos - v_destXY;
|
|
124
|
+
|
|
125
|
+
// Convert to integer texel coordinates for texelFetch
|
|
126
|
+
ivec2 texCoord = ivec2(floor(localPos));
|
|
127
|
+
|
|
128
|
+
// Bounds check (prevents out-of-bounds access)
|
|
129
|
+
ivec2 texSizeI = ivec2(v_texSize);
|
|
130
|
+
if (texCoord.x < 0 || texCoord.y < 0 || texCoord.x >= texSizeI.x || texCoord.y >= texSizeI.y) {
|
|
131
|
+
fragColor = vec4(0.0);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// texelFetch: integer coords, no interpolation, no precision issues
|
|
136
|
+
float mask = texelFetch(u_texArray, ivec3(texCoord, int(v_texLayer)), 0).r;
|
|
137
|
+
|
|
138
|
+
// Apply color matrix conversion (identity if no conversion needed)
|
|
139
|
+
vec3 correctedColor = u_colorMatrix * v_color.rgb;
|
|
140
|
+
|
|
141
|
+
// libass color alpha: 0 = opaque, 255 = transparent (inverted)
|
|
142
|
+
float colorAlpha = 1.0 - v_color.a;
|
|
143
|
+
|
|
144
|
+
// Final alpha = colorAlpha * mask
|
|
145
|
+
float a = colorAlpha * mask;
|
|
146
|
+
|
|
147
|
+
// Premultiplied alpha output
|
|
148
|
+
fragColor = vec4(correctedColor * a, a);
|
|
126
149
|
}
|
|
127
150
|
`
|
|
128
151
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
height: number
|
|
133
|
-
}
|
|
152
|
+
// Texture array configuration
|
|
153
|
+
const TEX_ARRAY_SIZE = 64 // Fixed layer count
|
|
154
|
+
const TEX_INITIAL_SIZE = 256 // Initial width/height
|
|
134
155
|
|
|
135
156
|
export class WebGL2Renderer {
|
|
136
157
|
gl: WebGL2RenderingContext | null = null
|
|
@@ -141,11 +162,14 @@ export class WebGL2Renderer {
|
|
|
141
162
|
u_resolution: WebGLUniformLocation | null = null
|
|
142
163
|
u_destRect: WebGLUniformLocation | null = null
|
|
143
164
|
u_color: WebGLUniformLocation | null = null
|
|
144
|
-
|
|
165
|
+
u_texArray: WebGLUniformLocation | null = null
|
|
145
166
|
u_colorMatrix: WebGLUniformLocation | null = null
|
|
167
|
+
u_texLayer: WebGLUniformLocation | null = null
|
|
146
168
|
|
|
147
|
-
//
|
|
148
|
-
|
|
169
|
+
// Single texture array instead of individual textures
|
|
170
|
+
texArray: WebGLTexture | null = null
|
|
171
|
+
texArrayWidth = 0
|
|
172
|
+
texArrayHeight = 0
|
|
149
173
|
|
|
150
174
|
colorMatrix: Float32Array = IDENTITY_MATRIX
|
|
151
175
|
|
|
@@ -165,7 +189,8 @@ export class WebGL2Renderer {
|
|
|
165
189
|
premultipliedAlpha: true,
|
|
166
190
|
antialias: false,
|
|
167
191
|
depth: false,
|
|
168
|
-
stencil: false
|
|
192
|
+
stencil: false,
|
|
193
|
+
desynchronized: true
|
|
169
194
|
})
|
|
170
195
|
|
|
171
196
|
if (!this.gl) {
|
|
@@ -191,12 +216,16 @@ export class WebGL2Renderer {
|
|
|
191
216
|
throw new Error('Failed to link program: ' + info)
|
|
192
217
|
}
|
|
193
218
|
|
|
219
|
+
this.gl.deleteShader(vertexShader)
|
|
220
|
+
this.gl.deleteShader(fragmentShader)
|
|
221
|
+
|
|
194
222
|
// Get uniform locations
|
|
195
223
|
this.u_resolution = this.gl.getUniformLocation(this.program, 'u_resolution')
|
|
196
224
|
this.u_destRect = this.gl.getUniformLocation(this.program, 'u_destRect')
|
|
197
225
|
this.u_color = this.gl.getUniformLocation(this.program, 'u_color')
|
|
198
|
-
this.
|
|
226
|
+
this.u_texArray = this.gl.getUniformLocation(this.program, 'u_texArray')
|
|
199
227
|
this.u_colorMatrix = this.gl.getUniformLocation(this.program, 'u_colorMatrix')
|
|
228
|
+
this.u_texLayer = this.gl.getUniformLocation(this.program, 'u_texLayer')
|
|
200
229
|
|
|
201
230
|
// Create a VAO (required for WebGL2)
|
|
202
231
|
this.vao = this.gl.createVertexArray()
|
|
@@ -210,7 +239,7 @@ export class WebGL2Renderer {
|
|
|
210
239
|
this.gl.useProgram(this.program)
|
|
211
240
|
|
|
212
241
|
// Set texture unit
|
|
213
|
-
this.gl.uniform1i(this.
|
|
242
|
+
this.gl.uniform1i(this.u_texArray, 0)
|
|
214
243
|
|
|
215
244
|
// Set initial color matrix
|
|
216
245
|
this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix)
|
|
@@ -219,6 +248,9 @@ export class WebGL2Renderer {
|
|
|
219
248
|
this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, 1)
|
|
220
249
|
this.gl.clearColor(0, 0, 0, 0)
|
|
221
250
|
this.gl.activeTexture(this.gl.TEXTURE0)
|
|
251
|
+
|
|
252
|
+
// Create initial texture array
|
|
253
|
+
this.createTexArray(TEX_INITIAL_SIZE, TEX_INITIAL_SIZE)
|
|
222
254
|
}
|
|
223
255
|
|
|
224
256
|
// Update viewport and resolution uniform
|
|
@@ -253,99 +285,96 @@ export class WebGL2Renderer {
|
|
|
253
285
|
}
|
|
254
286
|
}
|
|
255
287
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
288
|
+
createTexArray (width: number, height: number) {
|
|
289
|
+
if (this.texArray) {
|
|
290
|
+
this.gl!.deleteTexture(this.texArray)
|
|
291
|
+
}
|
|
260
292
|
|
|
261
|
-
|
|
262
|
-
this.gl!.
|
|
263
|
-
this.gl!.texParameteri(this.gl!.TEXTURE_2D, this.gl!.TEXTURE_MAG_FILTER, this.gl!.NEAREST)
|
|
264
|
-
this.gl!.texParameteri(this.gl!.TEXTURE_2D, this.gl!.TEXTURE_WRAP_S, this.gl!.CLAMP_TO_EDGE)
|
|
265
|
-
this.gl!.texParameteri(this.gl!.TEXTURE_2D, this.gl!.TEXTURE_WRAP_T, this.gl!.CLAMP_TO_EDGE)
|
|
293
|
+
this.texArray = this.gl!.createTexture()
|
|
294
|
+
this.gl!.bindTexture(this.gl!.TEXTURE_2D_ARRAY, this.texArray)
|
|
266
295
|
|
|
267
|
-
|
|
268
|
-
|
|
296
|
+
// Allocate storage for texture array
|
|
297
|
+
this.gl!.texImage3D(
|
|
298
|
+
this.gl!.TEXTURE_2D_ARRAY,
|
|
299
|
+
0,
|
|
300
|
+
this.gl!.R8,
|
|
269
301
|
width,
|
|
270
|
-
height
|
|
271
|
-
|
|
302
|
+
height,
|
|
303
|
+
TEX_ARRAY_SIZE,
|
|
304
|
+
0,
|
|
305
|
+
this.gl!.RED,
|
|
306
|
+
this.gl!.UNSIGNED_BYTE,
|
|
307
|
+
null
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
// Set texture parameters (no filtering needed for texelFetch, but set anyway)
|
|
311
|
+
this.gl!.texParameteri(this.gl!.TEXTURE_2D_ARRAY, this.gl!.TEXTURE_MIN_FILTER, this.gl!.NEAREST)
|
|
312
|
+
this.gl!.texParameteri(this.gl!.TEXTURE_2D_ARRAY, this.gl!.TEXTURE_MAG_FILTER, this.gl!.NEAREST)
|
|
313
|
+
this.gl!.texParameteri(this.gl!.TEXTURE_2D_ARRAY, this.gl!.TEXTURE_WRAP_S, this.gl!.CLAMP_TO_EDGE)
|
|
314
|
+
this.gl!.texParameteri(this.gl!.TEXTURE_2D_ARRAY, this.gl!.TEXTURE_WRAP_T, this.gl!.CLAMP_TO_EDGE)
|
|
315
|
+
|
|
316
|
+
this.texArrayWidth = width
|
|
317
|
+
this.texArrayHeight = height
|
|
272
318
|
}
|
|
273
319
|
|
|
274
320
|
render (images: ASSImage[], heap: Uint8Array): void {
|
|
275
|
-
if (!this.gl || !this.program || !this.vao) return
|
|
321
|
+
if (!this.gl || !this.program || !this.vao || !this.texArray) return
|
|
276
322
|
|
|
277
323
|
// Hack: work around shared memory issues, webGL doesnt support shared memory, so there are race conditions when growing memory
|
|
278
|
-
if (self.HEAPU8RAW.buffer !== self.WASMMEMORY.buffer) {
|
|
324
|
+
if ((self.HEAPU8RAW.buffer !== self.WASMMEMORY.buffer) || SUPPORTS_GROWTH) {
|
|
279
325
|
heap = self.HEAPU8RAW = new Uint8Array(self.WASMMEMORY.buffer)
|
|
280
326
|
}
|
|
281
327
|
|
|
282
328
|
// Clear canvas
|
|
283
329
|
this.gl.clear(this.gl.COLOR_BUFFER_BIT)
|
|
284
330
|
|
|
285
|
-
//
|
|
286
|
-
|
|
287
|
-
|
|
331
|
+
// Find max dimensions needed
|
|
332
|
+
let maxW = this.texArrayWidth
|
|
333
|
+
let maxH = this.texArrayHeight
|
|
334
|
+
for (const img of images) {
|
|
335
|
+
if (img.w > maxW) maxW = img.w
|
|
336
|
+
if (img.h > maxH) maxH = img.h
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// Resize texture array if needed
|
|
340
|
+
if (maxW > this.texArrayWidth || maxH > this.texArrayHeight) {
|
|
341
|
+
this.createTexArray(maxW, maxH)
|
|
342
|
+
this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, this.texArray)
|
|
288
343
|
}
|
|
289
344
|
|
|
290
345
|
// Render each image
|
|
291
|
-
for (let i = 0,
|
|
346
|
+
for (let i = 0, texLayer = 0; i < images.length; i++) {
|
|
292
347
|
const img = images[i]!
|
|
293
348
|
|
|
294
349
|
// Skip images with invalid dimensions
|
|
295
350
|
if (img.w <= 0 || img.h <= 0) continue
|
|
296
351
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
this.gl.bindTexture(this.gl.TEXTURE_2D, texInfo.texture)
|
|
301
|
-
|
|
302
|
-
// Upload bitmap data using bytesPerRow to handle stride
|
|
303
|
-
// Only need stride * (h-1) + w bytes per ASS spec
|
|
304
|
-
this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, img.stride) // Source rows are stride bytes apart
|
|
305
|
-
|
|
306
|
-
// Recreate texture if size changed (use actual w, not stride)
|
|
307
|
-
if (texInfo.width === img.w && texInfo.height === img.h) {
|
|
308
|
-
this.gl.texSubImage2D(
|
|
309
|
-
this.gl.TEXTURE_2D,
|
|
310
|
-
0,
|
|
311
|
-
0,
|
|
312
|
-
0,
|
|
313
|
-
img.w, // But we only copy w pixels per row
|
|
314
|
-
img.h,
|
|
315
|
-
this.gl.RED,
|
|
316
|
-
this.gl.UNSIGNED_BYTE,
|
|
317
|
-
heap,
|
|
318
|
-
img.bitmap
|
|
319
|
-
)
|
|
320
|
-
} else {
|
|
321
|
-
this.gl.texImage2D(
|
|
322
|
-
this.gl.TEXTURE_2D,
|
|
323
|
-
0,
|
|
324
|
-
this.gl.R8,
|
|
325
|
-
img.w,
|
|
326
|
-
img.h,
|
|
327
|
-
0,
|
|
328
|
-
this.gl.RED,
|
|
329
|
-
this.gl.UNSIGNED_BYTE,
|
|
330
|
-
heap,
|
|
331
|
-
img.bitmap
|
|
332
|
-
)
|
|
333
|
-
texInfo.width = img.w
|
|
334
|
-
texInfo.height = img.h
|
|
335
|
-
}
|
|
352
|
+
// Use modulo to cycle through layers if we have more images than layers
|
|
353
|
+
const layer = texLayer % TEX_ARRAY_SIZE
|
|
354
|
+
texLayer++
|
|
336
355
|
|
|
337
|
-
//
|
|
338
|
-
this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH,
|
|
356
|
+
// Upload bitmap data to texture array layer
|
|
357
|
+
this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, img.stride)
|
|
339
358
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
img.dst_y,
|
|
359
|
+
this.gl.texSubImage3D(
|
|
360
|
+
this.gl.TEXTURE_2D_ARRAY,
|
|
361
|
+
0,
|
|
362
|
+
0, 0, layer, // x, y, z offset
|
|
345
363
|
img.w,
|
|
346
|
-
img.h
|
|
364
|
+
img.h,
|
|
365
|
+
1, // depth (1 layer)
|
|
366
|
+
this.gl.RED,
|
|
367
|
+
this.gl.UNSIGNED_BYTE,
|
|
368
|
+
heap,
|
|
369
|
+
img.bitmap
|
|
347
370
|
)
|
|
348
371
|
|
|
372
|
+
this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, 0)
|
|
373
|
+
|
|
374
|
+
// Set uniforms
|
|
375
|
+
this.gl.uniform4f(this.u_destRect, img.dst_x, img.dst_y, img.w, img.h)
|
|
376
|
+
this.gl.uniform1f(this.u_texLayer, layer)
|
|
377
|
+
|
|
349
378
|
// color (RGBA from 0xRRGGBBAA)
|
|
350
379
|
this.gl.uniform4f(
|
|
351
380
|
this.u_color,
|
|
@@ -362,10 +391,10 @@ export class WebGL2Renderer {
|
|
|
362
391
|
|
|
363
392
|
destroy () {
|
|
364
393
|
if (this.gl) {
|
|
365
|
-
|
|
366
|
-
this.gl.deleteTexture(
|
|
394
|
+
if (this.texArray) {
|
|
395
|
+
this.gl.deleteTexture(this.texArray)
|
|
396
|
+
this.texArray = null
|
|
367
397
|
}
|
|
368
|
-
this.textures = []
|
|
369
398
|
|
|
370
399
|
if (this.vao) {
|
|
371
400
|
this.gl.deleteVertexArray(this.vao)
|
package/src/worker/worker.ts
CHANGED
|
@@ -6,7 +6,7 @@ import WASM from '../wasm/jassub-worker.js'
|
|
|
6
6
|
|
|
7
7
|
import { libassYCbCrMap, read_, readAsync, _applyKeys } from './util'
|
|
8
8
|
import { WebGL2Renderer } from './webgl-renderer'
|
|
9
|
-
import { WebGPURenderer } from './webgpu-renderer'
|
|
9
|
+
// import { WebGPURenderer } from './webgpu-renderer'
|
|
10
10
|
|
|
11
11
|
import type { ASSEvent, ASSImage, ASSStyle } from '../jassub'
|
|
12
12
|
import type { JASSUB, MainModule } from '../wasm/types.js'
|
|
@@ -38,7 +38,7 @@ export class ASSRenderer {
|
|
|
38
38
|
_subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC' | null
|
|
39
39
|
_videoColorSpace?: 'BT709' | 'BT601'
|
|
40
40
|
_malloc!: (size: number) => number
|
|
41
|
-
_gpurender
|
|
41
|
+
_gpurender = new WebGL2Renderer()
|
|
42
42
|
|
|
43
43
|
debug = false
|
|
44
44
|
useLocalFonts = false
|
|
@@ -62,17 +62,17 @@ export class ASSRenderer {
|
|
|
62
62
|
// TODO: abslink doesnt support transferables yet
|
|
63
63
|
const handleMessage = async ({ data }: MessageEvent) => {
|
|
64
64
|
if (data.name === 'offscreenCanvas') {
|
|
65
|
-
await this._ready
|
|
65
|
+
// await this._ready // needed for webGPU
|
|
66
66
|
this._offCanvas = data.ctrl
|
|
67
|
-
this._gpurender
|
|
67
|
+
this._gpurender.setCanvas(this._offCanvas!, this._offCanvas!.width, this._offCanvas!.height)
|
|
68
68
|
removeEventListener('message', handleMessage)
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
addEventListener('message', handleMessage)
|
|
72
72
|
|
|
73
|
-
const devicePromise = navigator.gpu?.requestAdapter({
|
|
74
|
-
|
|
75
|
-
}).then(adapter => adapter?.requestDevice())
|
|
73
|
+
// const devicePromise = navigator.gpu?.requestAdapter({
|
|
74
|
+
// powerPreference: 'high-performance'
|
|
75
|
+
// }).then(adapter => adapter?.requestDevice())
|
|
76
76
|
|
|
77
77
|
this._ready = (WASM({ __url: data.wasmUrl }) as Promise<MainModule>).then(async Module => {
|
|
78
78
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
@@ -96,9 +96,9 @@ export class ASSRenderer {
|
|
|
96
96
|
if (data.libassMemoryLimit > 0 || data.libassGlyphLimit > 0) {
|
|
97
97
|
this._wasm.setMemoryLimits(data.libassGlyphLimit || 0, data.libassMemoryLimit || 0)
|
|
98
98
|
}
|
|
99
|
-
const device = await devicePromise
|
|
100
|
-
this._gpurender = device ? new WebGPURenderer(device) : new WebGL2Renderer()
|
|
101
|
-
if (this._offCanvas) this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height)
|
|
99
|
+
// const device = await devicePromise
|
|
100
|
+
// this._gpurender = device ? new WebGPURenderer(device) : new WebGL2Renderer()
|
|
101
|
+
// if (this._offCanvas) this._gpurender.setCanvas(this._offCanvas, this._offCanvas.width, this._offCanvas.height)
|
|
102
102
|
this._checkColorSpace()
|
|
103
103
|
})
|
|
104
104
|
}
|
|
@@ -186,7 +186,7 @@ export class ASSRenderer {
|
|
|
186
186
|
|
|
187
187
|
_checkColorSpace () {
|
|
188
188
|
if (!this._subtitleColorSpace || !this._videoColorSpace) return
|
|
189
|
-
this._gpurender
|
|
189
|
+
this._gpurender.setColorMatrix(this._subtitleColorSpace, this._videoColorSpace)
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
_findAvailableFonts (font: string) {
|
|
@@ -246,7 +246,7 @@ export class ASSRenderer {
|
|
|
246
246
|
async [finalizer] () {
|
|
247
247
|
await this._ready
|
|
248
248
|
this._wasm.quitLibrary()
|
|
249
|
-
this._gpurender
|
|
249
|
+
this._gpurender.destroy()
|
|
250
250
|
// @ts-expect-error force GC
|
|
251
251
|
this._wasm = null
|
|
252
252
|
// @ts-expect-error force GC
|