@codexo/exojs 0.9.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/CHANGELOG.md +127 -0
  2. package/README.md +14 -14
  3. package/dist/esm/core/Application.d.ts +25 -6
  4. package/dist/esm/core/Application.js +42 -8
  5. package/dist/esm/core/Application.js.map +1 -1
  6. package/dist/esm/core/Perf.d.ts +23 -0
  7. package/dist/esm/core/Perf.js +49 -0
  8. package/dist/esm/core/Perf.js.map +1 -0
  9. package/dist/esm/core/Scene.d.ts +8 -8
  10. package/dist/esm/core/Scene.js +7 -7
  11. package/dist/esm/core/Scene.js.map +1 -1
  12. package/dist/esm/core/SceneManager.js +2 -2
  13. package/dist/esm/core/SceneManager.js.map +1 -1
  14. package/dist/esm/core/SceneNode.d.ts +0 -3
  15. package/dist/esm/core/SceneNode.js +0 -9
  16. package/dist/esm/core/SceneNode.js.map +1 -1
  17. package/dist/esm/core/capabilities.d.ts +2 -0
  18. package/dist/esm/core/capabilities.js +15 -0
  19. package/dist/esm/core/capabilities.js.map +1 -1
  20. package/dist/esm/core/dev.d.ts +21 -0
  21. package/dist/esm/core/dev.js +18 -0
  22. package/dist/esm/core/dev.js.map +1 -0
  23. package/dist/esm/core/index.d.ts +1 -0
  24. package/dist/esm/core/types.d.ts +1 -1
  25. package/dist/esm/core/utils.d.ts +12 -0
  26. package/dist/esm/core/utils.js +18 -1
  27. package/dist/esm/core/utils.js.map +1 -1
  28. package/dist/esm/index.js +14 -3
  29. package/dist/esm/index.js.map +1 -1
  30. package/dist/esm/particles/ParticleSystem.d.ts +8 -5
  31. package/dist/esm/particles/ParticleSystem.js +9 -5
  32. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  33. package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
  34. package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
  35. package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
  36. package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
  37. package/dist/esm/particles/distributions/index.d.ts +2 -2
  38. package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
  39. package/dist/esm/particles/modules/AlphaFadeOverLifetime.d.ts +2 -2
  40. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js +5 -1
  41. package/dist/esm/particles/modules/AlphaFadeOverLifetime.js.map +1 -1
  42. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
  43. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
  44. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
  45. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
  46. package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
  47. package/dist/esm/particles/modules/UpdateModule.js +1 -1
  48. package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
  49. package/dist/esm/rendering/Camera.d.ts +33 -0
  50. package/dist/esm/rendering/Camera.js +38 -0
  51. package/dist/esm/rendering/Camera.js.map +1 -0
  52. package/dist/esm/rendering/Container.d.ts +5 -24
  53. package/dist/esm/rendering/Container.js +8 -71
  54. package/dist/esm/rendering/Container.js.map +1 -1
  55. package/dist/esm/rendering/Drawable.d.ts +8 -10
  56. package/dist/esm/rendering/Drawable.js +12 -20
  57. package/dist/esm/rendering/Drawable.js.map +1 -1
  58. package/dist/esm/rendering/RenderBackend.d.ts +18 -0
  59. package/dist/esm/rendering/RenderNode.d.ts +81 -8
  60. package/dist/esm/rendering/RenderNode.js +121 -144
  61. package/dist/esm/rendering/RenderNode.js.map +1 -1
  62. package/dist/esm/rendering/RenderTarget.d.ts +13 -0
  63. package/dist/esm/rendering/RenderTarget.js +13 -0
  64. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  65. package/dist/esm/rendering/RenderTargetPass.js +17 -0
  66. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  67. package/dist/esm/rendering/RenderingContext.d.ts +87 -0
  68. package/dist/esm/rendering/RenderingContext.js +157 -0
  69. package/dist/esm/rendering/RenderingContext.js.map +1 -0
  70. package/dist/esm/rendering/TransformBuffer.d.ts +82 -0
  71. package/dist/esm/rendering/TransformBuffer.js +180 -0
  72. package/dist/esm/rendering/TransformBuffer.js.map +1 -0
  73. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
  74. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  75. package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
  76. package/dist/esm/rendering/geometry/Geometry.js +228 -0
  77. package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
  78. package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
  79. package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
  80. package/dist/esm/rendering/gradient/Gradient.d.ts +67 -0
  81. package/dist/esm/rendering/gradient/Gradient.js +160 -0
  82. package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
  83. package/dist/esm/rendering/gradient/LinearGradient.d.ts +18 -0
  84. package/dist/esm/rendering/gradient/LinearGradient.js +49 -0
  85. package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
  86. package/dist/esm/rendering/gradient/RadialGradient.d.ts +18 -0
  87. package/dist/esm/rendering/gradient/RadialGradient.js +44 -0
  88. package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
  89. package/dist/esm/rendering/index.d.ts +16 -2
  90. package/dist/esm/rendering/material/Material.d.ts +114 -0
  91. package/dist/esm/rendering/material/Material.js +111 -0
  92. package/dist/esm/rendering/material/Material.js.map +1 -0
  93. package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
  94. package/dist/esm/rendering/material/MaterialKey.js +82 -0
  95. package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
  96. package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
  97. package/dist/esm/rendering/material/MeshMaterial.js +21 -0
  98. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
  99. package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +29 -62
  100. package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +35 -62
  101. package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
  102. package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
  103. package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
  104. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
  105. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
  106. package/dist/esm/rendering/mesh/Mesh.js +122 -3
  107. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  108. package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
  109. package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
  110. package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
  111. package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
  112. package/dist/esm/rendering/plan/RenderCommand.d.ts +86 -0
  113. package/dist/esm/rendering/plan/RenderCommand.js +127 -0
  114. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
  115. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
  116. package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
  117. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
  118. package/dist/esm/rendering/plan/RenderInstruction.d.ts +51 -0
  119. package/dist/esm/rendering/plan/RenderInstruction.js +45 -0
  120. package/dist/esm/rendering/plan/RenderInstruction.js.map +1 -0
  121. package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
  122. package/dist/esm/rendering/plan/RenderPlan.js +12 -0
  123. package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
  124. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
  125. package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
  126. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
  127. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
  128. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
  129. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
  130. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +13 -0
  131. package/dist/esm/rendering/plan/RenderPlanPlayer.js +107 -0
  132. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
  133. package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
  134. package/dist/esm/rendering/plan/RenderScope.js +16 -0
  135. package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
  136. package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
  137. package/dist/esm/rendering/plan/playRenderTree.js +19 -0
  138. package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
  139. package/dist/esm/rendering/primitives/Graphics.d.ts +70 -5
  140. package/dist/esm/rendering/primitives/Graphics.js +172 -14
  141. package/dist/esm/rendering/primitives/Graphics.js.map +1 -1
  142. package/dist/esm/rendering/sprite/Sprite.d.ts +22 -1
  143. package/dist/esm/rendering/sprite/Sprite.js +33 -2
  144. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  145. package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +41 -0
  146. package/dist/esm/rendering/sprite/spriteMaterialSources.js +149 -0
  147. package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
  148. package/dist/esm/rendering/text/BitmapText.d.ts +2 -0
  149. package/dist/esm/rendering/text/BitmapText.js +8 -1
  150. package/dist/esm/rendering/text/BitmapText.js.map +1 -1
  151. package/dist/esm/rendering/text/BmFont.js +3 -0
  152. package/dist/esm/rendering/text/BmFont.js.map +1 -1
  153. package/dist/esm/rendering/text/GlyphSdf.d.ts +14 -0
  154. package/dist/esm/rendering/text/GlyphSdf.js +41 -11
  155. package/dist/esm/rendering/text/GlyphSdf.js.map +1 -1
  156. package/dist/esm/rendering/text/TextStyle.d.ts +6 -1
  157. package/dist/esm/rendering/text/TextStyle.js +1 -1
  158. package/dist/esm/rendering/text/TextStyle.js.map +1 -1
  159. package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
  160. package/dist/esm/rendering/texture/DataTexture.js +7 -0
  161. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  162. package/dist/esm/rendering/texture/RenderTexture.js.map +1 -1
  163. package/dist/esm/rendering/video/Video.d.ts +3 -7
  164. package/dist/esm/rendering/video/Video.js +3 -8
  165. package/dist/esm/rendering/video/Video.js.map +1 -1
  166. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +62 -0
  167. package/dist/esm/rendering/webgl2/WebGl2Backend.js +352 -21
  168. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  169. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
  170. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
  171. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  172. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.d.ts +8 -0
  173. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js +8 -0
  174. package/dist/esm/rendering/webgl2/WebGl2ParticleRenderer.js.map +1 -1
  175. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
  176. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
  177. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
  178. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +14 -0
  179. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +257 -78
  180. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  181. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
  182. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
  183. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
  184. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.d.ts +7 -0
  185. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +11 -0
  186. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  187. package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
  188. package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
  189. package/dist/esm/rendering/webgl2/glsl/sprite.vert.js +1 -1
  190. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
  191. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
  192. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
  193. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
  194. package/dist/esm/rendering/webgl2/glsl/text-color.frag.js +1 -1
  195. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +63 -0
  196. package/dist/esm/rendering/webgpu/WebGpuBackend.js +180 -19
  197. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  198. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
  199. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  200. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +24 -0
  201. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +524 -98
  202. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  203. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.d.ts +7 -0
  204. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +24 -22
  205. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  206. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
  207. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
  208. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
  209. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +25 -1
  210. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +430 -76
  211. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  212. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
  213. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
  214. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
  215. package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
  216. package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
  217. package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
  218. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.d.ts +7 -0
  219. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +30 -19
  220. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  221. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +48 -0
  222. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +103 -0
  223. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
  224. package/dist/esm/resources/JsonStore.d.ts +18 -0
  225. package/dist/esm/resources/JsonStore.js +62 -0
  226. package/dist/esm/resources/JsonStore.js.map +1 -0
  227. package/dist/esm/resources/Loader.js +1 -1
  228. package/dist/esm/resources/Loader.js.map +1 -1
  229. package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
  230. package/dist/esm/resources/factories/ImageFactory.js +13 -6
  231. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  232. package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
  233. package/dist/esm/resources/factories/TextureFactory.js +8 -4
  234. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  235. package/dist/esm/resources/index.d.ts +1 -0
  236. package/dist/exo.esm.js +6326 -2350
  237. package/dist/exo.esm.js.map +1 -1
  238. package/package.json +34 -24
  239. package/dist/esm/particles/distributions/Gradient.js.map +0 -1
  240. package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
  241. package/dist/esm/vendor/webgl-debug.js +0 -1160
  242. package/dist/esm/vendor/webgl-debug.js.map +0 -1
