@codexo/exojs 0.4.0 → 0.6.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 (138) hide show
  1. package/CHANGELOG.md +464 -163
  2. package/README.md +156 -141
  3. package/dist/esm/audio/AudioAnalyser.d.ts +0 -1
  4. package/dist/esm/audio/AudioAnalyser.js +0 -2
  5. package/dist/esm/audio/AudioAnalyser.js.map +1 -1
  6. package/dist/esm/core/Application.d.ts +4 -4
  7. package/dist/esm/core/Application.js +19 -19
  8. package/dist/esm/core/Application.js.map +1 -1
  9. package/dist/esm/core/Scene.d.ts +59 -24
  10. package/dist/esm/core/Scene.js +60 -18
  11. package/dist/esm/core/Scene.js.map +1 -1
  12. package/dist/esm/core/SceneManager.js +15 -9
  13. package/dist/esm/core/SceneManager.js.map +1 -1
  14. package/dist/esm/core/SceneNode.d.ts +45 -5
  15. package/dist/esm/core/SceneNode.js +136 -7
  16. package/dist/esm/core/SceneNode.js.map +1 -1
  17. package/dist/esm/index.js +3 -4
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/esm/math/index.d.ts +0 -1
  20. package/dist/esm/rendering/CallbackRenderPass.d.ts +3 -3
  21. package/dist/esm/rendering/CallbackRenderPass.js +2 -2
  22. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  23. package/dist/esm/rendering/Container.d.ts +10 -11
  24. package/dist/esm/rendering/Container.js +5 -5
  25. package/dist/esm/rendering/Container.js.map +1 -1
  26. package/dist/esm/rendering/Drawable.d.ts +2 -2
  27. package/dist/esm/rendering/Drawable.js +5 -5
  28. package/dist/esm/rendering/Drawable.js.map +1 -1
  29. package/dist/esm/rendering/{SceneRenderRuntime.d.ts → RenderBackend.d.ts} +21 -3
  30. package/dist/esm/rendering/RenderNode.d.ts +41 -5
  31. package/dist/esm/rendering/RenderNode.js +89 -24
  32. package/dist/esm/rendering/RenderNode.js.map +1 -1
  33. package/dist/esm/rendering/RenderPass.d.ts +2 -2
  34. package/dist/esm/rendering/RenderTargetPass.d.ts +3 -3
  35. package/dist/esm/rendering/RenderTargetPass.js +9 -9
  36. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  37. package/dist/esm/rendering/Renderer.d.ts +3 -3
  38. package/dist/esm/rendering/RendererRegistry.d.ts +13 -7
  39. package/dist/esm/rendering/RendererRegistry.js +18 -10
  40. package/dist/esm/rendering/RendererRegistry.js.map +1 -1
  41. package/dist/esm/rendering/filters/BlurFilter.d.ts +2 -2
  42. package/dist/esm/rendering/filters/BlurFilter.js +5 -5
  43. package/dist/esm/rendering/filters/BlurFilter.js.map +1 -1
  44. package/dist/esm/rendering/filters/ColorFilter.d.ts +2 -2
  45. package/dist/esm/rendering/filters/ColorFilter.js +3 -3
  46. package/dist/esm/rendering/filters/ColorFilter.js.map +1 -1
  47. package/dist/esm/rendering/filters/Filter.d.ts +2 -2
  48. package/dist/esm/rendering/index.d.ts +6 -6
  49. package/dist/esm/rendering/primitives/Graphics.d.ts +3 -3
  50. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  51. package/dist/esm/rendering/shader/Shader.d.ts +3 -3
  52. package/dist/esm/rendering/shader/Shader.js +10 -10
  53. package/dist/esm/rendering/text/Text.d.ts +2 -2
  54. package/dist/esm/rendering/text/Text.js +2 -2
  55. package/dist/esm/rendering/text/Text.js.map +1 -1
  56. package/dist/esm/rendering/texture/Sampler.d.ts +0 -3
  57. package/dist/esm/rendering/texture/Sampler.js +5 -7
  58. package/dist/esm/rendering/texture/Sampler.js.map +1 -1
  59. package/dist/esm/rendering/types.d.ts +4 -0
  60. package/dist/esm/rendering/types.js +4 -0
  61. package/dist/esm/rendering/types.js.map +1 -1
  62. package/dist/esm/rendering/video/Video.d.ts +2 -2
  63. package/dist/esm/rendering/video/Video.js +2 -2
  64. package/dist/esm/rendering/video/Video.js.map +1 -1
  65. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.d.ts +2 -2
  66. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js +35 -11
  67. package/dist/esm/rendering/webgl2/AbstractWebGl2BatchedRenderer.js.map +1 -1
  68. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.d.ts +13 -13
  69. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js +20 -20
  70. package/dist/esm/rendering/webgl2/AbstractWebGl2Renderer.js.map +1 -1
  71. package/dist/esm/rendering/webgl2/{WebGl2RenderManager.d.ts → WebGl2Backend.d.ts} +15 -12
  72. package/dist/esm/rendering/webgl2/{WebGl2RenderManager.js → WebGl2Backend.js} +60 -38
  73. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -0
  74. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.d.ts +31 -0
  75. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js +186 -0
  76. package/dist/esm/rendering/webgl2/WebGl2MaskCompositor.js.map +1 -0
  77. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +38 -7
  78. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +281 -90
  79. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
  80. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.d.ts +2 -2
  81. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.js +15 -10
  82. package/dist/esm/rendering/webgl2/WebGl2PrimitiveRenderer.js.map +1 -1
  83. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js +12 -0
  84. package/dist/esm/rendering/webgl2/WebGl2ShaderMappings.js.map +1 -1
  85. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.d.ts +2 -0
  86. package/dist/esm/rendering/webgl2/{WebGl2ShaderRuntime.js → WebGl2ShaderProgram.js} +58 -18
  87. package/dist/esm/rendering/webgl2/WebGl2ShaderProgram.js.map +1 -0
  88. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +26 -7
  89. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +260 -62
  90. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  91. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.d.ts +24 -1
  92. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js +6 -2
  93. package/dist/esm/rendering/webgl2/WebGl2VertexArrayObject.js.map +1 -1
  94. package/dist/esm/rendering/webgl2/glsl/mask-compose.frag.js +4 -0
  95. package/dist/esm/rendering/webgl2/glsl/mask-compose.frag.js.map +1 -0
  96. package/dist/esm/rendering/webgl2/glsl/mask-compose.vert.js +4 -0
  97. package/dist/esm/rendering/webgl2/glsl/mask-compose.vert.js.map +1 -0
  98. package/dist/esm/rendering/webgl2/glsl/particle.vert.js +1 -1
  99. package/dist/esm/rendering/webgl2/glsl/sprite.frag.js +1 -1
  100. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js +1 -1
  101. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.d.ts +9 -9
  102. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js +18 -18
  103. package/dist/esm/rendering/webgpu/AbstractWebGpuRenderer.js.map +1 -1
  104. package/dist/esm/rendering/webgpu/{WebGpuRenderManager.d.ts → WebGpuBackend.d.ts} +17 -14
  105. package/dist/esm/rendering/webgpu/{WebGpuRenderManager.js → WebGpuBackend.js} +74 -40
  106. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -0
  107. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +37 -0
  108. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +279 -0
  109. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -0
  110. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +2 -3
  111. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +65 -82
  112. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  113. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.d.ts +2 -3
  114. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.js +24 -25
  115. package/dist/esm/rendering/webgpu/WebGpuPrimitiveRenderer.js.map +1 -1
  116. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +28 -13
  117. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +410 -382
  118. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  119. package/dist/esm/resources/Loader.js +5 -3
  120. package/dist/esm/resources/Loader.js.map +1 -1
  121. package/dist/exo.esm.js +2500 -1399
  122. package/dist/exo.esm.js.map +1 -1
  123. package/package.json +20 -11
  124. package/dist/esm/math/Transformable.d.ts +0 -47
  125. package/dist/esm/math/Transformable.js +0 -140
  126. package/dist/esm/math/Transformable.js.map +0 -1
  127. package/dist/esm/rendering/webgl2/WebGl2RenderManager.js.map +0 -1
  128. package/dist/esm/rendering/webgl2/WebGl2RendererRuntime.d.ts +0 -15
  129. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.d.ts +0 -2
  130. package/dist/esm/rendering/webgl2/WebGl2ShaderRuntime.js.map +0 -1
  131. package/dist/esm/rendering/webgpu/WebGpuRenderManager.js.map +0 -1
  132. package/dist/esm/rendering/webgpu/WebGpuRendererRuntime.d.ts +0 -8
  133. package/dist/exo.esm.min.js +0 -2
  134. package/dist/exo.esm.min.js.map +0 -1
  135. package/dist/exo.global.js +0 -17328
  136. package/dist/exo.global.js.map +0 -1
  137. package/dist/exo.global.min.js +0 -2
  138. package/dist/exo.global.min.js.map +0 -1
