@codexo/exojs 0.14.0 → 0.15.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 (277) hide show
  1. package/CHANGELOG.md +183 -0
  2. package/README.md +2 -4
  3. package/dist/esm/animation/Tween.d.ts.map +1 -1
  4. package/dist/esm/animation/Tween.js +0 -1
  5. package/dist/esm/animation/Tween.js.map +1 -1
  6. package/dist/esm/animation/TweenManager.d.ts +44 -5
  7. package/dist/esm/animation/TweenManager.d.ts.map +1 -1
  8. package/dist/esm/animation/TweenManager.js +57 -5
  9. package/dist/esm/animation/TweenManager.js.map +1 -1
  10. package/dist/esm/animation/TweenSequencer.d.ts +139 -0
  11. package/dist/esm/animation/TweenSequencer.d.ts.map +1 -0
  12. package/dist/esm/animation/TweenSequencer.js +305 -0
  13. package/dist/esm/animation/TweenSequencer.js.map +1 -0
  14. package/dist/esm/animation/index.d.ts +1 -0
  15. package/dist/esm/animation/index.d.ts.map +1 -1
  16. package/dist/esm/audio/Playable.d.ts +6 -1
  17. package/dist/esm/audio/Playable.d.ts.map +1 -1
  18. package/dist/esm/audio/WorkletEffect.d.ts +34 -20
  19. package/dist/esm/audio/WorkletEffect.d.ts.map +1 -1
  20. package/dist/esm/audio/WorkletEffect.js +92 -25
  21. package/dist/esm/audio/WorkletEffect.js.map +1 -1
  22. package/dist/esm/core/Application.d.ts +43 -5
  23. package/dist/esm/core/Application.d.ts.map +1 -1
  24. package/dist/esm/core/Application.js +83 -9
  25. package/dist/esm/core/Application.js.map +1 -1
  26. package/dist/esm/core/BuildInfo.js +2 -2
  27. package/dist/esm/core/Codec.d.ts +41 -0
  28. package/dist/esm/core/Codec.d.ts.map +1 -0
  29. package/dist/esm/core/Codec.js +79 -0
  30. package/dist/esm/core/Codec.js.map +1 -0
  31. package/dist/esm/core/FixedTimestep.d.ts +28 -0
  32. package/dist/esm/core/FixedTimestep.d.ts.map +1 -0
  33. package/dist/esm/core/FixedTimestep.js +62 -0
  34. package/dist/esm/core/FixedTimestep.js.map +1 -0
  35. package/dist/esm/core/Scene.d.ts +14 -0
  36. package/dist/esm/core/Scene.d.ts.map +1 -1
  37. package/dist/esm/core/Scene.js +18 -0
  38. package/dist/esm/core/Scene.js.map +1 -1
  39. package/dist/esm/core/SceneManager.d.ts +7 -0
  40. package/dist/esm/core/SceneManager.d.ts.map +1 -1
  41. package/dist/esm/core/SceneManager.js +20 -4
  42. package/dist/esm/core/SceneManager.js.map +1 -1
  43. package/dist/esm/core/SceneNode.d.ts +46 -7
  44. package/dist/esm/core/SceneNode.d.ts.map +1 -1
  45. package/dist/esm/core/SceneNode.js +73 -12
  46. package/dist/esm/core/SceneNode.js.map +1 -1
  47. package/dist/esm/core/Stage.d.ts +7 -0
  48. package/dist/esm/core/Stage.d.ts.map +1 -1
  49. package/dist/esm/core/SystemRegistry.d.ts +5 -0
  50. package/dist/esm/core/SystemRegistry.d.ts.map +1 -1
  51. package/dist/esm/core/SystemRegistry.js +10 -0
  52. package/dist/esm/core/SystemRegistry.js.map +1 -1
  53. package/dist/esm/core/index.d.ts +4 -0
  54. package/dist/esm/core/index.d.ts.map +1 -1
  55. package/dist/esm/core/logging.d.ts +34 -0
  56. package/dist/esm/core/logging.d.ts.map +1 -0
  57. package/dist/esm/core/logging.js +59 -0
  58. package/dist/esm/core/logging.js.map +1 -0
  59. package/dist/esm/core/serialization/commonFields.d.ts.map +1 -1
  60. package/dist/esm/core/serialization/commonFields.js +6 -0
  61. package/dist/esm/core/serialization/commonFields.js.map +1 -1
  62. package/dist/esm/core/serialization/renderingSerializers.d.ts.map +1 -1
  63. package/dist/esm/core/serialization/renderingSerializers.js +14 -5
  64. package/dist/esm/core/serialization/renderingSerializers.js.map +1 -1
  65. package/dist/esm/debug/BoundingBoxesLayer.d.ts.map +1 -1
  66. package/dist/esm/debug/BoundingBoxesLayer.js +2 -1
  67. package/dist/esm/debug/BoundingBoxesLayer.js.map +1 -1
  68. package/dist/esm/debug/HitTestLayer.js +4 -4
  69. package/dist/esm/debug/HitTestLayer.js.map +1 -1
  70. package/dist/esm/debug/PerformanceLayer.js +1 -1
  71. package/dist/esm/debug/PerformanceLayer.js.map +1 -1
  72. package/dist/esm/debug/RenderPassInspectorLayer.js +2 -2
  73. package/dist/esm/debug/RenderPassInspectorLayer.js.map +1 -1
  74. package/dist/esm/index.js +7 -2
  75. package/dist/esm/index.js.map +1 -1
  76. package/dist/esm/input/Gamepad.d.ts +10 -0
  77. package/dist/esm/input/Gamepad.d.ts.map +1 -1
  78. package/dist/esm/input/Gamepad.js +12 -0
  79. package/dist/esm/input/Gamepad.js.map +1 -1
  80. package/dist/esm/input/InputManager.d.ts.map +1 -1
  81. package/dist/esm/input/InputManager.js +5 -0
  82. package/dist/esm/input/InputManager.js.map +1 -1
  83. package/dist/esm/input/InteractionManager.js +4 -4
  84. package/dist/esm/input/InteractionManager.js.map +1 -1
  85. package/dist/esm/math/AbstractVector.d.ts +4 -3
  86. package/dist/esm/math/AbstractVector.d.ts.map +1 -1
  87. package/dist/esm/math/AbstractVector.js +5 -4
  88. package/dist/esm/math/AbstractVector.js.map +1 -1
  89. package/dist/esm/math/ObservableVector.d.ts +2 -0
  90. package/dist/esm/math/ObservableVector.d.ts.map +1 -1
  91. package/dist/esm/math/ObservableVector.js +9 -0
  92. package/dist/esm/math/ObservableVector.js.map +1 -1
  93. package/dist/esm/math/Polygon.d.ts.map +1 -1
  94. package/dist/esm/math/Polygon.js +4 -1
  95. package/dist/esm/math/Polygon.js.map +1 -1
  96. package/dist/esm/math/collision-detection.d.ts.map +1 -1
  97. package/dist/esm/math/collision-detection.js +14 -14
  98. package/dist/esm/math/collision-detection.js.map +1 -1
  99. package/dist/esm/math/collision-primitives.d.ts +1 -1
  100. package/dist/esm/math/collision-primitives.d.ts.map +1 -1
  101. package/dist/esm/math/collision-primitives.js +4 -1
  102. package/dist/esm/math/collision-primitives.js.map +1 -1
  103. package/dist/esm/rendering/BackendTargetPass.d.ts +1 -1
  104. package/dist/esm/rendering/BackendTargetPass.d.ts.map +1 -1
  105. package/dist/esm/rendering/CallbackRenderPass.d.ts +14 -10
  106. package/dist/esm/rendering/CallbackRenderPass.d.ts.map +1 -1
  107. package/dist/esm/rendering/CallbackRenderPass.js +16 -11
  108. package/dist/esm/rendering/CallbackRenderPass.js.map +1 -1
  109. package/dist/esm/rendering/DrawContext.d.ts +48 -0
  110. package/dist/esm/rendering/DrawContext.d.ts.map +1 -0
  111. package/dist/esm/rendering/PassContext.d.ts +42 -0
  112. package/dist/esm/rendering/PassContext.d.ts.map +1 -0
  113. package/dist/esm/rendering/PassContext.js +48 -0
  114. package/dist/esm/rendering/PassContext.js.map +1 -0
  115. package/dist/esm/rendering/RenderBackend.d.ts +14 -0
  116. package/dist/esm/rendering/RenderBackend.d.ts.map +1 -1
  117. package/dist/esm/rendering/RenderNode.d.ts.map +1 -1
  118. package/dist/esm/rendering/RenderNode.js +2 -2
  119. package/dist/esm/rendering/RenderNode.js.map +1 -1
  120. package/dist/esm/rendering/RenderNodePass.d.ts +1 -1
  121. package/dist/esm/rendering/RenderNodePass.d.ts.map +1 -1
  122. package/dist/esm/rendering/RenderingContext.d.ts +47 -16
  123. package/dist/esm/rendering/RenderingContext.d.ts.map +1 -1
  124. package/dist/esm/rendering/RenderingContext.js +134 -36
  125. package/dist/esm/rendering/RenderingContext.js.map +1 -1
  126. package/dist/esm/rendering/TransformBuffer.d.ts +23 -0
  127. package/dist/esm/rendering/TransformBuffer.d.ts.map +1 -1
  128. package/dist/esm/rendering/TransformBuffer.js +58 -0
  129. package/dist/esm/rendering/TransformBuffer.js.map +1 -1
  130. package/dist/esm/rendering/View.d.ts +38 -0
  131. package/dist/esm/rendering/View.d.ts.map +1 -1
  132. package/dist/esm/rendering/View.js +37 -0
  133. package/dist/esm/rendering/View.js.map +1 -1
  134. package/dist/esm/rendering/filters/WebGpuShaderFilter.d.ts.map +1 -1
  135. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +9 -2
  136. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  137. package/dist/esm/rendering/material/MeshMaterial.d.ts +20 -1
  138. package/dist/esm/rendering/material/MeshMaterial.d.ts.map +1 -1
  139. package/dist/esm/rendering/material/MeshMaterial.js +17 -0
  140. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -1
  141. package/dist/esm/rendering/material/SpriteMaterial.d.ts +20 -1
  142. package/dist/esm/rendering/material/SpriteMaterial.d.ts.map +1 -1
  143. package/dist/esm/rendering/material/SpriteMaterial.js +17 -0
  144. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -1
  145. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts.map +1 -1
  146. package/dist/esm/rendering/plan/RenderEffectExecutor.js +7 -2
  147. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -1
  148. package/dist/esm/rendering/plan/RenderInstruction.d.ts +5 -2
  149. package/dist/esm/rendering/plan/RenderInstruction.d.ts.map +1 -1
  150. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts.map +1 -1
  151. package/dist/esm/rendering/plan/RenderPlanBuilder.js +23 -5
  152. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -1
  153. package/dist/esm/rendering/plan/RenderScope.d.ts +7 -0
  154. package/dist/esm/rendering/plan/RenderScope.d.ts.map +1 -1
  155. package/dist/esm/rendering/primitives/Graphics.d.ts +17 -1
  156. package/dist/esm/rendering/primitives/Graphics.d.ts.map +1 -1
  157. package/dist/esm/rendering/primitives/Graphics.js +50 -15
  158. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  159. package/dist/esm/rendering/public.d.ts +5 -5
  160. package/dist/esm/rendering/public.d.ts.map +1 -1
  161. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts +57 -19
  162. package/dist/esm/rendering/sprite/AnimatedSprite.d.ts.map +1 -1
  163. package/dist/esm/rendering/sprite/AnimatedSprite.js +138 -31
  164. package/dist/esm/rendering/sprite/AnimatedSprite.js.map +1 -1
  165. package/dist/esm/rendering/sprite/Sprite.d.ts.map +1 -1
  166. package/dist/esm/rendering/sprite/Sprite.js +8 -0
  167. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  168. package/dist/esm/rendering/text/BitmapText.d.ts.map +1 -1
  169. package/dist/esm/rendering/text/BitmapText.js +2 -0
  170. package/dist/esm/rendering/text/BitmapText.js.map +1 -1
  171. package/dist/esm/rendering/text/HTMLText.d.ts.map +1 -1
  172. package/dist/esm/rendering/text/HTMLText.js +2 -2
  173. package/dist/esm/rendering/text/HTMLText.js.map +1 -1
  174. package/dist/esm/rendering/text/Text.d.ts.map +1 -1
  175. package/dist/esm/rendering/text/Text.js +2 -0
  176. package/dist/esm/rendering/text/Text.js.map +1 -1
  177. package/dist/esm/rendering/text/TextLayout.d.ts.map +1 -1
  178. package/dist/esm/rendering/text/TextLayout.js +2 -3
  179. package/dist/esm/rendering/text/TextLayout.js.map +1 -1
  180. package/dist/esm/rendering/types.d.ts +37 -13
  181. package/dist/esm/rendering/types.d.ts.map +1 -1
  182. package/dist/esm/rendering/types.js +37 -13
  183. package/dist/esm/rendering/types.js.map +1 -1
  184. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts +41 -0
  185. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.d.ts.map +1 -0
  186. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js +222 -0
  187. package/dist/esm/rendering/webgl2/WebGl2BackdropBlendCompositor.js.map +1 -0
  188. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +34 -1
  189. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts.map +1 -1
  190. package/dist/esm/rendering/webgl2/WebGl2Backend.js +108 -60
  191. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  192. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts.map +1 -1
  193. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +50 -11
  194. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  195. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js +4 -0
  196. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.frag.js.map +1 -0
  197. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js +4 -0
  198. package/dist/esm/rendering/webgl2/glsl/backdrop-blend.vert.js.map +1 -0
  199. package/dist/esm/rendering/webgl2/glsl/text.vert.js +1 -1
  200. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts +72 -0
  201. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.d.ts.map +1 -0
  202. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js +494 -0
  203. package/dist/esm/rendering/webgpu/WebGpuBackdropBlendCompositor.js.map +1 -0
  204. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +27 -0
  205. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts.map +1 -1
  206. package/dist/esm/rendering/webgpu/WebGpuBackend.js +157 -60
  207. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  208. package/dist/esm/rendering/webgpu/WebGpuBlendState.d.ts.map +1 -1
  209. package/dist/esm/rendering/webgpu/WebGpuBlendState.js +5 -29
  210. package/dist/esm/rendering/webgpu/WebGpuBlendState.js.map +1 -1
  211. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts +2 -0
  212. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.d.ts.map +1 -1
  213. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +2 -1
  214. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  215. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +4 -0
  216. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts.map +1 -1
  217. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +3 -1
  218. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  219. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts +2 -0
  220. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.d.ts.map +1 -1
  221. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js +2 -1
  222. package/dist/esm/rendering/webgpu/WebGpuNineSliceSpriteRenderer.js.map +1 -1
  223. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +8 -0
  224. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts.map +1 -1
  225. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +20 -0
  226. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -1
  227. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts +6 -0
  228. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.d.ts.map +1 -1
  229. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js +4 -1
  230. package/dist/esm/rendering/webgpu/WebGpuRepeatingSpriteRenderer.js.map +1 -1
  231. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +2 -0
  232. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts.map +1 -1
  233. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +2 -1
  234. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  235. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +2 -0
  236. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts.map +1 -1
  237. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +2 -1
  238. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -1
  239. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +2 -0
  240. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts.map +1 -1
  241. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +3 -2
  242. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  243. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +3 -1
  244. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts.map +1 -1
  245. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +29 -5
  246. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -1
  247. package/dist/esm/resources/Loader.d.ts +13 -0
  248. package/dist/esm/resources/Loader.d.ts.map +1 -1
  249. package/dist/esm/resources/Loader.js +67 -7
  250. package/dist/esm/resources/Loader.js.map +1 -1
  251. package/dist/esm/resources/coreAssetBindings.d.ts +11 -0
  252. package/dist/esm/resources/coreAssetBindings.d.ts.map +1 -1
  253. package/dist/esm/resources/coreAssetBindings.js +10 -2
  254. package/dist/esm/resources/coreAssetBindings.js.map +1 -1
  255. package/dist/esm/ui/ScrollContainer.d.ts +63 -0
  256. package/dist/esm/ui/ScrollContainer.d.ts.map +1 -0
  257. package/dist/esm/ui/ScrollContainer.js +99 -0
  258. package/dist/esm/ui/ScrollContainer.js.map +1 -0
  259. package/dist/esm/ui/Tooltip.d.ts +67 -0
  260. package/dist/esm/ui/Tooltip.d.ts.map +1 -0
  261. package/dist/esm/ui/Tooltip.js +133 -0
  262. package/dist/esm/ui/Tooltip.js.map +1 -0
  263. package/dist/esm/ui/index.d.ts +4 -0
  264. package/dist/esm/ui/index.d.ts.map +1 -1
  265. package/dist/exo.debug.esm.js +1 -1
  266. package/dist/exo.debug.esm.js.map +1 -1
  267. package/dist/exo.esm.js +1 -1
  268. package/dist/exo.esm.js.map +1 -1
  269. package/dist/exo.iife.js +45273 -0
  270. package/dist/exo.iife.js.map +1 -0
  271. package/dist/exo.iife.min.js +2 -0
  272. package/dist/exo.iife.min.js.map +1 -0
  273. package/package.json +15 -3
  274. package/dist/esm/rendering/Camera.d.ts +0 -34
  275. package/dist/esm/rendering/Camera.d.ts.map +0 -1
  276. package/dist/esm/rendering/Camera.js +0 -38
  277. package/dist/esm/rendering/Camera.js.map +0 -1