@@ -1,5 +1,8 @@
1
- import { RenderingPrimitives, BufferTypes, BufferUsage } from '../types.js';
1
+ import { RenderingPrimitives, BufferTypes, BufferUsage, BlendModes } from '../types.js';
2
2
  import { Shader } from '../shader/Shader.js';
3
+ import { spriteVertexGlsl } from '../sprite/spriteMaterialSources.js';
4
+ import { RenderTexture } from '../texture/RenderTexture.js';
5
+ import { Texture } from '../texture/Texture.js';
3
6
  import { AbstractWebGl2Renderer } from './AbstractWebGl2Renderer.js';
4
7
  import fragmentSource from './glsl/sprite.frag.js';
5
8
  import vertexSource from './glsl/sprite.vert.js';
@@ -15,24 +18,40 @@ import { WebGl2VertexArrayObject } from './WebGl2VertexArrayObject.js';
15
18
  * the quad each invocation is computing. All per-sprite data lives in a
16
19
  * single per-instance buffer (divisor = 1).
17
20
  *
18
- * Per-instance layout (56 bytes per sprite, 6 attributes):
21
+ * Per-instance layout (36 bytes per sprite, 5 attributes):
19
22
  * ```
20
23
  * localBounds f32x4 (offset 0, 16 bytes) — left, top, right, bottom
21
- * transformAB f32x3 (offset 16, 12 bytes) — first row of 2D affine
22
- * transformCD f32x3 (offset 28, 12 bytes) — second row of 2D affine
23
- * uvBounds u16x4 norm (offset 40, 8 bytes) — uMin, vMin, uMax, vMax
24
- * color u8x4 norm (offset 48, 4 bytes) — RGBA tint
25
- * textureSlot u32 (offset 52, 4 bytes) — multi-texture slot
24
+ * uvBounds u16x4 norm (offset 16, 8 bytes) — uMin, vMin, uMax, vMax
25
+ * color u8x4 norm (offset 24, 4 bytes) — RGBA tint
26
+ * textureSlot u32 (offset 28, 4 bytes) — multi-texture slot
27
+ * nodeIndex u32 (offset 32, 4 bytes) — row into the shared TransformBuffer
26
28
  * ```