@@ -9,20 +9,20 @@ import type { Shader } from '../shader/Shader';
9
9
  import type { Texture } from '../texture/Texture';
10
10
  import type { WebGl2VertexArrayObject } from '../webgl2/WebGl2VertexArrayObject';
11
11
  import type { View } from '../View';
12
- import type { WebGpuRendererRuntime } from './WebGpuRendererRuntime';
12
+ import type { RenderBackend } from '../RenderBackend';
13
13
  import { RenderTarget } from '../RenderTarget';
14
14
  import { RenderTexture } from '../texture/RenderTexture';
15
15
  import type { Rectangle } from '@/math/Rectangle';
16
16
  import type { RenderStats } from '../RenderStats';
17
- interface PixelMaskState {
17
+ interface PixelClipBoundsState {
18
18
  x: number;
19
19
  y: number;
20
20
  width: number;
21
21
  height: number;
22
22
  }
23
- export declare class WebGpuRenderManager implements WebGpuRendererRuntime {
23
+ export declare class WebGpuBackend implements RenderBackend {
24
24
  readonly backendType = RenderBackendType.WebGpu;
25
- readonly rendererRegistry: RendererRegistry<WebGpuRendererRuntime>;
25
+ readonly rendererRegistry: RendererRegistry<WebGpuBackend>;
26
26
  private readonly _canvas;
27
27
  private readonly _rootRenderTarget;
28
28
  private readonly _clearColor;
@@ -30,10 +30,12 @@ export declare class WebGpuRenderManager implements WebGpuRendererRuntime {
30
30
  private readonly _textureDestroyHandlers;
31
31
  private readonly _renderTargetDestroyHandlers;
32
32
  private readonly _temporaryRenderTextures;
33
- private readonly _maskStack;
34
- private readonly _maskPixelStack;
35
- private readonly _maskPointA;
36
- private readonly _maskPointB;
33
+ private readonly _clipBoundsStack;
34
+ private readonly _clipPixelStack;
35
+ private readonly _clipPointA;
36
+ private readonly _clipPointB;
37
+ private readonly _maskCompositor;
38
+ private _maskCompositorConnected;
37
39
  private _mipmapShaderModule;
38
40
  private _mipmapBindGroupLayout;
39
41
  private _mipmapPipelineLayout;
@@ -45,7 +47,6 @@ export declare class WebGpuRenderManager implements WebGpuRendererRuntime {
45
47
  private _initializePromise;
46
48
  private _renderTarget;
47
49
  private _renderer;
48
- private _blendMode;
49
50
  private _texture;
50
51
  private _clearRequested;
51
52
  private _hasPresentedFrame;
@@ -68,9 +69,10 @@ export declare class WebGpuRenderManager implements WebGpuRendererRuntime {
68
69
  setBlendMode(blendMode: BlendModes | null): this;
69
70
  setVao(vao: WebGl2VertexArrayObject | null): this;
70
71
  setRenderTarget(target: RenderTarget | null): this;
71
- pushMask(maskBounds: Rectangle): this;
72
- popMask(): this;
73
- getScissorRect(): PixelMaskState | null;
72
+ pushScissorRect(bounds: Rectangle): this;
73
+ composeWithAlphaMask(content: Texture | RenderTexture, mask: Texture | RenderTexture, x: number, y: number, width: number, height: number, blendMode: BlendModes): this;
74
+ popScissorRect(): this;
75
+ getScissorRect(): PixelClipBoundsState | null;
74
76
  acquireRenderTexture(width: number, height: number): RenderTexture;
75
77
  releaseRenderTexture(texture: RenderTexture): this;
76
78
  setView(view: View | null): this;
@@ -88,6 +90,7 @@ export declare class WebGpuRenderManager implements WebGpuRendererRuntime {
88
90
  private _setActiveRenderer;
89
91
  private _flushActiveRenderer;
90
92
  private _initialize;
93
+ private _prewarmRendererPipelines;
91
94
  private _getGpuNavigator;
92
95
  private _createInitializationError;
93
96
  private _destroyManagedTextures;
@@ -97,8 +100,8 @@ export declare class WebGpuRenderManager implements WebGpuRendererRuntime {
97
100
  private _evictTexture;
98
101
  private _subscribeRenderTarget;
99
102
  private _unsubscribeRenderTarget;
100
- private _toMaskPixels;
101
- private _intersectMasks;
103
+ private _toClipPixels;
104
+ private _intersectClips;
102
105
  private _createSampler;
103
106
  private _getTextureUsage;
104
107
  private _getAddressMode;
@@ -7,6 +7,7 @@ import { RenderTarget } from '../RenderTarget.js';
7
7
  import { WebGpuPrimitiveRenderer } from './WebGpuPrimitiveRenderer.js';
8
8
  import { WebGpuSpriteRenderer } from './WebGpuSpriteRenderer.js';
9
9
  import { WebGpuParticleRenderer } from './WebGpuParticleRenderer.js';
10
+ import { WebGpuMaskCompositor } from './WebGpuMaskCompositor.js';
10
11
  import { RenderTexture } from '../texture/RenderTexture.js';
11
12
  import { Sprite } from '../sprite/Sprite.js';
12
13
  import { DrawableShape } from '../primitives/DrawableShape.js';
@@ -15,7 +16,7 @@ import { Vector } from '../../math/Vector.js';
15
16
 
16
17
  /// <reference types="@webgpu/types" />
17
18
  const managedTextureFormat = 'rgba8unorm';
18
- class WebGpuRenderManager {
19
+ class WebGpuBackend {
19
20
  backendType = RenderBackendType.WebGpu;
20
21
  rendererRegistry = new RendererRegistry();
21
22
  _canvas;
@@ -25,10 +26,12 @@ class WebGpuRenderManager {
25
26
  _textureDestroyHandlers = new Map();
26
27
  _renderTargetDestroyHandlers = new Map();
27
28
  _temporaryRenderTextures = [];
28
- _maskStack = [];
29
- _maskPixelStack = [];
30
- _maskPointA = new Vector();
31
- _maskPointB = new Vector();
29
+ _clipBoundsStack = [];
30
+ _clipPixelStack = [];
31
+ _clipPointA = new Vector();
32
+ _clipPointB = new Vector();
33
+ _maskCompositor = new WebGpuMaskCompositor();
34
+ _maskCompositorConnected = false;
32
35
  _mipmapShaderModule = null;
33
36
  _mipmapBindGroupLayout = null;
34
37
  _mipmapPipelineLayout = null;
@@ -40,7 +43,6 @@ class WebGpuRenderManager {
40
43
  _initializePromise = null;
41
44
  _renderTarget;
42
45
  _renderer = null;
43
- _blendMode = null;
44
46
  _texture = null;
45
47
  _clearRequested = false;
46
48
  _hasPresentedFrame = false;
@@ -137,7 +139,6 @@ class WebGpuRenderManager {
137
139
  }
138
140
  setBlendMode(blendMode) {
139
141
  if (blendMode === null) {
140
- this._blendMode = null;
141
142
  return this;
142
143
  }
143
144
  if (blendMode !== BlendModes.Normal
@@ -147,7 +148,6 @@ class WebGpuRenderManager {
147
148
  && blendMode !== BlendModes.Screen) {
148
149
  throw new Error(`WebGPU blend mode "${blendMode}" is not implemented yet.`);
149
150
  }
150
- this._blendMode = blendMode;
151
151
  return this;
152
152
  }
153
153
  setVao(vao) {
@@ -174,39 +174,52 @@ class WebGpuRenderManager {
174
174
  }
175
175
  return this;
176
176
  }
177
- pushMask(maskBounds) {
177
+ pushScissorRect(bounds) {
178
178
  this._flushActiveRenderer();
179
- this._maskStack.push(maskBounds.clone());
180
- const nextMask = this._toMaskPixels(maskBounds);
181
- const previousMask = this._maskPixelStack.length > 0
182
- ? this._maskPixelStack[this._maskPixelStack.length - 1]
179
+ this._clipBoundsStack.push(bounds.clone());
180
+ const nextClip = this._toClipPixels(bounds);
181
+ const previousClip = this._clipPixelStack.length > 0
182
+ ? this._clipPixelStack[this._clipPixelStack.length - 1]
183
183
  : null;
184
- const resolvedMask = previousMask ? this._intersectMasks(previousMask, nextMask) : nextMask;
185
- this._maskPixelStack.push(resolvedMask);
184
+ const resolvedClip = previousClip ? this._intersectClips(previousClip, nextClip) : nextClip;
185
+ this._clipPixelStack.push(resolvedClip);
186
186
  return this;
187
187
  }
188
- popMask() {
189
- if (this._maskStack.length === 0) {
188
+ composeWithAlphaMask(content, mask, x, y, width, height, blendMode) {
189
+ if (width <= 0 || height <= 0) {
190
190
  return this;
191
191
  }
192
192
  this._flushActiveRenderer();
193
- const removedMask = this._maskStack.pop();
194
- if (removedMask) {
195
- removedMask.destroy();
193
+ this._setActiveRenderer(null);
194
+ if (!this._maskCompositorConnected) {
195
+ this._maskCompositor.connect(this.device);
196
+ this._maskCompositorConnected = true;
196
197
  }
197
- this._maskPixelStack.pop();
198
+ this._maskCompositor.compose(this, content, mask, x, y, width, height, blendMode);
199
+ return this;
200
+ }
201
+ popScissorRect() {
202
+ if (this._clipBoundsStack.length === 0) {
203
+ return this;
204
+ }
205
+ this._flushActiveRenderer();
206
+ const removedClip = this._clipBoundsStack.pop();
207
+ if (removedClip) {
208
+ removedClip.destroy();
209
+ }
210
+ this._clipPixelStack.pop();
198
211
  return this;
199
212
  }
200
213
  getScissorRect() {
201
- if (this._maskPixelStack.length === 0) {
214
+ if (this._clipPixelStack.length === 0) {
202
215
  return null;
203
216
  }
204
- const mask = this._maskPixelStack[this._maskPixelStack.length - 1];
217
+ const clip = this._clipPixelStack[this._clipPixelStack.length - 1];
205
218
  return {
206
- x: mask.x,
207
- y: mask.y,
208
- width: mask.width,
209
- height: mask.height,
219
+ x: clip.x,
220
+ y: clip.y,
221
+ width: clip.width,
222
+ height: clip.height,
210
223
  };
211
224
  }
212
225
  acquireRenderTexture(width, height) {
@@ -269,13 +282,17 @@ class WebGpuRenderManager {
269
282
  this.rendererRegistry.destroy();
270
283
  this._destroyManagedTextures();
271
284
  this._destroyTemporaryRenderTextures();
272
- for (const mask of this._maskStack) {
273
- mask.destroy();
285
+ for (const clipBounds of this._clipBoundsStack) {
286
+ clipBounds.destroy();
287
+ }
288
+ this._clipBoundsStack.length = 0;
289
+ this._clipPixelStack.length = 0;
290
+ this._clipPointA.destroy();
291
+ this._clipPointB.destroy();
292
+ if (this._maskCompositorConnected) {
293
+ this._maskCompositor.disconnect();
294
+ this._maskCompositorConnected = false;
274
295
  }
275
- this._maskStack.length = 0;
276
- this._maskPixelStack.length = 0;
277
- this._maskPointA.destroy();
278
- this._maskPointB.destroy();
279
296
  for (const target of Array.from(this._renderTargetDestroyHandlers.keys())) {
280
297
  this._unsubscribeRenderTarget(target);
281
298
  }
@@ -417,12 +434,29 @@ class WebGpuRenderManager {
417
434
  this._context = context;
418
435
  this._device = device;
419
436
  this._format = format;
420
- this._blendMode = BlendModes.Normal;
421
437
  this._hasPresentedFrame = false;
422
438
  this.rendererRegistry.connect(this);
423
439
  this.resize(this._canvas.width, this._canvas.height);
440
+ // Kick off async pipeline pre-warm for any renderer that supports
441
+ // it. Each renderer creates its full set of (blendMode × format)
442
+ // pipelines via createRenderPipelineAsync in parallel, so the first
443
+ // draw call of every blend mode does not have to block on synchronous
444
+ // pipeline creation. Renderers without a prewarmPipelines method
445
+ // continue to create pipelines lazily on first use.
446
+ const prewarmFormats = [format, managedTextureFormat];
447
+ await this._prewarmRendererPipelines(prewarmFormats);
424
448
  return this;
425
449
  }
450
+ async _prewarmRendererPipelines(formats) {
451
+ const promises = [];
452
+ for (const renderer of this.rendererRegistry.renderers()) {
453
+ const candidate = renderer;
454
+ if (typeof candidate.prewarmPipelines === 'function') {
455
+ promises.push(candidate.prewarmPipelines(formats));
456
+ }
457
+ }
458
+ await Promise.all(promises);
459
+ }
426
460
  _getGpuNavigator() {
427
461
  const gpuNavigator = navigator;
428
462
  return gpuNavigator.gpu ? gpuNavigator : null;
@@ -555,9 +589,9 @@ class WebGpuRenderManager {
555
589
  this._renderTargetDestroyHandlers.delete(target);
556
590
  }
557
591
  }
558
- _toMaskPixels(maskBounds) {
559
- const topLeft = this._renderTarget.mapCoordsToPixel(this._maskPointA.set(maskBounds.left, maskBounds.top));
560
- const bottomRight = this._renderTarget.mapCoordsToPixel(this._maskPointB.set(maskBounds.right, maskBounds.bottom));
592
+ _toClipPixels(bounds) {
593
+ const topLeft = this._renderTarget.mapCoordsToPixel(this._clipPointA.set(bounds.left, bounds.top));
594
+ const bottomRight = this._renderTarget.mapCoordsToPixel(this._clipPointB.set(bounds.right, bounds.bottom));
561
595
  const minX = Math.min(topLeft.x, bottomRight.x);
562
596
  const maxX = Math.max(topLeft.x, bottomRight.x);
563
597
  const minY = Math.min(topLeft.y, bottomRight.y);
@@ -572,7 +606,7 @@ class WebGpuRenderManager {
572
606
  const height = Math.max(0, bottom - y);
573
607
  return { x, y, width, height };
574
608
  }
575
- _intersectMasks(first, second) {
609
+ _intersectClips(first, second) {
576
610
  const left = Math.max(first.x, second.x);
577
611
  const top = Math.max(first.y, second.y);
578
612
  const right = Math.min(first.x + first.width, second.x + second.width);
@@ -773,5 +807,5 @@ fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
773
807
  }
774
808
  }
775
809
 
776
- export { WebGpuRenderManager };
777
- //# sourceMappingURL=WebGpuRenderManager.js.map
810
+ export { WebGpuBackend };
811
+ //# sourceMappingURL=WebGpuBackend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGpuBackend.js","sources":["../../../../../src/rendering/webgpu/WebGpuBackend.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { BlendModes } from '@/rendering/types';
2
+ import type { Texture } from '@/rendering/texture/Texture';
3
+ import type { RenderTexture } from '@/rendering/texture/RenderTexture';
4
+ import type { WebGpuBackend } from './WebGpuBackend';
5
+ /**
6
+ * Single-quad two-texture compositor used by
7
+ * `WebGpuBackend.composeWithAlphaMask`. Renders the content texture
8
+ * onto the active render target with each output texel's alpha multiplied
9
+ * by the mask texture's alpha. Both textures are sampled with stretched-fit
10
+ * UVs over the destination rectangle.
11
+ *
12
+ * Pipelines are cached per (target format, blend mode). The compositor is
13
+ * not a {@link AbstractWebGpuRenderer} and never participates in renderer
14
+ * registry dispatch — the manager invokes it directly.
15
+ */
16
+ export declare class WebGpuMaskCompositor {
17
+ private readonly _projectionData;
18
+ private readonly _vertexData;
19
+ private readonly _indexData;
20
+ private readonly _projectionMatrix;
21
+ private readonly _pipelines;
22
+ private _device;
23
+ private _shaderModule;
24
+ private _projectionBindGroupLayout;
25
+ private _textureBindGroupLayout;
26
+ private _pipelineLayout;
27
+ private _vertexBuffer;
28
+ private _indexBuffer;
29
+ private _projectionBuffer;
30
+ private _projectionBindGroup;
31
+ connect(device: GPUDevice): void;
32
+ disconnect(): void;
33
+ compose(manager: WebGpuBackend, content: Texture | RenderTexture, mask: Texture | RenderTexture, x: number, y: number, width: number, height: number, blendMode: BlendModes): void;
34
+ private _getOrCreatePipeline;
35
+ private _writeQuadVertices;
36
+ private _writeProjectionMatrix;
37
+ }
@@ -0,0 +1,279 @@
1
+ import { Matrix } from '../../math/Matrix.js';
2
+ import { getWebGpuBlendState } from './WebGpuBlendState.js';
3
+
4
+ /// <reference types="@webgpu/types" />
5
+ const compositorShaderSource = `
6
+ struct ProjectionUniforms {
7
+ matrix: mat4x4<f32>,
8
+ };
9
+
10
+ @group(0) @binding(0)
11
+ var<uniform> projection: ProjectionUniforms;
12
+
13
+ @group(1) @binding(0)
14
+ var contentTexture: texture_2d<f32>;
15
+ @group(1) @binding(1)
16
+ var contentSampler: sampler;
17
+ @group(1) @binding(2)
18
+ var maskTexture: texture_2d<f32>;
19
+ @group(1) @binding(3)
20
+ var maskSampler: sampler;
21
+
22
+ struct VertexInput {
23
+ @location(0) position: vec2<f32>,
24
+ @location(1) texcoord: vec2<f32>,
25
+ };
26
+
27
+ struct VertexOutput {
28
+ @builtin(position) position: vec4<f32>,
29
+ @location(0) texcoord: vec2<f32>,
30
+ };
31
+
32
+ @vertex
33
+ fn vertexMain(input: VertexInput) -> VertexOutput {
34
+ var output: VertexOutput;
35
+
36
+ output.position = projection.matrix * vec4<f32>(input.position, 0.0, 1.0);
37
+ output.texcoord = input.texcoord;
38
+
39
+ return output;
40
+ }
41
+
42
+ @fragment
43
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
44
+ let contentColor = textureSample(contentTexture, contentSampler, input.texcoord);
45
+ let maskAlpha = textureSample(maskTexture, maskSampler, input.texcoord).a;
46
+
47
+ return vec4<f32>(contentColor.rgb * maskAlpha, contentColor.a * maskAlpha);
48
+ }
49
+ `;
50
+ // 4 floats per vertex: position(x, y) + texcoord(u, v).
51
+ const vertexStrideBytes = 16;
52
+ // 16 floats per mat4x4 projection uniform.
53
+ const projectionUniformBytes = 64;
54
+ /**
55
+ * Single-quad two-texture compositor used by
56
+ * `WebGpuBackend.composeWithAlphaMask`. Renders the content texture
57
+ * onto the active render target with each output texel's alpha multiplied
58
+ * by the mask texture's alpha. Both textures are sampled with stretched-fit
59
+ * UVs over the destination rectangle.
60
+ *
61
+ * Pipelines are cached per (target format, blend mode). The compositor is
62
+ * not a {@link AbstractWebGpuRenderer} and never participates in renderer
63
+ * registry dispatch — the manager invokes it directly.
64
+ */
65
+ class WebGpuMaskCompositor {
66
+ _projectionData = new Float32Array(16);
67
+ _vertexData = new Float32Array(16); // 4 verts * 4 floats
68
+ _indexData = new Uint16Array([0, 1, 2, 0, 2, 3]);
69
+ _projectionMatrix = new Matrix();
70
+ _pipelines = new Map();
71
+ _device = null;
72
+ _shaderModule = null;
73
+ _projectionBindGroupLayout = null;
74
+ _textureBindGroupLayout = null;
75
+ _pipelineLayout = null;
76
+ _vertexBuffer = null;
77
+ _indexBuffer = null;
78
+ _projectionBuffer = null;
79
+ _projectionBindGroup = null;
80
+ connect(device) {
81
+ if (this._device !== null) {
82
+ return;
83
+ }
84
+ this._device = device;
85
+ this._shaderModule = device.createShaderModule({ code: compositorShaderSource });
86
+ this._projectionBindGroupLayout = device.createBindGroupLayout({
87
+ entries: [
88
+ {
89
+ binding: 0,
90
+ visibility: GPUShaderStage.VERTEX,
91
+ buffer: { type: 'uniform' },
92
+ },
93
+ ],
94
+ });
95
+ this._textureBindGroupLayout = device.createBindGroupLayout({
96
+ entries: [
97
+ { binding: 0, visibility: GPUShaderStage.FRAGMENT, texture: {} },
98
+ { binding: 1, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
99
+ { binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: {} },
100
+ { binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
101
+ ],
102
+ });
103
+ this._pipelineLayout = device.createPipelineLayout({
104
+ bindGroupLayouts: [this._projectionBindGroupLayout, this._textureBindGroupLayout],
105
+ });
106
+ this._vertexBuffer = device.createBuffer({
107
+ size: 4 * vertexStrideBytes,
108
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
109
+ });
110
+ this._indexBuffer = device.createBuffer({
111
+ size: 6 * Uint16Array.BYTES_PER_ELEMENT,
112
+ usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
113
+ });
114
+ device.queue.writeBuffer(this._indexBuffer, 0, this._indexData);
115
+ this._projectionBuffer = device.createBuffer({
116
+ size: projectionUniformBytes,
117
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
118
+ });
119
+ this._projectionBindGroup = device.createBindGroup({
120
+ layout: this._projectionBindGroupLayout,
121
+ entries: [
122
+ { binding: 0, resource: { buffer: this._projectionBuffer } },
123
+ ],
124
+ });
125
+ }
126
+ disconnect() {
127
+ if (this._device === null) {
128
+ return;
129
+ }
130
+ this._vertexBuffer?.destroy();
131
+ this._indexBuffer?.destroy();
132
+ this._projectionBuffer?.destroy();
133
+ this._vertexBuffer = null;
134
+ this._indexBuffer = null;
135
+ this._projectionBuffer = null;
136
+ this._projectionBindGroup = null;
137
+ this._pipelineLayout = null;
138
+ this._textureBindGroupLayout = null;
139
+ this._projectionBindGroupLayout = null;
140
+ this._shaderModule = null;
141
+ this._pipelines.clear();
142
+ this._device = null;
143
+ }
144
+ compose(manager, content, mask, x, y, width, height, blendMode) {
145
+ if (this._device === null) {
146
+ throw new Error('WebGpuMaskCompositor: not connected.');
147
+ }
148
+ if (width <= 0 || height <= 0) {
149
+ return;
150
+ }
151
+ const device = this._device;
152
+ this._writeQuadVertices(x, y, x + width, y + height);
153
+ device.queue.writeBuffer(this._vertexBuffer, 0, this._vertexData);
154
+ this._writeProjectionMatrix(manager.view.getTransform());
155
+ device.queue.writeBuffer(this._projectionBuffer, 0, this._projectionData);
156
+ const contentBinding = manager.getTextureBinding(content);
157
+ const maskBinding = manager.getTextureBinding(mask);
158
+ const textureBindGroup = device.createBindGroup({
159
+ layout: this._textureBindGroupLayout,
160
+ entries: [
161
+ { binding: 0, resource: contentBinding.view },
162
+ { binding: 1, resource: contentBinding.sampler },
163
+ { binding: 2, resource: maskBinding.view },
164
+ { binding: 3, resource: maskBinding.sampler },
165
+ ],
166
+ });
167
+ const targetFormat = manager.renderTargetFormat;
168
+ const pipeline = this._getOrCreatePipeline(targetFormat, blendMode);
169
+ const encoder = device.createCommandEncoder();
170
+ const pass = encoder.beginRenderPass({
171
+ colorAttachments: [manager.createColorAttachment()],
172
+ });
173
+ manager.stats.renderPasses++;
174
+ const scissor = manager.getScissorRect();
175
+ if (scissor !== null) {
176
+ pass.setScissorRect(scissor.x, scissor.y, scissor.width, scissor.height);
177
+ }
178
+ pass.setPipeline(pipeline);
179
+ pass.setBindGroup(0, this._projectionBindGroup);
180
+ pass.setBindGroup(1, textureBindGroup);
181
+ pass.setVertexBuffer(0, this._vertexBuffer);
182
+ pass.setIndexBuffer(this._indexBuffer, 'uint16');
183
+ pass.drawIndexed(6);
184
+ manager.stats.batches++;
185
+ manager.stats.drawCalls++;
186
+ pass.end();
187
+ manager.submit(encoder.finish());
188
+ }
189
+ _getOrCreatePipeline(format, blendMode) {
190
+ const key = `${format}|${blendMode}`;
191
+ const cached = this._pipelines.get(key);
192
+ if (cached !== undefined) {
193
+ return cached;
194
+ }
195
+ const device = this._device;
196
+ const pipeline = device.createRenderPipeline({
197
+ layout: this._pipelineLayout,
198
+ vertex: {
199
+ module: this._shaderModule,
200
+ entryPoint: 'vertexMain',
201
+ buffers: [
202
+ {
203
+ arrayStride: vertexStrideBytes,
204
+ attributes: [
205
+ { shaderLocation: 0, offset: 0, format: 'float32x2' },
206
+ { shaderLocation: 1, offset: 8, format: 'float32x2' },
207
+ ],
208
+ },
209
+ ],
210
+ },
211
+ fragment: {
212
+ module: this._shaderModule,
213
+ entryPoint: 'fragmentMain',
214
+ targets: [
215
+ {
216
+ format,
217
+ blend: getWebGpuBlendState(blendMode),
218
+ },
219
+ ],
220
+ },
221
+ primitive: { topology: 'triangle-list' },
222
+ });
223
+ this._pipelines.set(key, pipeline);
224
+ return pipeline;
225
+ }
226
+ _writeQuadVertices(left, top, right, bottom) {
227
+ const view = this._vertexData;
228
+ // Vertex 0: top-left (UV 0, 0)
229
+ view[0] = left;
230
+ view[1] = top;
231
+ view[2] = 0;
232
+ view[3] = 0;
233
+ // Vertex 1: top-right (UV 1, 0)
234
+ view[4] = right;
235
+ view[5] = top;
236
+ view[6] = 1;
237
+ view[7] = 0;
238
+ // Vertex 2: bottom-right (UV 1, 1)
239
+ view[8] = right;
240
+ view[9] = bottom;
241
+ view[10] = 1;
242
+ view[11] = 1;
243
+ // Vertex 3: bottom-left (UV 0, 1)
244
+ view[12] = left;
245
+ view[13] = bottom;
246
+ view[14] = 0;
247
+ view[15] = 1;
248
+ }
249
+ _writeProjectionMatrix(viewMatrix) {
250
+ // Pack the 3x3 affine view matrix into a 4x4 column-major mat4x4
251
+ // for WGSL, mirroring the layout used by WebGpuPrimitiveRenderer
252
+ // (see `_writeShapeVertices` in that file for the rationale).
253
+ const m = this._projectionMatrix.copy(viewMatrix);
254
+ const data = this._projectionData;
255
+ // col 0
256
+ data[0] = m.a;
257
+ data[1] = m.c;
258
+ data[2] = 0;
259
+ data[3] = 0;
260
+ // col 1
261
+ data[4] = m.b;
262
+ data[5] = m.d;
263
+ data[6] = 0;
264
+ data[7] = 0;
265
+ // col 2
266
+ data[8] = 0;
267
+ data[9] = 0;
268
+ data[10] = 1;
269
+ data[11] = 0;
270
+ // col 3
271
+ data[12] = m.x;
272
+ data[13] = m.y;
273
+ data[14] = 0;
274
+ data[15] = 1;
275
+ }
276
+ }
277
+
278
+ export { WebGpuMaskCompositor };
279
+ //# sourceMappingURL=WebGpuMaskCompositor.js.map