jassub 2.5.2 → 2.5.3

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.
@@ -1,51 +0,0 @@
1
- import { type ASSImage } from './util.ts';
2
- export declare const colorMatrixConversionMap: {
3
- readonly BT601: {
4
- readonly BT709: Float32Array<ArrayBuffer>;
5
- readonly BT601: Float32Array<ArrayBuffer>;
6
- };
7
- readonly BT709: {
8
- readonly BT601: Float32Array<ArrayBuffer>;
9
- readonly BT709: Float32Array<ArrayBuffer>;
10
- };
11
- readonly FCC: {
12
- readonly BT709: Float32Array<ArrayBuffer>;
13
- readonly BT601: Float32Array<ArrayBuffer>;
14
- };
15
- readonly SMPTE240M: {
16
- readonly BT709: Float32Array<ArrayBuffer>;
17
- readonly BT601: Float32Array<ArrayBuffer>;
18
- };
19
- };
20
- export type ColorSpace = keyof typeof colorMatrixConversionMap;
21
- export declare class WebGL2Renderer {
22
- canvas: OffscreenCanvas | null;
23
- gl: WebGL2RenderingContext | null;
24
- program: WebGLProgram | null;
25
- vao: WebGLVertexArrayObject | null;
26
- u_resolution: WebGLUniformLocation | null;
27
- u_texArray: WebGLUniformLocation | null;
28
- u_colorMatrix: WebGLUniformLocation | null;
29
- instanceDestRectBuffer: WebGLBuffer | null;
30
- instanceColorBuffer: WebGLBuffer | null;
31
- instanceTexLayerBuffer: WebGLBuffer | null;
32
- instanceDestRectData: Float32Array;
33
- instanceColorData: Float32Array;
34
- instanceTexLayerData: Float32Array;
35
- texArray: WebGLTexture | null;
36
- texArrayWidth: number;
37
- texArrayHeight: number;
38
- colorMatrix: Float32Array;
39
- constructor();
40
- _scheduledResize?: {
41
- width: number;
42
- height: number;
43
- };
44
- resizeCanvas(width: number, height: number): void;
45
- setCanvas(canvas: OffscreenCanvas): void;
46
- createShader(type: number, source: string): WebGLShader | null;
47
- setColorMatrix(subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC', videoColorSpace?: 'BT601' | 'BT709'): void;
48
- createTexArray(width: number, height: number): void;
49
- render(images: ASSImage[], heap: Uint8Array): void;
50
- destroy(): void;
51
- }
@@ -1,417 +0,0 @@
1
- import { IS_FIREFOX } from "./util.js";
2
- const THREAD_COUNT = !IS_FIREFOX && self.crossOriginIsolated ? Math.min(Math.max(1, navigator.hardwareConcurrency - 2), 8) : 1;
3
- // @ts-expect-error new experimental API
4
- const SUPPORTS_GROWTH = !!WebAssembly.Memory.prototype.toResizableBuffer;
5
- // HACK: 3 memory hacks to support here:
6
- // 1. Chrome WASM Growable memory which can use a reference to the buffer to fix visual artifacts, which happen both with multithreading or without [fastest]
7
- // 2. Chrome WASM non-growable, but mult-threaded only memory which needs to re-create the HEAPU8 on growth because of race conditions [medium]
8
- // 3. Firefox non-growable memory which needs a copy of the data into a non-resizable buffer and can't use a reference [fastest single threaded, but only on Firefox, on Chrome this is slowest]
9
- const SHOULD_REFERENCE_MEMORY = !IS_FIREFOX && (SUPPORTS_GROWTH || THREAD_COUNT > 1);
10
- const IDENTITY_MATRIX = new Float32Array([
11
- 1, 0, 0,
12
- 0, 1, 0,
13
- 0, 0, 1
14
- ]);
15
- // Color matrix conversion map - mat3x3 for WebGL2
16
- // Each matrix converts FROM the key color space TO the nested key color space
17
- export const colorMatrixConversionMap = {
18
- BT601: {
19
- BT709: new Float32Array([
20
- 1.0863, 0.0965, -0.01411,
21
- -0.0723, 0.8451, -0.0277,
22
- -0.0141, 0.0584, 1.0418
23
- ]),
24
- BT601: IDENTITY_MATRIX
25
- },
26
- BT709: {
27
- BT601: new Float32Array([
28
- 0.9137, 0.0784, 0.0079,
29
- -0.1049, 1.1722, -0.0671,
30
- 0.0096, 0.0322, 0.9582
31
- ]),
32
- BT709: IDENTITY_MATRIX
33
- },
34
- FCC: {
35
- BT709: new Float32Array([
36
- 1.0873, -0.0736, -0.0137,
37
- 0.0974, 0.8494, 0.0531,
38
- -0.0127, -0.0251, 1.0378
39
- ]),
40
- BT601: new Float32Array([
41
- 1.001, -0.0008, -0.0002,
42
- 0.0009, 1.005, -0.006,
43
- 0.0013, 0.0027, 0.996
44
- ])
45
- },
46
- SMPTE240M: {
47
- BT709: new Float32Array([
48
- 0.9993, 0.0006, 0.0001,
49
- -0.0004, 0.9812, 0.0192,
50
- -0.0034, -0.0114, 1.0148
51
- ]),
52
- BT601: new Float32Array([
53
- 0.913, 0.0774, 0.0096,
54
- -0.1051, 1.1508, -0.0456,
55
- 0.0063, 0.0207, 0.973
56
- ])
57
- }
58
- };
59
- // GLSL ES 3.0 Vertex Shader with Instancing
60
- const VERTEX_SHADER = /* glsl */ `#version 300 es
61
- precision mediump float;
62
-
63
- const vec2 QUAD_POSITIONS[6] = vec2[6](
64
- vec2(0.0, 0.0),
65
- vec2(1.0, 0.0),
66
- vec2(0.0, 1.0),
67
- vec2(1.0, 0.0),
68
- vec2(1.0, 1.0),
69
- vec2(0.0, 1.0)
70
- );
71
-
72
- uniform vec2 u_resolution;
73
-
74
- // Instance attributes
75
- in vec4 a_destRect; // x, y, w, h
76
- in vec4 a_color; // r, g, b, a
77
- in float a_texLayer;
78
-
79
- flat out vec2 v_destXY;
80
- flat out vec4 v_color;
81
- flat out vec2 v_texSize;
82
- flat out float v_texLayer;
83
-
84
- void main() {
85
- vec2 quadPos = QUAD_POSITIONS[gl_VertexID];
86
- vec2 pixelPos = a_destRect.xy + quadPos * a_destRect.zw;
87
- vec2 clipPos = (pixelPos / u_resolution) * 2.0 - 1.0;
88
- clipPos.y = -clipPos.y;
89
-
90
- gl_Position = vec4(clipPos, 0.0, 1.0);
91
- v_destXY = a_destRect.xy;
92
- v_color = a_color;
93
- v_texSize = a_destRect.zw;
94
- v_texLayer = a_texLayer;
95
- }
96
- `;
97
- // GLSL ES 3.0 Fragment Shader - use texelFetch for pixel-perfect sampling
98
- const FRAGMENT_SHADER = /* glsl */ `#version 300 es
99
- precision mediump float;
100
- precision mediump sampler2DArray;
101
-
102
- uniform sampler2DArray u_texArray;
103
- uniform mat3 u_colorMatrix;
104
- uniform vec2 u_resolution;
105
-
106
- flat in vec2 v_destXY;
107
- flat in vec4 v_color;
108
- flat in vec2 v_texSize;
109
- flat in float v_texLayer;
110
-
111
- out vec4 fragColor;
112
-
113
- void main() {
114
- // Flip Y: WebGL's gl_FragCoord.y is 0 at bottom, but destXY.y is from top
115
- vec2 fragPos = vec2(gl_FragCoord.x, u_resolution.y - gl_FragCoord.y);
116
-
117
- // Calculate local position within the quad (screen coords)
118
- vec2 localPos = fragPos - v_destXY;
119
-
120
- // Convert to integer texel coordinates for texelFetch
121
- ivec2 texCoord = ivec2(floor(localPos));
122
-
123
- // Bounds check (prevents out-of-bounds access)
124
- ivec2 texSizeI = ivec2(v_texSize);
125
- if (texCoord.x < 0 || texCoord.y < 0 || texCoord.x >= texSizeI.x || texCoord.y >= texSizeI.y) {
126
- discard;
127
- }
128
-
129
- // texelFetch: integer coords, no interpolation, no precision issues
130
- float mask = texelFetch(u_texArray, ivec3(texCoord, int(v_texLayer)), 0).r;
131
-
132
- // Apply color matrix conversion (identity if no conversion needed)
133
- vec3 correctedColor = u_colorMatrix * v_color.rgb;
134
-
135
- // libass color alpha: 0 = opaque, 255 = transparent (inverted)
136
- float colorAlpha = 1.0 - v_color.a;
137
-
138
- // Final alpha = colorAlpha * mask
139
- float a = colorAlpha * mask;
140
-
141
- // Premultiplied alpha output
142
- fragColor = vec4(correctedColor * a, a);
143
- }
144
- `;
145
- // Texture array configuration
146
- const TEX_ARRAY_SIZE = 64; // Fixed layer count
147
- const TEX_INITIAL_SIZE = 256; // Initial width/height
148
- const MAX_INSTANCES = 256; // Maximum instances per draw call
149
- export class WebGL2Renderer {
150
- canvas = null;
151
- gl = null;
152
- program = null;
153
- vao = null;
154
- // Uniform locations
155
- u_resolution = null;
156
- u_texArray = null;
157
- u_colorMatrix = null;
158
- // Instance attribute buffers
159
- instanceDestRectBuffer = null;
160
- instanceColorBuffer = null;
161
- instanceTexLayerBuffer = null;
162
- // Instance data arrays
163
- instanceDestRectData;
164
- instanceColorData;
165
- instanceTexLayerData;
166
- texArray = null;
167
- texArrayWidth = 0;
168
- texArrayHeight = 0;
169
- colorMatrix = IDENTITY_MATRIX;
170
- constructor() {
171
- this.instanceDestRectData = new Float32Array(MAX_INSTANCES * 4);
172
- this.instanceColorData = new Float32Array(MAX_INSTANCES * 4);
173
- this.instanceTexLayerData = new Float32Array(MAX_INSTANCES);
174
- }
175
- _scheduledResize;
176
- resizeCanvas(width, height) {
177
- // WebGL2 doesn't allow 0-sized canvases
178
- if (width <= 0 || height <= 0)
179
- return;
180
- this._scheduledResize = { width, height };
181
- }
182
- setCanvas(canvas) {
183
- this.canvas = canvas;
184
- this.gl = canvas.getContext('webgl2', {
185
- alpha: true,
186
- premultipliedAlpha: true,
187
- antialias: false,
188
- depth: false,
189
- preserveDrawingBuffer: false,
190
- stencil: false,
191
- desynchronized: true,
192
- powerPreference: 'high-performance'
193
- });
194
- if (!this.gl) {
195
- throw new Error('Could not get WebGL2 context');
196
- }
197
- // Create shaders
198
- const vertexShader = this.createShader(this.gl.VERTEX_SHADER, VERTEX_SHADER);
199
- const fragmentShader = this.createShader(this.gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
200
- if (!vertexShader || !fragmentShader) {
201
- throw new Error('Failed to create shaders');
202
- }
203
- // Create program
204
- this.program = this.gl.createProgram();
205
- this.gl.attachShader(this.program, vertexShader);
206
- this.gl.attachShader(this.program, fragmentShader);
207
- this.gl.linkProgram(this.program);
208
- if (!this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS)) {
209
- const info = this.gl.getProgramInfoLog(this.program);
210
- throw new Error('Failed to link program: ' + info);
211
- }
212
- this.gl.deleteShader(vertexShader);
213
- this.gl.deleteShader(fragmentShader);
214
- // Get uniform locations
215
- this.u_resolution = this.gl.getUniformLocation(this.program, 'u_resolution');
216
- this.u_texArray = this.gl.getUniformLocation(this.program, 'u_texArray');
217
- this.u_colorMatrix = this.gl.getUniformLocation(this.program, 'u_colorMatrix');
218
- // Create instance attribute buffers
219
- this.instanceDestRectBuffer = this.gl.createBuffer();
220
- this.instanceColorBuffer = this.gl.createBuffer();
221
- this.instanceTexLayerBuffer = this.gl.createBuffer();
222
- // Create a VAO (required for WebGL2)
223
- this.vao = this.gl.createVertexArray();
224
- this.gl.bindVertexArray(this.vao);
225
- // Setup instance attributes
226
- const destRectLoc = this.gl.getAttribLocation(this.program, 'a_destRect');
227
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceDestRectBuffer);
228
- this.gl.enableVertexAttribArray(destRectLoc);
229
- this.gl.vertexAttribPointer(destRectLoc, 4, this.gl.FLOAT, false, 0, 0);
230
- this.gl.vertexAttribDivisor(destRectLoc, 1);
231
- const colorLoc = this.gl.getAttribLocation(this.program, 'a_color');
232
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceColorBuffer);
233
- this.gl.enableVertexAttribArray(colorLoc);
234
- this.gl.vertexAttribPointer(colorLoc, 4, this.gl.FLOAT, false, 0, 0);
235
- this.gl.vertexAttribDivisor(colorLoc, 1);
236
- const texLayerLoc = this.gl.getAttribLocation(this.program, 'a_texLayer');
237
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceTexLayerBuffer);
238
- this.gl.enableVertexAttribArray(texLayerLoc);
239
- this.gl.vertexAttribPointer(texLayerLoc, 1, this.gl.FLOAT, false, 0, 0);
240
- this.gl.vertexAttribDivisor(texLayerLoc, 1);
241
- // Set up blending for premultiplied alpha
242
- this.gl.enable(this.gl.BLEND);
243
- this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
244
- // Use the program
245
- this.gl.useProgram(this.program);
246
- // Set texture unit
247
- this.gl.uniform1i(this.u_texArray, 0);
248
- // Set initial color matrix
249
- this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix);
250
- // Set one-time GL state
251
- this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT, 1);
252
- this.gl.clearColor(0, 0, 0, 0);
253
- this.gl.activeTexture(this.gl.TEXTURE0);
254
- // Create initial texture array
255
- this.createTexArray(TEX_INITIAL_SIZE, TEX_INITIAL_SIZE);
256
- }
257
- createShader(type, source) {
258
- const shader = this.gl.createShader(type);
259
- this.gl.shaderSource(shader, source);
260
- this.gl.compileShader(shader);
261
- if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {
262
- const info = this.gl.getShaderInfoLog(shader);
263
- console.log(info);
264
- this.gl.deleteShader(shader);
265
- return null;
266
- }
267
- return shader;
268
- }
269
- // Set the color matrix for color space conversion.
270
- // Pass null or undefined to use identity (no conversion).
271
- setColorMatrix(subtitleColorSpace, videoColorSpace) {
272
- this.colorMatrix = (subtitleColorSpace && videoColorSpace && colorMatrixConversionMap[subtitleColorSpace]?.[videoColorSpace]) ?? IDENTITY_MATRIX;
273
- if (this.gl && this.u_colorMatrix && this.program) {
274
- this.gl.useProgram(this.program);
275
- this.gl.uniformMatrix3fv(this.u_colorMatrix, false, this.colorMatrix);
276
- }
277
- }
278
- createTexArray(width, height) {
279
- if (this.texArray) {
280
- this.gl.deleteTexture(this.texArray);
281
- }
282
- this.texArray = this.gl.createTexture();
283
- this.gl.bindTexture(this.gl.TEXTURE_2D_ARRAY, this.texArray);
284
- // Allocate storage for texture array
285
- 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 // Firefox cries about uninitialized data, but is slower with zero initialized data...
286
- );
287
- // Set texture parameters (no filtering needed for texelFetch, but set anyway)
288
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_MIN_FILTER, this.gl.NEAREST);
289
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_MAG_FILTER, this.gl.NEAREST);
290
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);
291
- this.gl.texParameteri(this.gl.TEXTURE_2D_ARRAY, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);
292
- this.texArrayWidth = width;
293
- this.texArrayHeight = height;
294
- }
295
- render(images, heap) {
296
- if (!this.gl || !this.program || !this.vao || !this.texArray)
297
- return;
298
- // HACK 1 and 2 [see above for explanation]
299
- if ((self.HEAPU8RAW.buffer !== self.WASMMEMORY.buffer) || SHOULD_REFERENCE_MEMORY) {
300
- heap = self.HEAPU8RAW = new Uint8Array(self.WASMMEMORY.buffer);
301
- }
302
- // we scheduled a resize because changing the canvas size clears it, and we don't want it to flicker
303
- // so we do it here, right before rendering
304
- if (this._scheduledResize) {
305
- const { width, height } = this._scheduledResize;
306
- this._scheduledResize = undefined;
307
- this.canvas.width = width;
308
- this.canvas.height = height;
309
- // Update viewport and resolution uniform
310
- this.gl.viewport(0, 0, width, height);
311
- this.gl.uniform2f(this.u_resolution, width, height);
312
- }
313
- else {
314
- // Clear canvas
315
- this.gl.clear(this.gl.COLOR_BUFFER_BIT);
316
- }
317
- // Find max dimensions needed and filter valid images
318
- let maxW = this.texArrayWidth;
319
- let maxH = this.texArrayHeight;
320
- const validImages = [];
321
- for (const img of images) {
322
- if (img.w <= 0 || img.h <= 0)
323
- continue;
324
- validImages.push(img);
325
- if (img.w > maxW)
326
- maxW = img.w;
327
- if (img.h > maxH)
328
- maxH = img.h;
329
- }
330
- if (validImages.length === 0)
331
- return;
332
- // Resize texture array if needed
333
- if (maxW > this.texArrayWidth || maxH > this.texArrayHeight) {
334
- this.createTexArray(maxW, maxH);
335
- }
336
- // Process images in chunks that fit within texture array size
337
- const batchSize = Math.min(TEX_ARRAY_SIZE, MAX_INSTANCES);
338
- for (let batchStart = 0; batchStart < validImages.length; batchStart += batchSize) {
339
- const batchEnd = Math.min(batchStart + batchSize, validImages.length);
340
- let instanceCount = 0;
341
- // Upload textures for this batch
342
- for (let i = batchStart; i < batchEnd; i++) {
343
- const img = validImages[i];
344
- const layer = instanceCount;
345
- // Upload bitmap data to texture array layer
346
- this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, img.stride);
347
- if (IS_FIREFOX) {
348
- // HACK 3 [see above for explanation]
349
- const sourceView = new Uint8Array(heap.buffer, img.bitmap, img.stride * img.h);
350
- const bitmapData = new Uint8Array(sourceView);
351
- this.gl.texSubImage3D(this.gl.TEXTURE_2D_ARRAY, 0, 0, 0, layer, // x, y, z offset
352
- img.w, img.h, 1, // depth (1 layer)
353
- this.gl.RED, this.gl.UNSIGNED_BYTE, bitmapData);
354
- }
355
- else {
356
- this.gl.texSubImage3D(this.gl.TEXTURE_2D_ARRAY, 0, 0, 0, layer, // x, y, z offset
357
- img.w, img.h, 1, // depth (1 layer)
358
- this.gl.RED, this.gl.UNSIGNED_BYTE, heap, img.bitmap);
359
- }
360
- // Fill instance data
361
- const idx = instanceCount * 4;
362
- this.instanceDestRectData[idx] = img.dst_x;
363
- this.instanceDestRectData[idx + 1] = img.dst_y;
364
- this.instanceDestRectData[idx + 2] = img.w;
365
- this.instanceDestRectData[idx + 3] = img.h;
366
- this.instanceColorData[idx] = ((img.color >>> 24) & 0xFF) / 255;
367
- this.instanceColorData[idx + 1] = ((img.color >>> 16) & 0xFF) / 255;
368
- this.instanceColorData[idx + 2] = ((img.color >>> 8) & 0xFF) / 255;
369
- this.instanceColorData[idx + 3] = (img.color & 0xFF) / 255;
370
- this.instanceTexLayerData[instanceCount] = layer;
371
- instanceCount++;
372
- }
373
- this.gl.pixelStorei(this.gl.UNPACK_ROW_LENGTH, 0);
374
- if (instanceCount === 0)
375
- continue;
376
- // Upload instance data to buffers
377
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceDestRectBuffer);
378
- this.gl.bufferData(this.gl.ARRAY_BUFFER, this.instanceDestRectData.subarray(0, instanceCount * 4), this.gl.DYNAMIC_DRAW);
379
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceColorBuffer);
380
- this.gl.bufferData(this.gl.ARRAY_BUFFER, this.instanceColorData.subarray(0, instanceCount * 4), this.gl.DYNAMIC_DRAW);
381
- this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.instanceTexLayerBuffer);
382
- this.gl.bufferData(this.gl.ARRAY_BUFFER, this.instanceTexLayerData.subarray(0, instanceCount), this.gl.DYNAMIC_DRAW);
383
- // Single instanced draw call
384
- this.gl.drawArraysInstanced(this.gl.TRIANGLES, 0, 6, instanceCount);
385
- }
386
- }
387
- destroy() {
388
- if (this.gl) {
389
- if (this.texArray) {
390
- this.gl.deleteTexture(this.texArray);
391
- this.texArray = null;
392
- }
393
- if (this.instanceDestRectBuffer) {
394
- this.gl.deleteBuffer(this.instanceDestRectBuffer);
395
- this.instanceDestRectBuffer = null;
396
- }
397
- if (this.instanceColorBuffer) {
398
- this.gl.deleteBuffer(this.instanceColorBuffer);
399
- this.instanceColorBuffer = null;
400
- }
401
- if (this.instanceTexLayerBuffer) {
402
- this.gl.deleteBuffer(this.instanceTexLayerBuffer);
403
- this.instanceTexLayerBuffer = null;
404
- }
405
- if (this.vao) {
406
- this.gl.deleteVertexArray(this.vao);
407
- this.vao = null;
408
- }
409
- if (this.program) {
410
- this.gl.deleteProgram(this.program);
411
- this.program = null;
412
- }
413
- this.gl = null;
414
- }
415
- }
416
- }
417
- //# sourceMappingURL=webgl-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webgl-renderer.js","sourceRoot":"","sources":["../../src/worker/webgl-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- import type { ASSImage } from '../jassub';
2
- export declare const colorMatrixConversionMap: {
3
- readonly BT601: {
4
- readonly BT709: Float32Array<ArrayBuffer>;
5
- readonly BT601: Float32Array<ArrayBuffer>;
6
- };
7
- readonly BT709: {
8
- readonly BT601: Float32Array<ArrayBuffer>;
9
- readonly BT709: Float32Array<ArrayBuffer>;
10
- };
11
- readonly FCC: {
12
- readonly BT709: Float32Array<ArrayBuffer>;
13
- readonly BT601: Float32Array<ArrayBuffer>;
14
- };
15
- readonly SMPTE240M: {
16
- readonly BT709: Float32Array<ArrayBuffer>;
17
- readonly BT601: Float32Array<ArrayBuffer>;
18
- };
19
- };
20
- export type ColorSpace = keyof typeof colorMatrixConversionMap;
21
- interface TextureInfo {
22
- texture: GPUTexture;
23
- view: GPUTextureView;
24
- width: number;
25
- height: number;
26
- }
27
- export declare class WebGPURenderer {
28
- device: GPUDevice | null;
29
- context: GPUCanvasContext | null;
30
- pipeline: GPURenderPipeline | null;
31
- bindGroupLayout: GPUBindGroupLayout | null;
32
- uniformBuffer: GPUBuffer | null;
33
- colorMatrixBuffer: GPUBuffer | null;
34
- imageDataBuffers: GPUBuffer[];
35
- textures: TextureInfo[];
36
- pendingDestroyTextures: GPUTexture[];
37
- format: GPUTextureFormat;
38
- constructor(device: GPUDevice);
39
- setCanvas(canvas: OffscreenCanvas, width: number, height: number): void;
40
- /**
41
- * Set the color matrix for color space conversion.
42
- * Pass null or undefined to use identity (no conversion).
43
- * Matrix should be a pre-padded Float32Array with 12 values (3 columns × 4 floats each).
44
- */
45
- setColorMatrix(subtitleColorSpace?: 'BT601' | 'BT709' | 'SMPTE240M' | 'FCC', videoColorSpace?: 'BT601' | 'BT709'): void;
46
- createTextureInfo(width: number, height: number): TextureInfo;
47
- render(images: ASSImage[], heap: Uint8Array): void;
48
- destroy(): void;
49
- }
50
- export {};