27
29
  *
28
- * vs. the previous per-vertex layout (80 bytes per quad), this saves
29
- * roughly 30% bandwidth and ~75% of the CPU writes per sprite — the
30
- * vertex shader expands one instance into four corners on the GPU
31
- * instead of the CPU duplicating the same color/slot/transform across
32
- * four vertex entries.
30
+ * The per-instance world transform no longer lives in this buffer: it is
31
+ * fetched in the vertex shader from the shared {@link TransformBuffer}
32
+ * texture (`u_transforms`) keyed by `a_nodeIndex`, exactly like the mesh
33
+ * renderer. The render-group upload boundary (PR #44) already packs every
34
+ * draw command's transform into that buffer at its stable `nodeIndex`, so the
35
+ * sprite just reads it back instead of re-packing 24 bytes of affine rows per
36
+ * instance. vs. the previous per-vertex layout (80 bytes per quad), the
37
+ * vertex shader still expands one instance into four corners on the GPU.
38
+ *
39
+ * # Default vs custom-material path
40
+ *
41
+ * Sprites without a material take the default path: up to 8 base textures
42
+ * rotate through `u_texture0..7`, selected per-instance via `a_textureSlot`,
43
+ * so unrelated sprites merge into one draw. Sprites with a {@link SpriteMaterial}
44
+ * take the custom path: the material's fragment program runs against the same
45
+ * instance buffer, the single base texture binds to unit 0 as `u_texture`, and
46
+ * material uniforms/textures bind once per batch (units 1..N). The custom path
47
+ * keeps instancing but not the opportunistic 8-slot merge — a custom batch
48
+ * breaks on material instance, base texture, blend mode, or buffer capacity.
33
49
  */
34
50
  const maxBatchTextures = 8;
35
- const instanceStrideBytes = 56;
51
+ // Sprite base textures occupy units 0..7; the shared transform buffer texture
52
+ // binds on unit 8, matching the mesh renderer's convention.
53
+ const transformTextureUnit = 8;
54
+ const instanceStrideBytes = 36;
36
55
  const wordsPerInstance = instanceStrideBytes / Uint32Array.BYTES_PER_ELEMENT;
37
56
  class WebGl2SpriteRenderer extends AbstractWebGl2Renderer {
38
57
  _shader;
@@ -43,7 +62,20 @@ class WebGl2SpriteRenderer extends AbstractWebGl2Renderer {
43
62
  _activeTextures = new Array(maxBatchTextures).fill(null);
44
63
  _textureSlots = new Map();
45
64
  _slotCount = 0;
65
+ // Custom-material state. Compiled fragment programs are cached per material
66
+ // instance; the current batch's material/base-texture decide when to flush.
67
+ _customShaders = new Map();
68
+ // Texture-unit index scratches reused for sampler-uniform binds so the
69
+ // per-batch path stays allocation-free.
70
+ _slotScratches = Array.from({ length: maxBatchTextures }, (_, i) => new Int32Array([i]));
71
+ // Pinned unit index for the shared transform buffer sampler.
72
+ _transformUnitScratch = new Int32Array([transformTextureUnit]);
73
+ _currentMaterial = null;
74
+ _currentBaseTexture = null;
46
75
  _instanceCount = 0;
76
+ // Highest transform-buffer row referenced by the pending batch; drives the
77
+ // minimum row count uploaded for the transform texture at flush time.
78
+ _maxNodeIndex = 0;
47
79
  _currentBlendMode = null;
48
80
  _currentView = null;
49
81
  _currentViewId = -1;
@@ -64,84 +96,70 @@ class WebGl2SpriteRenderer extends AbstractWebGl2Renderer {
64
96
  return this;
65
97
  }
66
98
  const backend = this.getBackend();
67
- const blendMode = sprite.blendMode;
68
- const batchFull = this._instanceCount >= this._batchSize;
69
- const blendModeChanged = blendMode !== this._currentBlendMode;
70
- const slotExhausted = !this._textureSlots.has(texture) && this._slotCount >= maxBatchTextures;
71
- if (batchFull || blendModeChanged || slotExhausted) {
72
- this.flush();
73
- if (blendModeChanged) {
74
- this._currentBlendMode = blendMode;
75
- backend.setBlendMode(blendMode);
76
- }
99
+ const material = sprite.material;
100
+ // The transform lives in the shared buffer, keyed by the draw command's
101
+ // stable nodeIndex (already packed at the render-group upload boundary).
102
+ // A direct, non-plan `backend.draw(sprite)` has no command — push the
103
+ // sprite's transform into the buffer and use the freshly-allocated slot.
104
+ const command = backend.activeDrawCommand;
105
+ const nodeIndex = command !== null ? command.nodeIndex : backend._pushTransform(sprite);
106
+ if (material === null) {
107
+ this._renderDefault(sprite, texture, backend, nodeIndex);
77
108
  }
78
- let slot = this._textureSlots.get(texture);
79
- if (slot === undefined) {
80
- slot = this._slotCount++;
81
- this._textureSlots.set(texture, slot);
82
- this._activeTextures[slot] = texture;
83
- backend.bindTexture(texture, slot);
109
+ else {
110
+ this._renderCustom(sprite, texture, material, backend, nodeIndex);
84
111
  }
85
- const offset = this._instanceCount * wordsPerInstance;
86
- const f32 = this._instanceFloat32;
87
- const u32 = this._instanceUint32;
88
- // localBounds: left, top, right, bottom (offset 0..3)
89
- const bounds = sprite.getLocalBounds();
90
- f32[offset + 0] = bounds.left;
91
- f32[offset + 1] = bounds.top;
92
- f32[offset + 2] = bounds.right;
93
- f32[offset + 3] = bounds.bottom;
94
- // transform rows (offset 4..6 = AB, 7..9 = CD)
95
- const transform = sprite.getGlobalTransform();
96
- f32[offset + 4] = transform.a;
97
- f32[offset + 5] = transform.b;
98
- f32[offset + 6] = transform.x;
99
- f32[offset + 7] = transform.c;
100
- f32[offset + 8] = transform.d;
101
- f32[offset + 9] = transform.y;
102
- // uvBounds at offset 10 — 8 bytes = 2 u32 slots, normalised u16x4.
103
- // Pack (uMin, vMin, uMax, vMax) into two uint32s, with flipY swap
104
- // applied at pack time so the shader can stay flip-agnostic.
105
- const frame = sprite.textureFrame;
106
- const texWidth = texture.width;
107
- const texHeight = texture.height;
108
- // Clamp to 16-bit unsigned range for normalisation.
109
- const uMin = ((frame.left / texWidth) * 0xffff) & 0xffff;
110
- const uMax = ((frame.right / texWidth) * 0xffff) & 0xffff;
111
- const vMinRaw = ((frame.top / texHeight) * 0xffff) & 0xffff;
112
- const vMaxRaw = ((frame.bottom / texHeight) * 0xffff) & 0xffff;
113
- const vMin = texture.flipY ? vMaxRaw : vMinRaw;
114
- const vMax = texture.flipY ? vMinRaw : vMaxRaw;
115
- u32[offset + 10] = uMin | (vMin << 16);
116
- u32[offset + 11] = uMax | (vMax << 16);
117
- // color (u8x4 packed) at word 12
118
- u32[offset + 12] = sprite.tint.toRgba();
119
- // textureSlot (u32) at word 13
120
- u32[offset + 13] = slot;
121
- this._instanceCount++;
122
112
  return this;
123
113
  }
124
114
  flush() {
125
115
  const backend = this.getBackendOrNull();
126
116
  const instanceBuffer = this._instanceBuffer;
127
117
  const vao = this._vao;
128
- if (this._instanceCount === 0 || backend === null || instanceBuffer === null || vao === null) {
118
+ const connection = this._connection;
119
+ if (this._instanceCount === 0 || backend === null || instanceBuffer === null || vao === null || connection === null) {
120
+ this._maxNodeIndex = 0;
129
121
  this._resetSlots();
130
122
  return;
131
123
  }
132
- const view = backend.view;
133
- if (this._currentView !== view || this._currentViewId !== view.updateId) {
134
- this._currentView = view;
135
- this._currentViewId = view.updateId;
136
- this._shader.getUniform('u_projection').setValue(view.getTransform().toArray(false));
124
+ const material = this._currentMaterial;
125
+ const shader = material === null ? this._shader : this._getOrCreateCustomShader(material, connection.gl);
126
+ if (material === null) {
127
+ const view = backend.view;
128
+ if (this._currentView !== view || this._currentViewId !== view.updateId) {
129
+ this._currentView = view;
130
+ this._currentViewId = view.updateId;
131
+ this._shader.getUniform('u_projection').setValue(view.getTransform().toArray(false));
132
+ }
137
133
  }
138
- this._shader.sync();
134
+ else {
135
+ // Custom path: projection is set per flush (cheap, and the cached
136
+ // default-shader view state does not carry over to a custom program).
137
+ if (shader.uniforms.has('u_projection')) {
138
+ shader.getUniform('u_projection').setValue(backend.view.getTransform().toArray(false));
139
+ }
140
+ // The single base texture binds to unit 0 as `u_texture`.
141
+ const baseTexture = this._currentBaseTexture;
142
+ if (baseTexture !== null && shader.uniforms.has('u_texture')) {
143
+ backend.bindTexture(baseTexture, 0);
144
+ shader.getUniform('u_texture').setValue(this._slotScratches[0]);
145
+ }
146
+ this._bindCustomUniforms(shader, material, backend);
147
+ }
148
+ // Bind the shared transform buffer texture (one row per nodeIndex) on the
149
+ // dedicated unit and point the sampler at it. Done for both the default and
150
+ // custom programs — both fetch the world transform via a_nodeIndex.
151
+ backend.bindTransformBufferTexture(transformTextureUnit, this._maxNodeIndex + 1);
152
+ if (shader.uniforms.has('u_transforms')) {
153
+ shader.getUniform('u_transforms').setValue(this._transformUnitScratch);
154
+ }
155
+ shader.sync();
139
156
  backend.bindVertexArrayObject(vao);
140
157
  instanceBuffer.upload(this._instanceFloat32.subarray(0, this._instanceCount * wordsPerInstance));
141
158
  vao.drawInstanced(4, 0, this._instanceCount, RenderingPrimitives.TriangleStrip);
142
159
  backend.stats.batches++;
143
160
  backend.stats.drawCalls++;
144
161
  this._instanceCount = 0;
162
+ this._maxNodeIndex = 0;
145
163
  this._resetSlots();
146
164
  }
147
165
  onConnect(backend) {
@@ -152,11 +170,10 @@ class WebGl2SpriteRenderer extends AbstractWebGl2Renderer {
152
170
  this._shader.sync();
153
171
  this._vao = new WebGl2VertexArrayObject(RenderingPrimitives.TriangleStrip)
154
172
  .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_localBounds'), gl.FLOAT, false, instanceStrideBytes, 0, false, 1)
155
- .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_transformAB'), gl.FLOAT, false, instanceStrideBytes, 16, false, 1)
156
- .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_transformCD'), gl.FLOAT, false, instanceStrideBytes, 28, false, 1)
157
- .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_uvBounds'), gl.UNSIGNED_SHORT, true, instanceStrideBytes, 40, false, 1)
158
- .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_color'), gl.UNSIGNED_BYTE, true, instanceStrideBytes, 48, false, 1)
159
- .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_textureSlot'), gl.UNSIGNED_INT, false, instanceStrideBytes, 52, true, 1)
173
+ .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_uvBounds'), gl.UNSIGNED_SHORT, true, instanceStrideBytes, 16, false, 1)
174
+ .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_color'), gl.UNSIGNED_BYTE, true, instanceStrideBytes, 24, false, 1)
175
+ .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_textureSlot'), gl.UNSIGNED_INT, false, instanceStrideBytes, 28, true, 1)
176
+ .addAttribute(this._instanceBuffer, this._shader.getAttribute('a_nodeIndex'), gl.UNSIGNED_INT, false, instanceStrideBytes, 32, true, 1)
160
177
  .connect(this._createVaoRuntime(this._connection));
161
178
  // Pin the per-slot sampler uniforms to texture units 0..N-1.
162
179
  const samplerUnit = new Int32Array(1);
@@ -167,6 +184,12 @@ class WebGl2SpriteRenderer extends AbstractWebGl2Renderer {
167
184
  }
168
185
  onDisconnect() {
169
186
  this._shader.disconnect();
187
+ for (const shader of this._customShaders.values()) {
188
+ shader.destroy();
189
+ }
190
+ this._customShaders.clear();
191
+ this._currentMaterial = null;
192
+ this._currentBaseTexture = null;
170
193
  this._instanceBuffer?.destroy();
171
194
  this._instanceBuffer = null;
172
195
  this._vao?.destroy();
@@ -176,11 +199,167 @@ class WebGl2SpriteRenderer extends AbstractWebGl2Renderer {
176
199
  this._currentView = null;
177
200
  this._currentViewId = -1;
178
201
  this._instanceCount = 0;
202
+ this._maxNodeIndex = 0;
179
203
  }
180
204
  destroy() {
181
205
  this.disconnect();
182
206
  this._shader.destroy();
183
207
  }
208
+ /** Default multi-texture path: rotate the base texture through 8 slots. */
209
+ _renderDefault(sprite, texture, backend, nodeIndex) {
210
+ const blendMode = sprite.blendMode;
211
+ const batchFull = this._instanceCount >= this._batchSize;
212
+ const blendModeChanged = blendMode !== this._currentBlendMode;
213
+ const slotExhausted = !this._textureSlots.has(texture) && this._slotCount >= maxBatchTextures;
214
+ // A custom batch in flight must drain before default sprites resume.
215
+ const materialSwitch = this._currentMaterial !== null && this._instanceCount > 0;
216
+ if (batchFull || blendModeChanged || slotExhausted || materialSwitch) {
217
+ this.flush();
218
+ if (blendModeChanged) {
219
+ this._currentBlendMode = blendMode;
220
+ backend.setBlendMode(blendMode);
221
+ }
222
+ }
223
+ this._currentMaterial = null;
224
+ let slot = this._textureSlots.get(texture);
225
+ if (slot === undefined) {
226
+ slot = this._slotCount++;
227
+ this._textureSlots.set(texture, slot);
228
+ this._activeTextures[slot] = texture;
229
+ backend.bindTexture(texture, slot);
230
+ }
231
+ this._packInstance(sprite, texture, slot, nodeIndex);
232
+ this._instanceCount++;
233
+ }
234
+ /** Custom-material path: single base texture on unit 0, instanced. */
235
+ _renderCustom(sprite, texture, material, backend, nodeIndex) {
236
+ // The material owns its blend mode; the sprite's own blendMode overrides it
237
+ // when set away from the default (Normal).
238
+ const blendMode = sprite.blendMode === BlendModes.Normal ? material.blendMode : sprite.blendMode;
239
+ const batchFull = this._instanceCount >= this._batchSize;
240
+ const blendModeChanged = blendMode !== this._currentBlendMode;
241
+ const materialChanged = material !== this._currentMaterial;
242
+ const textureChanged = texture !== this._currentBaseTexture;
243
+ if (this._instanceCount > 0 && (batchFull || blendModeChanged || materialChanged || textureChanged)) {
244
+ this.flush();
245
+ }
246
+ if (blendModeChanged) {
247
+ this._currentBlendMode = blendMode;
248
+ backend.setBlendMode(blendMode);
249
+ }
250
+ this._currentMaterial = material;
251
+ this._currentBaseTexture = texture;
252
+ // textureSlot word is unused by custom fragments (base binds to unit 0).
253
+ this._packInstance(sprite, texture, 0, nodeIndex);
254
+ this._instanceCount++;
255
+ }
256
+ _packInstance(sprite, texture, slot, nodeIndex) {
257
+ const offset = this._instanceCount * wordsPerInstance;
258
+ const f32 = this._instanceFloat32;
259
+ const u32 = this._instanceUint32;
260
+ // localBounds: left, top, right, bottom (offset 0..3)
261
+ const bounds = sprite.getLocalBounds();
262
+ f32[offset + 0] = bounds.left;
263
+ f32[offset + 1] = bounds.top;
264
+ f32[offset + 2] = bounds.right;
265
+ f32[offset + 3] = bounds.bottom;
266
+ // uvBounds at offset 4 — 8 bytes = 2 u32 slots, normalised u16x4.
267
+ // Pack (uMin, vMin, uMax, vMax) into two uint32s, with flipY swap
268
+ // applied at pack time so the shader can stay flip-agnostic.
269
+ const frame = sprite.textureFrame;
270
+ const texWidth = texture.width;
271
+ const texHeight = texture.height;
272
+ // Clamp to 16-bit unsigned range for normalisation.
273
+ const uMin = ((frame.left / texWidth) * 0xffff) & 0xffff;
274
+ const uMax = ((frame.right / texWidth) * 0xffff) & 0xffff;
275
+ const vMinRaw = ((frame.top / texHeight) * 0xffff) & 0xffff;
276
+ const vMaxRaw = ((frame.bottom / texHeight) * 0xffff) & 0xffff;
277
+ const vMin = texture.flipY ? vMaxRaw : vMinRaw;
278
+ const vMax = texture.flipY ? vMinRaw : vMaxRaw;
279
+ u32[offset + 4] = uMin | (vMin << 16);
280
+ u32[offset + 5] = uMax | (vMax << 16);
281
+ // color (u8x4 packed) at word 6
282
+ u32[offset + 6] = sprite.tint.toRgba();
283
+ // textureSlot (u32) at word 7
284
+ u32[offset + 7] = slot;
285
+ // nodeIndex (u32) at word 8 — row into the shared transform buffer.
286
+ const node = nodeIndex >>> 0;
287
+ u32[offset + 8] = node;
288
+ if (node > this._maxNodeIndex) {
289
+ this._maxNodeIndex = node;
290
+ }
291
+ }
292
+ _getOrCreateCustomShader(material, gl) {
293
+ const cached = this._customShaders.get(material);
294
+ if (cached !== undefined) {
295
+ return cached;
296
+ }
297
+ const glsl = material.shader.glsl;
298
+ if (glsl === null) {
299
+ throw new Error('SpriteMaterial shader has no `glsl` source; cannot render through the WebGL2 backend.');
300
+ }
301
+ // The engine owns the vertex stage: pair the canonical sprite vertex shader
302
+ // with the material's fragment so the corner-expansion / instancing
303
+ // contract is fixed regardless of the material author.
304
+ const shader = new Shader(spriteVertexGlsl, glsl.fragment);
305
+ shader.connect(createWebGl2ShaderProgram(gl));
306
+ shader.sync();
307
+ this._customShaders.set(material, shader);
308
+ material._onDispose(() => {
309
+ const stored = this._customShaders.get(material);
310
+ if (stored !== undefined) {
311
+ stored.destroy();
312
+ this._customShaders.delete(material);
313
+ }
314
+ });
315
+ return shader;
316
+ }
317
+ _bindCustomUniforms(shader, material, backend) {
318
+ // Texture bindings take consecutive units starting at 1 (unit 0 belongs to
319
+ // the sprite's own base texture). Texture-valued uniforms bind first, then
320
+ // the entries of the material's dedicated `textures` map.
321
+ let textureSlot = 1;
322
+ const uniforms = material.uniforms;
323
+ for (const name in uniforms) {
324
+ if (!shader.uniforms.has(name)) {
325
+ continue;
326
+ }
327
+ const value = uniforms[name];
328
+ const uniform = shader.getUniform(name);
329
+ if (value instanceof Texture || value instanceof RenderTexture) {
330
+ if (textureSlot >= maxBatchTextures) {
331
+ throw new Error(`SpriteMaterial requested more than ${maxBatchTextures - 1} texture bindings.`);
332
+ }
333
+ backend.bindTexture(value, textureSlot);
334
+ uniform.setValue(this._slotScratches[textureSlot]);
335
+ textureSlot++;
336
+ }
337
+ else {
338
+ uniform.setValue(this._marshalUniformValue(value));
339
+ }
340
+ }
341
+ const textures = material.textures;
342
+ for (const name in textures) {
343
+ if (!shader.uniforms.has(name)) {
344
+ continue;
345
+ }
346
+ if (textureSlot >= maxBatchTextures) {
347
+ throw new Error(`SpriteMaterial requested more than ${maxBatchTextures - 1} texture bindings.`);
348
+ }
349
+ backend.bindTexture(textures[name], textureSlot);
350
+ shader.getUniform(name).setValue(this._slotScratches[textureSlot]);
351
+ textureSlot++;
352
+ }
353
+ }
354
+ _marshalUniformValue(value) {
355
+ if (value instanceof Float32Array || value instanceof Int32Array) {
356
+ return value;
357
+ }
358
+ if (typeof value === 'number') {
359
+ return new Float32Array([value]);
360
+ }
361
+ return new Float32Array(value);
362
+ }
184
363
  _resetSlots() {
185
364
  if (this._slotCount > 0) {
186
365
  for (let i = 0; i < this._slotCount; i++) {
@@ -1 +1 @@
1
- {"version":3,"file":"WebGl2SpriteRenderer.js","sources":["../../../../../src/rendering/webgl2/WebGl2SpriteRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebGl2SpriteRenderer.js","sources":["../../../../../src/rendering/webgl2/WebGl2SpriteRenderer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Matrix } from '@/math/Matrix';
2
+ import type { Geometry } from '@/rendering/geometry/Geometry';
3
+ import type { WebGl2Backend } from './WebGl2Backend';
4
+ /**
5
+ * Draws a {@link Geometry} silhouette into the stencil buffer for
6
+ * {@link WebGl2Backend}'s geometric clip path. Positions are de-referenced
7
+ * (indices expanded) into a tightly-packed `x, y` stream on the CPU and drawn
8
+ * via `drawArrays`, so any interleaved source layout and index buffer is
9
+ * supported without per-shape attribute reconfiguration.
10
+ *
11
+ * Intentionally not an {@link AbstractWebGl2Renderer}: like
12
+ * {@link WebGl2MaskCompositor} it is invoked directly by the backend, outside
13
+ * the renderer-registry dispatch path. The caller manages stencil/color-mask
14
+ * state around the draw; this class only renders the shape.
15
+ */
16
+ export declare class WebGl2StencilClipper {
17
+ private readonly _shader;
18
+ private readonly _matrix;
19
+ private _positions;
20
+ private _connection;
21
+ connect(backend: WebGl2Backend): void;
22
+ disconnect(): void;
23
+ /**
24
+ * Draw `shape` (transformed by `transform`, the clip node's global transform)
25
+ * with the position-only stencil shader. The caller is responsible for
26
+ * stencil func/op and color-mask state.
27
+ */
28
+ draw(backend: WebGl2Backend, shape: Geometry, transform: Matrix): void;
29
+ private _extractPositions;
30
+ private _resolvePositionAttribute;
31
+ private _ensureCapacity;
32
+ private _createBufferRuntime;
33
+ private _createVaoRuntime;
34
+ }