@@ -0,0 +1,494 @@
1
+ import { Matrix } from '../../math/Matrix.js';
2
+ import { BlendModes } from '../types.js';
3
+ import { getWebGpuBlendState } from './WebGpuBlendState.js';
4
+ import { stencilContentDepthStencilState } from './WebGpuStencilState.js';
5
+
6
+ /// <reference types="@webgpu/types" />
7
+ /** WGSL source for the backdrop-blend compositor pipeline. @internal */
8
+ const compositorShaderSource = `
9
+ struct ProjectionUniforms {
10
+ matrix: mat4x4<f32>,
11
+ };
12
+
13
+ struct BlendUniforms {
14
+ mode: u32,
15
+ opaqueBackdrop: f32,
16
+ };
17
+
18
+ @group(0) @binding(0)
19
+ var<uniform> projection: ProjectionUniforms;
20
+
21
+ @group(1) @binding(0)
22
+ var sourceTexture: texture_2d<f32>;
23
+ @group(1) @binding(1)
24
+ var sourceSampler: sampler;
25
+ @group(1) @binding(2)
26
+ var backdropTexture: texture_2d<f32>;
27
+ @group(1) @binding(3)
28
+ var backdropSampler: sampler;
29
+
30
+ @group(2) @binding(0)
31
+ var<uniform> blend: BlendUniforms;
32
+
33
+ struct VertexInput {
34
+ @location(0) position: vec2<f32>,
35
+ @location(1) texcoord: vec2<f32>,
36
+ };
37
+
38
+ struct VertexOutput {
39
+ @builtin(position) position: vec4<f32>,
40
+ @location(0) texcoord: vec2<f32>,
41
+ };
42
+
43
+ @vertex
44
+ fn vertexMain(input: VertexInput) -> VertexOutput {
45
+ var output: VertexOutput;
46
+
47
+ output.position = projection.matrix * vec4<f32>(input.position, 0.0, 1.0);
48
+ output.texcoord = input.texcoord;
49
+
50
+ return output;
51
+ }
52
+
53
+ fn unpremultiply(color: vec4<f32>) -> vec3<f32> {
54
+ if (color.a > 0.0) {
55
+ return color.rgb / color.a;
56
+ }
57
+
58
+ return vec3<f32>(0.0);
59
+ }
60
+
61
+ // W3C separable blend B(Cb, Cs) for one channel (straight color in [0, 1]).
62
+ // Mode values match the BlendModes enum (src/rendering/types.ts).
63
+ fn blendChannel(mode: u32, cb: f32, cs: f32) -> f32 {
64
+ switch mode {
65
+ case 3u { return cb * cs; } // Multiply
66
+ case 4u { return cb + cs - cb * cs; } // Screen
67
+ case 5u { return min(cb, cs); } // Darken
68
+ case 6u { return max(cb, cs); } // Lighten
69
+ case 7u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cb <= 0.5); } // Overlay
70
+ case 8u { // ColorDodge
71
+ if (cb <= 0.0) { return 0.0; }
72
+ return select(min(1.0, cb / (1.0 - cs)), 1.0, cs >= 1.0);
73
+ }
74
+ case 9u { // ColorBurn
75
+ if (cb >= 1.0) { return 1.0; }
76
+ return select(1.0 - min(1.0, (1.0 - cb) / cs), 0.0, cs <= 0.0);
77
+ }
78
+ case 10u { return select(1.0 - 2.0 * (1.0 - cb) * (1.0 - cs), 2.0 * cb * cs, cs <= 0.5); } // HardLight
79
+ case 11u { // SoftLight
80
+ if (cs <= 0.5) { return cb - (1.0 - 2.0 * cs) * cb * (1.0 - cb); }
81
+ let d = select(sqrt(cb), ((16.0 * cb - 12.0) * cb + 4.0) * cb, cb <= 0.25);
82
+ return cb + (2.0 * cs - 1.0) * (d - cb);
83
+ }
84
+ case 12u { return abs(cb - cs); } // Difference
85
+ case 13u { return cb + cs - 2.0 * cb * cs; } // Exclusion
86
+ default { return min(cb, cs); } // Darken
87
+ }
88
+ }
89
+
90
+ fn blendSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
91
+ return vec3<f32>(blendChannel(mode, cb.x, cs.x), blendChannel(mode, cb.y, cs.y), blendChannel(mode, cb.z, cs.z));
92
+ }
93
+
94
+ // Non-separable helpers (W3C): operate on the whole color.
95
+ fn lum(c: vec3<f32>) -> f32 {
96
+ return dot(c, vec3<f32>(0.3, 0.59, 0.11));
97
+ }
98
+
99
+ fn clipColor(input: vec3<f32>) -> vec3<f32> {
100
+ var c = input;
101
+ let l = lum(c);
102
+ let n = min(min(c.x, c.y), c.z);
103
+ let x = max(max(c.x, c.y), c.z);
104
+
105
+ if (n < 0.0) { c = l + ((c - l) * l) / (l - n); }
106
+ if (x > 1.0) { c = l + ((c - l) * (1.0 - l)) / (x - l); }
107
+
108
+ return c;
109
+ }
110
+
111
+ fn setLum(c: vec3<f32>, l: f32) -> vec3<f32> {
112
+ return clipColor(c + (l - lum(c)));
113
+ }
114
+
115
+ fn sat(c: vec3<f32>) -> f32 {
116
+ return max(max(c.x, c.y), c.z) - min(min(c.x, c.y), c.z);
117
+ }
118
+
119
+ // Map the channels so min -> 0, max -> s, mid -> proportional (W3C SetSat result).
120
+ fn setSat(c: vec3<f32>, s: f32) -> vec3<f32> {
121
+ let mn = min(min(c.x, c.y), c.z);
122
+ let mx = max(max(c.x, c.y), c.z);
123
+
124
+ return select(vec3<f32>(0.0), (c - mn) * (s / (mx - mn)), mx > mn);
125
+ }
126
+
127
+ fn blendNonSeparable(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
128
+ switch mode {
129
+ case 14u { return setLum(setSat(cs, sat(cb)), lum(cb)); } // Hue
130
+ case 15u { return setLum(setSat(cb, sat(cs)), lum(cb)); } // Saturation
131
+ case 16u { return setLum(cs, lum(cb)); } // Color
132
+ default { return setLum(cb, lum(cs)); } // Luminosity
133
+ }
134
+ }
135
+
136
+ fn blendAdvanced(mode: u32, cb: vec3<f32>, cs: vec3<f32>) -> vec3<f32> {
137
+ if (mode >= 14u) { return blendNonSeparable(mode, cb, cs); }
138
+ return blendSeparable(mode, cb, cs);
139
+ }
140
+
141
+ @fragment
142
+ fn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {
143
+ let src = textureSample(sourceTexture, sourceSampler, input.texcoord);
144
+ // copyTextureToTexture preserves the target's top-left orientation, so the
145
+ // backdrop is sampled at the same UV as the quad — no V-flip (unlike the
146
+ // WebGL2 framebuffer-blit path, which reads bottom-left order).
147
+ let dst = textureSample(backdropTexture, backdropSampler, input.texcoord);
148
+
149
+ let alphaSource = src.a;
150
+ // An opaque target (the on-screen root canvas, alphaMode 'opaque') has an
151
+ // unreliable captured alpha; force full backdrop coverage so the blend is
152
+ // not skipped. Offscreen RenderTextures carry real alpha.
153
+ let alphaBackdrop = max(dst.a, blend.opaqueBackdrop);
154
+ let colorSource = unpremultiply(src);
155
+ let colorBackdrop = unpremultiply(dst);
156
+
157
+ let blended = blendAdvanced(blend.mode, colorBackdrop, colorSource);
158
+ // Cs' = (1 - αb)·Cs + αb·B(Cb, Cs)
159
+ let mixedSource = mix(colorSource, blended, alphaBackdrop);
160
+
161
+ // Premultiplied blended source; the GPU source-over composites it over the
162
+ // untouched backdrop already in the target (αs = 0 passes the backdrop through).
163
+ return vec4<f32>(mixedSource * alphaSource, alphaSource);
164
+ }
165
+ `;
166
+ // 4 floats per vertex: position(x, y) + texcoord(u, v).
167
+ const vertexStrideBytes = 16;
168
+ // 16 floats per mat4x4 projection uniform.
169
+ const projectionUniformBytes = 64;
170
+ // mode (u32) + opaqueBackdrop (f32), padded to the 16-byte uniform alignment.
171
+ const blendUniformBytes = 16;
172
+ /**
173
+ * Single-quad backdrop-aware blend compositor used by
174
+ * `WebGpuBackend.composeWithBackdropBlend` (spike: invoked directly). Captures
175
+ * the active target's `[x, y, width, height]` region into a compositor-owned
176
+ * texture via `copyTextureToTexture`, samples the premultiplied source (group 1,
177
+ * slot 0) and captured backdrop (slot 2), computes the W3C blend for the
178
+ * requested {@link BlendModes}, and draws the result over the target with normal
179
+ * (premultiplied source-over) blending — so the GPU composites the blended
180
+ * source over the backdrop already in the target.
181
+ *
182
+ * Mirrors {@link WebGpuMaskCompositor}'s structure. The backdrop texture is
183
+ * compositor-owned (not a pooled {@link RenderTexture}) because
184
+ * `copyTextureToTexture` requires the destination format to equal the source:
185
+ * the root canvas uses the preferred format (often `bgra8unorm`) while pooled
186
+ * render textures are `rgba8unorm`, so a pool RT cannot receive a root-target
187
+ * capture. The owned texture is allocated in the target's own format.
188
+ *
189
+ * Pipelines are cached per (target format, stencil). The compositor is not an
190
+ * {@link AbstractWebGpuRenderer} and never participates in renderer registry
191
+ * dispatch — the backend invokes it directly.
192
+ */
193
+ class WebGpuBackdropBlendCompositor {
194
+ _projectionData = new Float32Array(16);
195
+ _vertexData = new Float32Array(16); // 4 verts * 4 floats
196
+ _indexData = new Uint16Array([0, 1, 2, 0, 2, 3]);
197
+ _blendData = new ArrayBuffer(blendUniformBytes);
198
+ _blendModeView = new Uint32Array(this._blendData, 0, 1);
199
+ _blendOpaqueView = new Float32Array(this._blendData, 4, 1);
200
+ _projectionMatrix = new Matrix();
201
+ _pipelines = new Map();
202
+ _device = null;
203
+ _shaderModule = null;
204
+ _projectionBindGroupLayout = null;
205
+ _textureBindGroupLayout = null;
206
+ _blendBindGroupLayout = null;
207
+ _pipelineLayout = null;
208
+ _vertexBuffer = null;
209
+ _indexBuffer = null;
210
+ _projectionBuffer = null;
211
+ _blendBuffer = null;
212
+ _projectionBindGroup = null;
213
+ _blendBindGroup = null;
214
+ _backdropSampler = null;
215
+ // Compositor-owned capture target, re-allocated when the region size or the
216
+ // target format changes (see class doc for why a pooled RT cannot be used).
217
+ _backdropTexture = null;
218
+ _backdropView = null;
219
+ _backdropWidth = 0;
220
+ _backdropHeight = 0;
221
+ _backdropFormat = null;
222
+ connect(device) {
223
+ if (this._device !== null) {
224
+ return;
225
+ }
226
+ this._device = device;
227
+ this._shaderModule = device.createShaderModule({ code: compositorShaderSource });
228
+ this._projectionBindGroupLayout = device.createBindGroupLayout({
229
+ entries: [{ binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } }],
230
+ });
231
+ this._textureBindGroupLayout = device.createBindGroupLayout({
232
+ entries: [
233
+ { binding: 0, visibility: GPUShaderStage.FRAGMENT, texture: {} },
234
+ { binding: 1, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
235
+ { binding: 2, visibility: GPUShaderStage.FRAGMENT, texture: {} },
236
+ { binding: 3, visibility: GPUShaderStage.FRAGMENT, sampler: {} },
237
+ ],
238
+ });
239
+ this._blendBindGroupLayout = device.createBindGroupLayout({
240
+ entries: [{ binding: 0, visibility: GPUShaderStage.FRAGMENT, buffer: { type: 'uniform' } }],
241
+ });
242
+ this._pipelineLayout = device.createPipelineLayout({
243
+ bindGroupLayouts: [this._projectionBindGroupLayout, this._textureBindGroupLayout, this._blendBindGroupLayout],
244
+ });
245
+ this._vertexBuffer = device.createBuffer({
246
+ size: 4 * vertexStrideBytes,
247
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
248
+ });
249
+ this._indexBuffer = device.createBuffer({
250
+ size: 6 * Uint16Array.BYTES_PER_ELEMENT,
251
+ usage: GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST,
252
+ });
253
+ device.queue.writeBuffer(this._indexBuffer, 0, this._indexData);
254
+ this._projectionBuffer = device.createBuffer({
255
+ size: projectionUniformBytes,
256
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
257
+ });
258
+ this._blendBuffer = device.createBuffer({
259
+ size: blendUniformBytes,
260
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
261
+ });
262
+ this._backdropSampler = device.createSampler({
263
+ magFilter: 'nearest',
264
+ minFilter: 'nearest',
265
+ addressModeU: 'clamp-to-edge',
266
+ addressModeV: 'clamp-to-edge',
267
+ });
268
+ this._projectionBindGroup = device.createBindGroup({
269
+ layout: this._projectionBindGroupLayout,
270
+ entries: [{ binding: 0, resource: { buffer: this._projectionBuffer } }],
271
+ });
272
+ this._blendBindGroup = device.createBindGroup({
273
+ layout: this._blendBindGroupLayout,
274
+ entries: [{ binding: 0, resource: { buffer: this._blendBuffer } }],
275
+ });
276
+ }
277
+ disconnect() {
278
+ if (this._device === null) {
279
+ return;
280
+ }
281
+ this._vertexBuffer?.destroy();
282
+ this._indexBuffer?.destroy();
283
+ this._projectionBuffer?.destroy();
284
+ this._blendBuffer?.destroy();
285
+ this._backdropTexture?.destroy();
286
+ this._vertexBuffer = null;
287
+ this._indexBuffer = null;
288
+ this._projectionBuffer = null;
289
+ this._blendBuffer = null;
290
+ this._backdropTexture = null;
291
+ this._backdropView = null;
292
+ this._backdropWidth = 0;
293
+ this._backdropHeight = 0;
294
+ this._backdropFormat = null;
295
+ this._backdropSampler = null;
296
+ this._projectionBindGroup = null;
297
+ this._blendBindGroup = null;
298
+ this._pipelineLayout = null;
299
+ this._blendBindGroupLayout = null;
300
+ this._textureBindGroupLayout = null;
301
+ this._projectionBindGroupLayout = null;
302
+ this._shaderModule = null;
303
+ this._pipelines.clear();
304
+ this._device = null;
305
+ }
306
+ /**
307
+ * Composite `source` over the active target's current contents under an
308
+ * advanced (backdrop-aware) blend mode. Materializes any pending clear/draws,
309
+ * captures the target's `[x, y, width, height]` region (view units) into the
310
+ * compositor-owned backdrop texture, runs the blend in a shader, and draws the
311
+ * blended source over the untouched backdrop with normal premultiplied
312
+ * source-over.
313
+ */
314
+ compose(manager, source, x, y, width, height, blendMode) {
315
+ if (this._device === null) {
316
+ throw new Error('WebGpuBackdropBlendCompositor: not connected.');
317
+ }
318
+ if (width <= 0 || height <= 0) {
319
+ return;
320
+ }
321
+ const device = this._device;
322
+ const target = manager.renderTarget;
323
+ // Clears/draws are deferred on WebGPU; flush so the target texture holds the
324
+ // real backdrop before the standalone copy below reads it.
325
+ manager.flush();
326
+ const format = manager.renderTargetFormat;
327
+ const attachment = manager._getAttachmentPixelSize(target);
328
+ const scaleX = target.root && target.width > 0 ? attachment.width / target.width : 1;
329
+ const scaleY = target.root && target.height > 0 ? attachment.height / target.height : 1;
330
+ const ox = Math.max(0, Math.floor(x * scaleX));
331
+ const oy = Math.max(0, Math.floor(y * scaleY));
332
+ const cw = Math.max(0, Math.min(Math.round(width * scaleX), attachment.width - ox));
333
+ const ch = Math.max(0, Math.min(Math.round(height * scaleY), attachment.height - oy));
334
+ if (cw <= 0 || ch <= 0) {
335
+ return;
336
+ }
337
+ const backdropView = this._ensureBackdrop(device, cw, ch, format);
338
+ // Capture the target region into the backdrop on a standalone encoder; a copy
339
+ // cannot run inside a render pass (the coordinator's passes self-submit).
340
+ const encoder = device.createCommandEncoder();
341
+ encoder.copyTextureToTexture({ texture: manager._renderTargetTexture(target), origin: { x: ox, y: oy, z: 0 } }, { texture: this._backdropTexture, origin: { x: 0, y: 0, z: 0 } }, { width: cw, height: ch, depthOrArrayLayers: 1 });
342
+ device.queue.submit([encoder.finish()]);
343
+ this._drawBlend(manager, source, backdropView, x, y, width, height, blendMode, target.root);
344
+ }
345
+ _ensureBackdrop(device, width, height, format) {
346
+ if (this._backdropTexture === null || this._backdropWidth !== width || this._backdropHeight !== height || this._backdropFormat !== format) {
347
+ this._backdropTexture?.destroy();
348
+ this._backdropTexture = device.createTexture({
349
+ size: { width, height },
350
+ format,
351
+ usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
352
+ });
353
+ this._backdropView = this._backdropTexture.createView();
354
+ this._backdropWidth = width;
355
+ this._backdropHeight = height;
356
+ this._backdropFormat = format;
357
+ }
358
+ return this._backdropView;
359
+ }
360
+ _drawBlend(manager, source, backdropView, x, y, width, height, blendMode, opaqueBackdrop) {
361
+ const device = this._device;
362
+ this._writeQuadVertices(x, y, x + width, y + height);
363
+ device.queue.writeBuffer(this._vertexBuffer, 0, this._vertexData);
364
+ this._writeProjectionMatrix(manager.view.getTransform());
365
+ device.queue.writeBuffer(this._projectionBuffer, 0, this._projectionData);
366
+ this._blendModeView[0] = blendMode;
367
+ this._blendOpaqueView[0] = opaqueBackdrop ? 1 : 0;
368
+ device.queue.writeBuffer(this._blendBuffer, 0, this._blendData);
369
+ const sourceBinding = manager.getTextureBinding(source);
370
+ const textureBindGroup = device.createBindGroup({
371
+ layout: this._textureBindGroupLayout,
372
+ entries: [
373
+ { binding: 0, resource: sourceBinding.view },
374
+ { binding: 1, resource: sourceBinding.sampler },
375
+ { binding: 2, resource: backdropView },
376
+ { binding: 3, resource: this._backdropSampler },
377
+ ],
378
+ });
379
+ const targetFormat = manager.renderTargetFormat;
380
+ // A geometric stencil clip can wrap the block (the executor pushes the clip
381
+ // outermost), so the compositor may draw into a stencil-enabled pass. Select
382
+ // the matching pipeline variant — a stencil-free pipeline is incompatible
383
+ // with the pass's depth/stencil attachment.
384
+ const stencil = manager._passCoordinator.stencilActive;
385
+ const pipeline = this._getOrCreatePipeline(targetFormat, stencil);
386
+ // The blend math is in the shader; composite the blended source over the
387
+ // backdrop already in the target with normal premultiplied source-over.
388
+ const pass = manager._passCoordinator.acquirePass().pass;
389
+ pass.setPipeline(pipeline);
390
+ pass.setBindGroup(0, this._projectionBindGroup);
391
+ pass.setBindGroup(1, textureBindGroup);
392
+ pass.setBindGroup(2, this._blendBindGroup);
393
+ pass.setVertexBuffer(0, this._vertexBuffer);
394
+ pass.setIndexBuffer(this._indexBuffer, 'uint16');
395
+ pass.drawIndexed(6);
396
+ manager.stats.batches++;
397
+ manager.stats.drawCalls++;
398
+ manager._passCoordinator.endPass();
399
+ }
400
+ _getOrCreatePipeline(format, stencil) {
401
+ const key = `${format}|${stencil ? 's' : 'n'}`;
402
+ const cached = this._pipelines.get(key);
403
+ if (cached !== undefined) {
404
+ return cached;
405
+ }
406
+ const device = this._device;
407
+ const descriptor = {
408
+ layout: this._pipelineLayout,
409
+ vertex: {
410
+ module: this._shaderModule,
411
+ entryPoint: 'vertexMain',
412
+ buffers: [
413
+ {
414
+ arrayStride: vertexStrideBytes,
415
+ attributes: [
416
+ { shaderLocation: 0, offset: 0, format: 'float32x2' },
417
+ { shaderLocation: 1, offset: 8, format: 'float32x2' },
418
+ ],
419
+ },
420
+ ],
421
+ },
422
+ fragment: {
423
+ module: this._shaderModule,
424
+ entryPoint: 'fragmentMain',
425
+ targets: [
426
+ {
427
+ format,
428
+ // The shader produced the final premultiplied blended source; the
429
+ // GPU just source-over composites it over the backdrop.
430
+ blend: getWebGpuBlendState(BlendModes.Normal),
431
+ },
432
+ ],
433
+ },
434
+ primitive: { topology: 'triangle-list' },
435
+ };
436
+ if (stencil) {
437
+ descriptor.depthStencil = stencilContentDepthStencilState();
438
+ }
439
+ const pipeline = device.createRenderPipeline(descriptor);
440
+ this._pipelines.set(key, pipeline);
441
+ return pipeline;
442
+ }
443
+ _writeQuadVertices(left, top, right, bottom) {
444
+ const view = this._vertexData;
445
+ // Vertex 0: top-left (UV 0, 0)
446
+ view[0] = left;
447
+ view[1] = top;
448
+ view[2] = 0;
449
+ view[3] = 0;
450
+ // Vertex 1: top-right (UV 1, 0)
451
+ view[4] = right;
452
+ view[5] = top;
453
+ view[6] = 1;
454
+ view[7] = 0;
455
+ // Vertex 2: bottom-right (UV 1, 1)
456
+ view[8] = right;
457
+ view[9] = bottom;
458
+ view[10] = 1;
459
+ view[11] = 1;
460
+ // Vertex 3: bottom-left (UV 0, 1)
461
+ view[12] = left;
462
+ view[13] = bottom;
463
+ view[14] = 0;
464
+ view[15] = 1;
465
+ }
466
+ _writeProjectionMatrix(viewMatrix) {
467
+ // Pack the 3x3 affine view matrix into a 4x4 column-major mat4x4 for WGSL.
468
+ const m = this._projectionMatrix.copy(viewMatrix);
469
+ const data = this._projectionData;
470
+ // col 0
471
+ data[0] = m.a;
472
+ data[1] = m.c;
473
+ data[2] = 0;
474
+ data[3] = 0;
475
+ // col 1
476
+ data[4] = m.b;
477
+ data[5] = m.d;
478
+ data[6] = 0;
479
+ data[7] = 0;
480
+ // col 2
481
+ data[8] = 0;
482
+ data[9] = 0;
483
+ data[10] = 1;
484
+ data[11] = 0;
485
+ // col 3
486
+ data[12] = m.x;
487
+ data[13] = m.y;
488
+ data[14] = 0;
489
+ data[15] = 1;
490
+ }
491
+ }
492
+
493
+ export { WebGpuBackdropBlendCompositor, compositorShaderSource };
494
+ //# sourceMappingURL=WebGpuBackdropBlendCompositor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebGpuBackdropBlendCompositor.js","sources":["../../../../../src/rendering/webgpu/WebGpuBackdropBlendCompositor.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ interface PixelClipBoundsState {
26
26
  width: number;
