jassub 2.0.13 → 2.0.15

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/dist/jassub.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import 'rvfc-polyfill';
2
+ import { Debug } from './debug';
2
3
  import type { ASS_Event, ASS_Image, ASS_Style, ClassHandle } from './wasm/types';
3
4
  import type { ASSRenderer } from './worker/worker';
4
5
  import type { Remote } from 'abslink';
@@ -34,7 +35,7 @@ export default class JASSUB {
34
35
  prescaleFactor: number;
35
36
  prescaleHeightLimit: number;
36
37
  maxRenderHeight: number;
37
- debug: boolean;
38
+ debug: Debug | null;
38
39
  renderer: Remote<ASSRenderer>;
39
40
  ready: Promise<void>;
40
41
  busy: boolean;
package/dist/jassub.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import 'rvfc-polyfill';
3
3
  import { proxy, releaseProxy } from 'abslink';
4
4
  import { wrap } from 'abslink/w3c';
5
+ import { Debug } from './debug';
5
6
  const webYCbCrMap = {
6
7
  rgb: 'RGB',
7
8
  bt709: 'BT709',
@@ -52,7 +53,7 @@ export default class JASSUB {
52
53
  this._video.insertAdjacentElement('afterend', this._canvasParent);
53
54
  }
54
55
  const ctrl = this._canvas.transferControlToOffscreen();
55
- this.debug = !!opts.debug;
56
+ this.debug = opts.debug ? new Debug() : null;
56
57
  this.prescaleFactor = opts.prescaleFactor ?? 1.0;
57
58
  this.prescaleHeightLimit = opts.prescaleHeightLimit ?? 1080;
58
59
  this.maxRenderHeight = opts.maxRenderHeight ?? 0; // 0 - no limit.
@@ -237,11 +238,14 @@ export default class JASSUB {
237
238
  }
238
239
  if (this.busy) {
239
240
  this._skipped = true;
241
+ this.debug?._drop();
240
242
  return;
241
243
  }
242
244
  this.busy = true;
243
245
  this._skipped = false;
246
+ this.debug?._startFrame();
244
247
  await this.renderer._draw(mediaTime + this.timeOffset);
248
+ this.debug?._endFrame(this._lastDemandTime);
245
249
  this.busy = false;
246
250
  if (this._skipped)
247
251
  this._demandRender();
@@ -1 +1 @@
1
- {"version":3,"file":"jassub.js","sourceRoot":"","sources":["../src/jassub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jassub.js","sourceRoot":"","sources":["../src/jassub.ts"],"names":[],"mappings":"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"}
@@ -35,19 +35,17 @@ export declare class WebGPURenderer {
35
35
  textures: TextureInfo[];
36
36
  pendingDestroyTextures: GPUTexture[];
37
37
  format: GPUTextureFormat;
38
- readonly initPromise: Promise<void> | null;
38
+ _ready: Promise<void>;
39
39
  constructor();
40
- _initDevice(): Promise<void>;
41
40
  setCanvas(canvas: OffscreenCanvas, width: number, height: number): Promise<void>;
42
41
  /**
43
42
  * Set the color matrix for color space conversion.
44
43
  * Pass null or undefined to use identity (no conversion).
45
44
  * Matrix should be a pre-padded Float32Array with 12 values (3 columns × 4 floats each).
46
45
  */
47
- setColorMatrix(matrix?: Float32Array<ArrayBuffer>): void;
46
+ setColorMatrix(matrix?: Float32Array<ArrayBuffer>): Promise<void>;
48
47
  private createTextureInfo;
49
48
  render(images: ASSImage[], heap: Uint8Array): void;
50
- clear(): void;
51
49
  destroy(): void;
52
50
  }
53
51
  export {};
@@ -157,110 +157,111 @@ export class WebGPURenderer {
157
157
  pendingDestroyTextures = [];
158
158
  // eslint-disable-next-line no-undef
159
159
  format = 'bgra8unorm';
160
- initPromise = null;
160
+ _ready;
161
161
  constructor() {
162
162
  // Start async initialization immediately
163
- this.initPromise = this._initDevice();
164
- }
165
- async _initDevice() {
166
- // Check WebGPU support
167
- if (!navigator.gpu) {
168
- throw new Error('WebGPU not supported');
169
- }
170
- const adapter = await navigator.gpu.requestAdapter({
171
- powerPreference: 'high-performance'
172
- });
173
- if (!adapter) {
174
- throw new Error('No WebGPU adapter found');
175
- }
176
- this.device = await adapter.requestDevice();
177
- this.format = navigator.gpu.getPreferredCanvasFormat();
178
- // Create shader modules
179
- const vertexModule = this.device.createShaderModule({
180
- code: VERTEX_SHADER
181
- });
182
- const fragmentModule = this.device.createShaderModule({
183
- code: FRAGMENT_SHADER
184
- });
185
- // Create uniform buffer
186
- this.uniformBuffer = this.device.createBuffer({
187
- size: 16, // vec2f resolution + padding
188
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
189
- });
190
- // Create color matrix buffer (mat3x3f requires 48 bytes: 3 vec3f padded to vec4f each)
191
- this.colorMatrixBuffer = this.device.createBuffer({
192
- size: 48, // 3 x vec4f (each column is vec3f padded to 16 bytes)
193
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
194
- });
195
- // Initialize with identity matrix
196
- this.setColorMatrix();
197
- // Create bind group layout (no sampler needed - using textureLoad for pixel-perfect sampling)
198
- this.bindGroupLayout = this.device.createBindGroupLayout({
199
- entries: [
200
- {
201
- binding: 0,
202
- visibility: GPUShaderStage.VERTEX,
203
- buffer: { type: 'uniform' }
204
- },
205
- {
206
- binding: 1,
207
- visibility: GPUShaderStage.VERTEX,
208
- buffer: { type: 'read-only-storage' }
209
- },
210
- {
211
- binding: 3,
212
- visibility: GPUShaderStage.FRAGMENT,
213
- texture: { sampleType: 'unfilterable-float' } // textureLoad requires unfilterable
214
- },
215
- {
216
- binding: 4,
217
- visibility: GPUShaderStage.FRAGMENT,
218
- buffer: { type: 'uniform' }
219
- }
220
- ]
221
- });
222
- // Create pipeline layout
223
- const pipelineLayout = this.device.createPipelineLayout({
224
- bindGroupLayouts: [this.bindGroupLayout]
225
- });
226
- // Create render pipeline
227
- this.pipeline = this.device.createRenderPipeline({
228
- layout: pipelineLayout,
229
- vertex: {
230
- module: vertexModule,
231
- entryPoint: 'vertexMain'
232
- },
233
- fragment: {
234
- module: fragmentModule,
235
- entryPoint: 'fragmentMain',
236
- targets: [
163
+ this._ready = (async () => {
164
+ // Check WebGPU support
165
+ if (!navigator.gpu) {
166
+ throw new Error('WebGPU not supported');
167
+ }
168
+ const adapter = await navigator.gpu.requestAdapter({
169
+ powerPreference: 'high-performance'
170
+ });
171
+ if (!adapter) {
172
+ throw new Error('No WebGPU adapter found');
173
+ }
174
+ this.device = await adapter.requestDevice();
175
+ this.format = navigator.gpu.getPreferredCanvasFormat();
176
+ // Create shader modules
177
+ const vertexModule = this.device.createShaderModule({
178
+ code: VERTEX_SHADER
179
+ });
180
+ const fragmentModule = this.device.createShaderModule({
181
+ code: FRAGMENT_SHADER
182
+ });
183
+ // Create uniform buffer
184
+ this.uniformBuffer = this.device.createBuffer({
185
+ size: 16, // vec2f resolution + padding
186
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
187
+ });
188
+ // Create color matrix buffer (mat3x3f requires 48 bytes: 3 vec3f padded to vec4f each)
189
+ this.colorMatrixBuffer = this.device.createBuffer({
190
+ size: 48, // 3 x vec4f (each column is vec3f padded to 16 bytes)
191
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
192
+ });
193
+ // Initialize with identity matrix
194
+ this.device.queue.writeBuffer(this.colorMatrixBuffer, 0, IDENTITY_MATRIX);
195
+ // Create bind group layout (no sampler needed - using textureLoad for pixel-perfect sampling)
196
+ this.bindGroupLayout = this.device.createBindGroupLayout({
197
+ entries: [
237
198
  {
238
- format: this.format,
239
- blend: {
240
- color: {
241
- srcFactor: 'one',
242
- dstFactor: 'one-minus-src-alpha',
243
- operation: 'add'
244
- },
245
- alpha: {
246
- srcFactor: 'one',
247
- dstFactor: 'one-minus-src-alpha',
248
- operation: 'add'
249
- }
250
- }
199
+ binding: 0,
200
+ visibility: GPUShaderStage.VERTEX,
201
+ buffer: { type: 'uniform' }
202
+ },
203
+ {
204
+ binding: 1,
205
+ visibility: GPUShaderStage.VERTEX,
206
+ buffer: { type: 'read-only-storage' }
207
+ },
208
+ {
209
+ binding: 3,
210
+ visibility: GPUShaderStage.FRAGMENT,
211
+ texture: { sampleType: 'unfilterable-float' } // textureLoad requires unfilterable
212
+ },
213
+ {
214
+ binding: 4,
215
+ visibility: GPUShaderStage.FRAGMENT,
216
+ buffer: { type: 'uniform' }
251
217
  }
252
218
  ]
253
- },
254
- primitive: {
255
- topology: 'triangle-list'
256
- }
257
- });
219
+ });
220
+ // Create pipeline layout
221
+ const pipelineLayout = this.device.createPipelineLayout({
222
+ bindGroupLayouts: [this.bindGroupLayout]
223
+ });
224
+ // Create render pipeline
225
+ this.pipeline = this.device.createRenderPipeline({
226
+ layout: pipelineLayout,
227
+ vertex: {
228
+ module: vertexModule,
229
+ entryPoint: 'vertexMain'
230
+ },
231
+ fragment: {
232
+ module: fragmentModule,
233
+ entryPoint: 'fragmentMain',
234
+ targets: [
235
+ {
236
+ format: this.format,
237
+ blend: {
238
+ color: {
239
+ srcFactor: 'one',
240
+ dstFactor: 'one-minus-src-alpha',
241
+ operation: 'add'
242
+ },
243
+ alpha: {
244
+ srcFactor: 'one',
245
+ dstFactor: 'one-minus-src-alpha',
246
+ operation: 'add'
247
+ }
248
+ }
249
+ }
250
+ ]
251
+ },
252
+ primitive: {
253
+ topology: 'triangle-list'
254
+ }
255
+ });
256
+ })();
258
257
  }
259
258
  async setCanvas(canvas, width, height) {
260
- await this.initPromise;
261
- if (!this.device) {
262
- throw new Error('WebGPU device not initialized. Did you await the constructor promise?');
263
- }
259
+ await this._ready;
260
+ if (!this.device)
261
+ return;
262
+ // WebGPU doesn't allow 0-sized textures/swapchains
263
+ if (width <= 0 || height <= 0)
264
+ return;
264
265
  canvas.width = width;
265
266
  canvas.height = height;
266
267
  if (!this.context) {
@@ -283,8 +284,9 @@ export class WebGPURenderer {
283
284
  * Pass null or undefined to use identity (no conversion).
284
285
  * Matrix should be a pre-padded Float32Array with 12 values (3 columns × 4 floats each).
285
286
  */
286
- setColorMatrix(matrix) {
287
- if (!this.device || !this.colorMatrixBuffer)
287
+ async setColorMatrix(matrix) {
288
+ await this._ready;
289
+ if (!this.device)
288
290
  return;
289
291
  this.device.queue.writeBuffer(this.colorMatrixBuffer, 0, matrix ?? IDENTITY_MATRIX);
290
292
  }
@@ -304,8 +306,12 @@ export class WebGPURenderer {
304
306
  render(images, heap) {
305
307
  if (!this.device || !this.context || !this.pipeline)
306
308
  return;
309
+ // getCurrentTexture fails if canvas has 0 dimensions
310
+ const currentTexture = this.context.getCurrentTexture();
311
+ if (currentTexture.width === 0 || currentTexture.height === 0)
312
+ return;
307
313
  const commandEncoder = this.device.createCommandEncoder();
308
- const textureView = this.context.getCurrentTexture().createView();
314
+ const textureView = currentTexture.createView();
309
315
  // Begin render pass
310
316
  const renderPass = commandEncoder.beginRenderPass({
311
317
  colorAttachments: [
@@ -329,12 +335,12 @@ export class WebGPURenderer {
329
335
  }));
330
336
  }
331
337
  // Render each image
332
- for (let i = 0, texIndex = 0; i < images.length; i++, texIndex++) {
338
+ for (let i = 0, texIndex = -1; i < images.length; i++) {
333
339
  const img = images[i];
334
340
  // Skip images with invalid dimensions (WebGPU doesn't allow 0-sized textures)
335
341
  if (img.w <= 0 || img.h <= 0)
336
342
  continue;
337
- let texInfo = this.textures[texIndex];
343
+ let texInfo = this.textures[++texIndex];
338
344
  // Recreate texture if size changed (use actual w, not stride)
339
345
  if (texInfo.width !== img.w || texInfo.height !== img.h) {
340
346
  // Defer destruction until after submit to avoid destroying textures still in use
@@ -391,24 +397,6 @@ export class WebGPURenderer {
391
397
  }
392
398
  this.pendingDestroyTextures = [];
393
399
  }
394
- clear() {
395
- if (!this.device || !this.context)
396
- return;
397
- const commandEncoder = this.device.createCommandEncoder();
398
- const textureView = this.context.getCurrentTexture().createView();
399
- const renderPass = commandEncoder.beginRenderPass({
400
- colorAttachments: [
401
- {
402
- view: textureView,
403
- clearValue: { r: 0, g: 0, b: 0, a: 0 },
404
- loadOp: 'clear',
405
- storeOp: 'store'
406
- }
407
- ]
408
- });
409
- renderPass.end();
410
- this.device.queue.submit([commandEncoder.finish()]);
411
- }
412
400
  destroy() {
413
401
  for (const tex of this.textures) {
414
402
  tex.texture.destroy();
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu-renderer.js","sourceRoot":"","sources":["../../src/worker/webgpu-renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgpu-renderer.js","sourceRoot":"","sources":["../../src/worker/webgpu-renderer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jassub",
3
- "version": "2.0.13",
3
+ "version": "2.0.15",
4
4
  "description": "libass subtitle renderer for modern browsers",
5
5
  "main": "dist/jassub.js",
6
6
  "type": "module",
@@ -37,7 +37,8 @@
37
37
  "homepage": "https://github.com/ThaUnknown/jassub",
38
38
  "dependencies": {
39
39
  "abslink": "^1.1.6",
40
- "rvfc-polyfill": "^1.0.7"
40
+ "rvfc-polyfill": "^1.0.7",
41
+ "throughput": "^1.0.2"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@webgpu/types": "^0.1.68",
package/src/debug.ts ADDED
@@ -0,0 +1,72 @@
1
+ import throughput from 'throughput'
2
+
3
+ export interface SubtitleCallbackMetadata {
4
+ fps: number
5
+ processingDuration: number // ms not seconds!
6
+ droppedFrames: number
7
+ presentedFrames: number
8
+ mistimedFrames: number // frames presented later than the video frame
9
+ presentationTime: DOMHighResTimeStamp
10
+ expectedDisplayTime: DOMHighResTimeStamp
11
+ width: number
12
+ height: number
13
+ mediaTime: number // video time
14
+ frameDelay: DOMHighResTimeStamp // how much a frame is delayed compared to the expected video display time
15
+ }
16
+
17
+ export class Debug {
18
+ // 5 second average
19
+ fps = throughput(5)
20
+ processingDuration = throughput(5)
21
+ droppedFrames = 0
22
+ presentedFrames = 0
23
+ mistimedFrames = 0
24
+
25
+ _drop () {
26
+ ++this.droppedFrames
27
+ }
28
+
29
+ _startTime = 0
30
+ _startFrame () {
31
+ this._startTime = performance.now()
32
+ }
33
+
34
+ onsubtitleFrameCallback?: (now: DOMHighResTimeStamp, metadata: SubtitleCallbackMetadata) => void = console.log
35
+
36
+ _endFrame (meta: VideoFrameCallbackMetadata) {
37
+ ++this.presentedFrames
38
+ const fps = this.fps(1)
39
+ const now = performance.now()
40
+ const processingDuration = this.processingDuration((now - this._startTime) / fps)
41
+ const frameDelay = Math.max(0, meta.expectedDisplayTime - now)
42
+ if (frameDelay) ++this.mistimedFrames
43
+
44
+ this.onsubtitleFrameCallback?.(now, {
45
+ fps,
46
+ processingDuration,
47
+ droppedFrames: this.droppedFrames,
48
+ presentedFrames: this.presentedFrames,
49
+ mistimedFrames: this.mistimedFrames,
50
+ presentationTime: now,
51
+ expectedDisplayTime: meta.expectedDisplayTime + (frameDelay > 0 ? fps / 1000 : 0),
52
+ frameDelay,
53
+ width: meta.width,
54
+ height: meta.height,
55
+ mediaTime: meta.mediaTime
56
+ })
57
+
58
+ console.info(
59
+ '%cFPS: %c%f %c| Frame Time: %c%d ms %c| Dropped Frames: %c%d %c| 5s Avg',
60
+ 'color: #888',
61
+ 'color: #0f0; font-weight: bold',
62
+ fps.toFixed(1),
63
+ 'color: #888',
64
+ 'color: #0ff; font-weight: bold',
65
+ processingDuration,
66
+ 'color: #888',
67
+ 'color: #f00; font-weight: bold',
68
+ this.droppedFrames,
69
+ 'color: #888'
70
+ )
71
+ }
72
+ }
package/src/jassub.ts CHANGED
@@ -4,6 +4,8 @@ import 'rvfc-polyfill'
4
4
  import { proxy, releaseProxy } from 'abslink'
5
5
  import { wrap } from 'abslink/w3c'
6
6
 
7
+ import { Debug } from './debug'
8
+
7
9
  import type { ASS_Event, ASS_Image, ASS_Style, ClassHandle } from './wasm/types'
8
10
  import type { ASSRenderer } from './worker/worker'
9
11
  import type { Remote } from 'abslink'
@@ -91,7 +93,7 @@ export default class JASSUB {
91
93
 
92
94
  const ctrl = this._canvas.transferControlToOffscreen()
93
95
 
94
- this.debug = !!opts.debug
96
+ this.debug = opts.debug ? new Debug() : null
95
97
 
96
98
  this.prescaleFactor = opts.prescaleFactor ?? 1.0
97
99
  this.prescaleHeightLimit = opts.prescaleHeightLimit ?? 1080
@@ -295,13 +297,16 @@ export default class JASSUB {
295
297
 
296
298
  if (this.busy) {
297
299
  this._skipped = true
300
+ this.debug?._drop()
298
301
  return
299
302
  }
300
303
 
301
304
  this.busy = true
302
305
  this._skipped = false
303
306
 
307
+ this.debug?._startFrame()
304
308
  await this.renderer._draw(mediaTime + this.timeOffset)
309
+ this.debug?._endFrame(this._lastDemandTime)
305
310
 
306
311
  this.busy = false
307
312
  if (this._skipped) this._demandRender()
@@ -177,123 +177,122 @@ export class WebGPURenderer {
177
177
 
178
178
  // eslint-disable-next-line no-undef
179
179
  format: GPUTextureFormat = 'bgra8unorm'
180
- readonly initPromise: Promise<void> | null = null
180
+ _ready
181
181
 
182
182
  constructor () {
183
183
  // Start async initialization immediately
184
- this.initPromise = this._initDevice()
185
- }
186
-
187
- async _initDevice (): Promise<void> {
184
+ this._ready = (async () => {
188
185
  // Check WebGPU support
189
- if (!navigator.gpu) {
190
- throw new Error('WebGPU not supported')
191
- }
186
+ if (!navigator.gpu) {
187
+ throw new Error('WebGPU not supported')
188
+ }
192
189
 
193
- const adapter = await navigator.gpu.requestAdapter({
194
- powerPreference: 'high-performance'
195
- })
190
+ const adapter = await navigator.gpu.requestAdapter({
191
+ powerPreference: 'high-performance'
192
+ })
196
193
 
197
- if (!adapter) {
198
- throw new Error('No WebGPU adapter found')
199
- }
194
+ if (!adapter) {
195
+ throw new Error('No WebGPU adapter found')
196
+ }
200
197
 
201
- this.device = await adapter.requestDevice()
202
- this.format = navigator.gpu.getPreferredCanvasFormat()
198
+ this.device = await adapter.requestDevice()
199
+ this.format = navigator.gpu.getPreferredCanvasFormat()
203
200
 
204
- // Create shader modules
205
- const vertexModule = this.device.createShaderModule({
206
- code: VERTEX_SHADER
207
- })
201
+ // Create shader modules
202
+ const vertexModule = this.device.createShaderModule({
203
+ code: VERTEX_SHADER
204
+ })
208
205
 
209
- const fragmentModule = this.device.createShaderModule({
210
- code: FRAGMENT_SHADER
211
- })
206
+ const fragmentModule = this.device.createShaderModule({
207
+ code: FRAGMENT_SHADER
208
+ })
212
209
 
213
- // Create uniform buffer
214
- this.uniformBuffer = this.device.createBuffer({
215
- size: 16, // vec2f resolution + padding
216
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
217
- })
210
+ // Create uniform buffer
211
+ this.uniformBuffer = this.device.createBuffer({
212
+ size: 16, // vec2f resolution + padding
213
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
214
+ })
218
215
 
219
- // Create color matrix buffer (mat3x3f requires 48 bytes: 3 vec3f padded to vec4f each)
220
- this.colorMatrixBuffer = this.device.createBuffer({
221
- size: 48, // 3 x vec4f (each column is vec3f padded to 16 bytes)
222
- usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
223
- })
224
- // Initialize with identity matrix
225
- this.setColorMatrix()
216
+ // Create color matrix buffer (mat3x3f requires 48 bytes: 3 vec3f padded to vec4f each)
217
+ this.colorMatrixBuffer = this.device.createBuffer({
218
+ size: 48, // 3 x vec4f (each column is vec3f padded to 16 bytes)
219
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
220
+ })
221
+ // Initialize with identity matrix
222
+ this.device.queue.writeBuffer(this.colorMatrixBuffer, 0, IDENTITY_MATRIX)
226
223
 
227
- // Create bind group layout (no sampler needed - using textureLoad for pixel-perfect sampling)
228
- this.bindGroupLayout = this.device.createBindGroupLayout({
229
- entries: [
230
- {
231
- binding: 0,
232
- visibility: GPUShaderStage.VERTEX,
233
- buffer: { type: 'uniform' }
234
- },
235
- {
236
- binding: 1,
237
- visibility: GPUShaderStage.VERTEX,
238
- buffer: { type: 'read-only-storage' }
239
- },
240
- {
241
- binding: 3,
242
- visibility: GPUShaderStage.FRAGMENT,
243
- texture: { sampleType: 'unfilterable-float' } // textureLoad requires unfilterable
244
- },
245
- {
246
- binding: 4,
247
- visibility: GPUShaderStage.FRAGMENT,
248
- buffer: { type: 'uniform' }
249
- }
250
- ]
251
- })
224
+ // Create bind group layout (no sampler needed - using textureLoad for pixel-perfect sampling)
225
+ this.bindGroupLayout = this.device.createBindGroupLayout({
226
+ entries: [
227
+ {
228
+ binding: 0,
229
+ visibility: GPUShaderStage.VERTEX,
230
+ buffer: { type: 'uniform' }
231
+ },
232
+ {
233
+ binding: 1,
234
+ visibility: GPUShaderStage.VERTEX,
235
+ buffer: { type: 'read-only-storage' }
236
+ },
237
+ {
238
+ binding: 3,
239
+ visibility: GPUShaderStage.FRAGMENT,
240
+ texture: { sampleType: 'unfilterable-float' } // textureLoad requires unfilterable
241
+ },
242
+ {
243
+ binding: 4,
244
+ visibility: GPUShaderStage.FRAGMENT,
245
+ buffer: { type: 'uniform' }
246
+ }
247
+ ]
248
+ })
252
249
 
253
- // Create pipeline layout
254
- const pipelineLayout = this.device.createPipelineLayout({
255
- bindGroupLayouts: [this.bindGroupLayout]
256
- })
250
+ // Create pipeline layout
251
+ const pipelineLayout = this.device.createPipelineLayout({
252
+ bindGroupLayouts: [this.bindGroupLayout]
253
+ })
257
254
 
258
- // Create render pipeline
259
- this.pipeline = this.device.createRenderPipeline({
260
- layout: pipelineLayout,
261
- vertex: {
262
- module: vertexModule,
263
- entryPoint: 'vertexMain'
264
- },
265
- fragment: {
266
- module: fragmentModule,
267
- entryPoint: 'fragmentMain',
268
- targets: [
269
- {
270
- format: this.format,
271
- blend: {
272
- color: {
273
- srcFactor: 'one',
274
- dstFactor: 'one-minus-src-alpha',
275
- operation: 'add'
276
- },
277
- alpha: {
278
- srcFactor: 'one',
279
- dstFactor: 'one-minus-src-alpha',
280
- operation: 'add'
255
+ // Create render pipeline
256
+ this.pipeline = this.device.createRenderPipeline({
257
+ layout: pipelineLayout,
258
+ vertex: {
259
+ module: vertexModule,
260
+ entryPoint: 'vertexMain'
261
+ },
262
+ fragment: {
263
+ module: fragmentModule,
264
+ entryPoint: 'fragmentMain',
265
+ targets: [
266
+ {
267
+ format: this.format,
268
+ blend: {
269
+ color: {
270
+ srcFactor: 'one',
271
+ dstFactor: 'one-minus-src-alpha',
272
+ operation: 'add'
273
+ },
274
+ alpha: {
275
+ srcFactor: 'one',
276
+ dstFactor: 'one-minus-src-alpha',
277
+ operation: 'add'
278
+ }
281
279
  }
282
280
  }
283
- }
284
- ]
285
- },
286
- primitive: {
287
- topology: 'triangle-list'
288
- }
289
- })
281
+ ]
282
+ },
283
+ primitive: {
284
+ topology: 'triangle-list'
285
+ }
286
+ })
287
+ })()
290
288
  }
291
289
 
292
290
  async setCanvas (canvas: OffscreenCanvas, width: number, height: number) {
293
- await this.initPromise
294
- if (!this.device) {
295
- throw new Error('WebGPU device not initialized. Did you await the constructor promise?')
296
- }
291
+ await this._ready
292
+ if (!this.device) return
293
+
294
+ // WebGPU doesn't allow 0-sized textures/swapchains
295
+ if (width <= 0 || height <= 0) return
297
296
 
298
297
  canvas.width = width
299
298
  canvas.height = height
@@ -325,9 +324,10 @@ export class WebGPURenderer {
325
324
  * Pass null or undefined to use identity (no conversion).
326
325
  * Matrix should be a pre-padded Float32Array with 12 values (3 columns × 4 floats each).
327
326
  */
328
- setColorMatrix (matrix?: Float32Array<ArrayBuffer>): void {
329
- if (!this.device || !this.colorMatrixBuffer) return
330
- this.device.queue.writeBuffer(this.colorMatrixBuffer, 0, matrix ?? IDENTITY_MATRIX)
327
+ async setColorMatrix (matrix?: Float32Array<ArrayBuffer>) {
328
+ await this._ready
329
+ if (!this.device) return
330
+ this.device.queue.writeBuffer(this.colorMatrixBuffer!, 0, matrix ?? IDENTITY_MATRIX)
331
331
  }
332
332
 
333
333
  private createTextureInfo (width: number, height: number): TextureInfo {
@@ -348,9 +348,13 @@ export class WebGPURenderer {
348
348
  render (images: ASSImage[], heap: Uint8Array): void {
349
349
  if (!this.device || !this.context || !this.pipeline) return
350
350
 
351
+ // getCurrentTexture fails if canvas has 0 dimensions
352
+ const currentTexture = this.context.getCurrentTexture()
353
+ if (currentTexture.width === 0 || currentTexture.height === 0) return
354
+
351
355
  const commandEncoder = this.device.createCommandEncoder()
352
356
 
353
- const textureView = this.context.getCurrentTexture().createView()
357
+ const textureView = currentTexture.createView()
354
358
 
355
359
  // Begin render pass
356
360
  const renderPass = commandEncoder.beginRenderPass({
@@ -378,13 +382,13 @@ export class WebGPURenderer {
378
382
  }
379
383
 
380
384
  // Render each image
381
- for (let i = 0, texIndex = 0; i < images.length; i++, texIndex++) {
385
+ for (let i = 0, texIndex = -1; i < images.length; i++) {
382
386
  const img = images[i]!
383
387
 
384
388
  // Skip images with invalid dimensions (WebGPU doesn't allow 0-sized textures)
385
389
  if (img.w <= 0 || img.h <= 0) continue
386
390
 
387
- let texInfo = this.textures[texIndex]!
391
+ let texInfo = this.textures[++texIndex]!
388
392
 
389
393
  // Recreate texture if size changed (use actual w, not stride)
390
394
  if (texInfo.width !== img.w || texInfo.height !== img.h) {
@@ -456,28 +460,7 @@ export class WebGPURenderer {
456
460
  this.pendingDestroyTextures = []
457
461
  }
458
462
 
459
- clear (): void {
460
- if (!this.device || !this.context) return
461
-
462
- const commandEncoder = this.device.createCommandEncoder()
463
- const textureView = this.context.getCurrentTexture().createView()
464
-
465
- const renderPass = commandEncoder.beginRenderPass({
466
- colorAttachments: [
467
- {
468
- view: textureView,
469
- clearValue: { r: 0, g: 0, b: 0, a: 0 },
470
- loadOp: 'clear',
471
- storeOp: 'store'
472
- }
473
- ]
474
- })
475
-
476
- renderPass.end()
477
- this.device.queue.submit([commandEncoder.finish()])
478
- }
479
-
480
- destroy (): void {
463
+ destroy () {
481
464
  for (const tex of this.textures) {
482
465
  tex.texture.destroy()
483
466
  }