27
27
  height: number;
28
28
  }
29
+ /** WGSL source for the box-filter mipmap-generation pipeline. @internal */
30
+ export declare const mipmapWgsl = "\nstruct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) texcoord: vec2<f32>,\n};\n\n@group(0) @binding(0)\nvar sourceTexture: texture_2d<f32>;\n@group(0) @binding(1)\nvar sourceSampler: sampler;\n\n@vertex\nfn vertexMain(@builtin(vertex_index) vertexIndex: u32) -> VertexOutput {\n var positions = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0),\n vec2<f32>(3.0, -1.0),\n vec2<f32>(-1.0, 3.0)\n );\n // Y is flipped vs the position array: NDC Y points up, but texture UV\n // Y points down (UV (0,0) is the top-left of the source). Matching the\n // two ensures that the output texture's top-left pixel samples from the\n // source's top-left, so every mip level has the same orientation as the\n // level above it. Prior to this, odd mip levels were rendered upside\n // down, producing visible texture flips at view-size doublings.\n var texcoords = array<vec2<f32>, 3>(\n vec2<f32>(0.0, 1.0),\n vec2<f32>(2.0, 1.0),\n vec2<f32>(0.0, -1.0)\n );\n var output: VertexOutput;\n\n output.position = vec4<f32>(positions[vertexIndex], 0.0, 1.0);\n output.texcoord = texcoords[vertexIndex];\n\n return output;\n}\n\n@fragment\nfn fragmentMain(input: VertexOutput) -> @location(0) vec4<f32> {\n return textureSample(sourceTexture, sourceSampler, input.texcoord);\n}\n";
29
31
  /**
30
32
  * WebGPU implementation of {@link RenderBackend}. Manages the GPU device,
31
33
  * canvas context configuration, format selection, managed-texture cache
@@ -70,6 +72,8 @@ export declare class WebGpuBackend implements RenderBackend {
70
72
  private readonly _clipPointB;
71
73
  private readonly _maskCompositor;
72
74
  private _maskCompositorConnected;
75
+ private readonly _backdropBlendCompositor;
76
+ private _backdropBlendCompositorConnected;
73
77
  private _mipmapShaderModule;
74
78
  private _mipmapBindGroupLayout;
75
79
  private _mipmapPipelineLayout;
@@ -91,6 +95,8 @@ export declare class WebGpuBackend implements RenderBackend {
91
95
  private _activeDrawCommand;
92
96
  private _passCoordinatorInstance;
93
97
  private _drawPlanDepth;
98
+ private readonly _planBaseStack;
99
+ private readonly _planHashStack;
94
100
  constructor(app: Application);
95
101
  get view(): View;
96
102
  get renderTarget(): RenderTarget;
@@ -122,6 +128,8 @@ export declare class WebGpuBackend implements RenderBackend {
122
128
  setClearColor(color: Color): this;
123
129
  initialize(): Promise<this>;
124
130
  resetStats(): this;
131
+ /** Frame-global slot base the plan builder indexes from. @internal */
132
+ get transformBufferCount(): number;
125
133
  /** @internal */
126
134
  _beginDrawPlan(nodeCount: number): void;
127
135
  /** @internal */
@@ -137,6 +145,16 @@ export declare class WebGpuBackend implements RenderBackend {
137
145
  setRenderTarget(target: RenderTarget | null): this;
138
146
  pushScissorRect(bounds: Rectangle): this;
139
147
  composeWithAlphaMask(content: Texture | RenderTexture, mask: Texture | RenderTexture, x: number, y: number, width: number, height: number, blendMode: BlendModes): this;
148
+ composeWithBackdropBlend(source: RenderTexture, x: number, y: number, width: number, height: number, mode: BlendModes): this;
149
+ /**
150
+ * Return the GPU texture backing `target`. For the root canvas target this is
151
+ * `context.getCurrentTexture()` (requires `COPY_SRC` usage configured on the
152
+ * canvas context). For a {@link RenderTexture} target it is the managed GPU
153
+ * texture. Used internally by {@link WebGpuBackdropBlendCompositor} for
154
+ * `copyTextureToTexture` backdrop capture.
155
+ * @internal
156
+ */
157
+ _renderTargetTexture(target: RenderTarget): GPUTexture;
140
158
  popScissorRect(): this;
141
159
  pushStencilClip(shape: Geometry, transform: Matrix): this;
142
160
  popStencilClip(): this;
@@ -173,6 +191,15 @@ export declare class WebGpuBackend implements RenderBackend {
173
191
  readonly view: GPUTextureView;
174
192
  readonly sampler: GPUSampler;
175
193
  };
194
+ /**
195
+ * The `GPUTextureFormat` a given `Texture`/`RenderTexture` is (or will be)
196
+ * backed by. Unlike {@link renderTargetFormat} (which reflects whatever
197
+ * target is *currently bound*), this is keyed off the texture itself, so
198
+ * callers that build a pipeline for a specific offscreen target — before
199
+ * that target is bound as the active render target — can match its format
200
+ * exactly instead of reading unrelated, possibly-stale backend state.
201
+ */
202
+ getTextureFormat(texture: Texture | RenderTexture): GPUTextureFormat;
176
203
  shouldPremultiplyTextureSample(texture: Texture | RenderTexture): boolean;
177
204
  /** @internal */
178
205
  getTransformStorageBuffer(minCount: number): {
@@ -1 +1 @@
1
- {"version":3,"file":"WebGpuBackend.d.ts","sourceRoot":"","sources":["../../../../src/rendering/webgpu/WebGpuBackend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebGpuBackend.d.ts","sourceRoot":"","sources":["../../../../src/rendering/webgpu/WebGpuBackend.ts"],"names":[],"mappings":"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"}