@codexo/exojs 0.9.0 → 0.10.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 (209) hide show
  1. package/CHANGELOG.md +44 -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/index.d.ts +1 -0
  21. package/dist/esm/core/types.d.ts +1 -1
  22. package/dist/esm/core/utils.d.ts +12 -0
  23. package/dist/esm/core/utils.js +18 -1
  24. package/dist/esm/core/utils.js.map +1 -1
  25. package/dist/esm/index.js +14 -3
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/particles/ParticleSystem.d.ts +8 -5
  28. package/dist/esm/particles/ParticleSystem.js +9 -5
  29. package/dist/esm/particles/ParticleSystem.js.map +1 -1
  30. package/dist/esm/particles/distributions/{Gradient.d.ts → ColorGradient.d.ts} +5 -5
  31. package/dist/esm/particles/distributions/{Gradient.js → ColorGradient.js} +5 -5
  32. package/dist/esm/particles/distributions/ColorGradient.js.map +1 -0
  33. package/dist/esm/particles/distributions/Distribution.d.ts +2 -2
  34. package/dist/esm/particles/distributions/index.d.ts +2 -2
  35. package/dist/esm/particles/gpu/ParticleGpuState.js +1 -1
  36. package/dist/esm/particles/modules/ColorOverLifetime.d.ts +3 -3
  37. package/dist/esm/particles/modules/ColorOverLifetime.js.map +1 -1
  38. package/dist/esm/particles/modules/ColorOverSpeed.d.ts +3 -3
  39. package/dist/esm/particles/modules/ColorOverSpeed.js.map +1 -1
  40. package/dist/esm/particles/modules/UpdateModule.d.ts +2 -2
  41. package/dist/esm/particles/modules/UpdateModule.js +1 -1
  42. package/dist/esm/particles/modules/WgslContribution.d.ts +2 -2
  43. package/dist/esm/rendering/Camera.d.ts +33 -0
  44. package/dist/esm/rendering/Camera.js +38 -0
  45. package/dist/esm/rendering/Camera.js.map +1 -0
  46. package/dist/esm/rendering/Container.d.ts +5 -24
  47. package/dist/esm/rendering/Container.js +8 -71
  48. package/dist/esm/rendering/Container.js.map +1 -1
  49. package/dist/esm/rendering/Drawable.d.ts +8 -10
  50. package/dist/esm/rendering/Drawable.js +12 -20
  51. package/dist/esm/rendering/Drawable.js.map +1 -1
  52. package/dist/esm/rendering/RenderBackend.d.ts +18 -0
  53. package/dist/esm/rendering/RenderNode.d.ts +81 -8
  54. package/dist/esm/rendering/RenderNode.js +121 -144
  55. package/dist/esm/rendering/RenderNode.js.map +1 -1
  56. package/dist/esm/rendering/RenderTarget.d.ts +13 -0
  57. package/dist/esm/rendering/RenderTarget.js +13 -0
  58. package/dist/esm/rendering/RenderTarget.js.map +1 -1
  59. package/dist/esm/rendering/RenderTargetPass.js +17 -0
  60. package/dist/esm/rendering/RenderTargetPass.js.map +1 -1
  61. package/dist/esm/rendering/RenderingContext.d.ts +87 -0
  62. package/dist/esm/rendering/RenderingContext.js +157 -0
  63. package/dist/esm/rendering/RenderingContext.js.map +1 -0
  64. package/dist/esm/rendering/TransformBuffer.d.ts +38 -0
  65. package/dist/esm/rendering/TransformBuffer.js +116 -0
  66. package/dist/esm/rendering/TransformBuffer.js.map +1 -0
  67. package/dist/esm/rendering/filters/WebGpuShaderFilter.js +5 -12
  68. package/dist/esm/rendering/filters/WebGpuShaderFilter.js.map +1 -1
  69. package/dist/esm/rendering/geometry/Geometry.d.ts +40 -0
  70. package/dist/esm/rendering/geometry/Geometry.js +228 -0
  71. package/dist/esm/rendering/geometry/Geometry.js.map +1 -0
  72. package/dist/esm/rendering/geometry/GeometryAttribute.d.ts +32 -0
  73. package/dist/esm/rendering/geometry/QuadGeometry.d.ts +5 -0
  74. package/dist/esm/rendering/gradient/Gradient.d.ts +34 -0
  75. package/dist/esm/rendering/gradient/Gradient.js +114 -0
  76. package/dist/esm/rendering/gradient/Gradient.js.map +1 -0
  77. package/dist/esm/rendering/gradient/LinearGradient.d.ts +10 -0
  78. package/dist/esm/rendering/gradient/LinearGradient.js +26 -0
  79. package/dist/esm/rendering/gradient/LinearGradient.js.map +1 -0
  80. package/dist/esm/rendering/gradient/RadialGradient.d.ts +10 -0
  81. package/dist/esm/rendering/gradient/RadialGradient.js +25 -0
  82. package/dist/esm/rendering/gradient/RadialGradient.js.map +1 -0
  83. package/dist/esm/rendering/index.d.ts +16 -2
  84. package/dist/esm/rendering/material/Material.d.ts +114 -0
  85. package/dist/esm/rendering/material/Material.js +111 -0
  86. package/dist/esm/rendering/material/Material.js.map +1 -0
  87. package/dist/esm/rendering/material/MaterialKey.d.ts +18 -0
  88. package/dist/esm/rendering/material/MaterialKey.js +82 -0
  89. package/dist/esm/rendering/material/MaterialKey.js.map +1 -0
  90. package/dist/esm/rendering/material/MeshMaterial.d.ts +16 -0
  91. package/dist/esm/rendering/material/MeshMaterial.js +21 -0
  92. package/dist/esm/rendering/material/MeshMaterial.js.map +1 -0
  93. package/dist/esm/rendering/{mesh/MeshShader.d.ts → material/ShaderSource.d.ts} +29 -62
  94. package/dist/esm/rendering/{mesh/MeshShader.js → material/ShaderSource.js} +35 -62
  95. package/dist/esm/rendering/material/ShaderSource.js.map +1 -0
  96. package/dist/esm/rendering/material/SpriteMaterial.d.ts +15 -0
  97. package/dist/esm/rendering/material/SpriteMaterial.js +20 -0
  98. package/dist/esm/rendering/material/SpriteMaterial.js.map +1 -0
  99. package/dist/esm/rendering/mesh/Mesh.d.ts +29 -12
  100. package/dist/esm/rendering/mesh/Mesh.js +122 -3
  101. package/dist/esm/rendering/mesh/Mesh.js.map +1 -1
  102. package/dist/esm/rendering/pass/RenderPassCoordinator.d.ts +63 -0
  103. package/dist/esm/rendering/pass/RenderPassDescriptor.d.ts +48 -0
  104. package/dist/esm/rendering/pass/RenderPassDescriptor.js +16 -0
  105. package/dist/esm/rendering/pass/RenderPassDescriptor.js.map +1 -0
  106. package/dist/esm/rendering/plan/RenderCommand.d.ts +67 -0
  107. package/dist/esm/rendering/plan/RenderCommand.js +94 -0
  108. package/dist/esm/rendering/plan/RenderCommand.js.map +1 -0
  109. package/dist/esm/rendering/plan/RenderEffectExecutor.d.ts +10 -0
  110. package/dist/esm/rendering/plan/RenderEffectExecutor.js +159 -0
  111. package/dist/esm/rendering/plan/RenderEffectExecutor.js.map +1 -0
  112. package/dist/esm/rendering/plan/RenderPlan.d.ts +23 -0
  113. package/dist/esm/rendering/plan/RenderPlan.js +12 -0
  114. package/dist/esm/rendering/plan/RenderPlan.js.map +1 -0
  115. package/dist/esm/rendering/plan/RenderPlanBuilder.d.ts +31 -0
  116. package/dist/esm/rendering/plan/RenderPlanBuilder.js +242 -0
  117. package/dist/esm/rendering/plan/RenderPlanBuilder.js.map +1 -0
  118. package/dist/esm/rendering/plan/RenderPlanOptimizer.d.ts +10 -0
  119. package/dist/esm/rendering/plan/RenderPlanOptimizer.js +180 -0
  120. package/dist/esm/rendering/plan/RenderPlanOptimizer.js.map +1 -0
  121. package/dist/esm/rendering/plan/RenderPlanPlayer.d.ts +9 -0
  122. package/dist/esm/rendering/plan/RenderPlanPlayer.js +56 -0
  123. package/dist/esm/rendering/plan/RenderPlanPlayer.js.map +1 -0
  124. package/dist/esm/rendering/plan/RenderScope.d.ts +70 -0
  125. package/dist/esm/rendering/plan/RenderScope.js +16 -0
  126. package/dist/esm/rendering/plan/RenderScope.js.map +1 -0
  127. package/dist/esm/rendering/plan/playRenderTree.d.ts +4 -0
  128. package/dist/esm/rendering/plan/playRenderTree.js +19 -0
  129. package/dist/esm/rendering/plan/playRenderTree.js.map +1 -0
  130. package/dist/esm/rendering/sprite/Sprite.d.ts +22 -1
  131. package/dist/esm/rendering/sprite/Sprite.js +33 -2
  132. package/dist/esm/rendering/sprite/Sprite.js.map +1 -1
  133. package/dist/esm/rendering/sprite/spriteMaterialSources.d.ts +36 -0
  134. package/dist/esm/rendering/sprite/spriteMaterialSources.js +128 -0
  135. package/dist/esm/rendering/sprite/spriteMaterialSources.js.map +1 -0
  136. package/dist/esm/rendering/text/TextStyle.d.ts +1 -1
  137. package/dist/esm/rendering/texture/DataTexture.d.ts +5 -0
  138. package/dist/esm/rendering/texture/DataTexture.js +7 -0
  139. package/dist/esm/rendering/texture/DataTexture.js.map +1 -1
  140. package/dist/esm/rendering/video/Video.d.ts +3 -7
  141. package/dist/esm/rendering/video/Video.js +3 -8
  142. package/dist/esm/rendering/video/Video.js.map +1 -1
  143. package/dist/esm/rendering/webgl2/WebGl2Backend.d.ts +40 -0
  144. package/dist/esm/rendering/webgl2/WebGl2Backend.js +303 -22
  145. package/dist/esm/rendering/webgl2/WebGl2Backend.js.map +1 -1
  146. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.d.ts +22 -2
  147. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js +404 -112
  148. package/dist/esm/rendering/webgl2/WebGl2MeshRenderer.js.map +1 -1
  149. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.d.ts +57 -0
  150. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js +79 -0
  151. package/dist/esm/rendering/webgl2/WebGl2PassCoordinator.js.map +1 -0
  152. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.d.ts +12 -0
  153. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js +214 -58
  154. package/dist/esm/rendering/webgl2/WebGl2SpriteRenderer.js.map +1 -1
  155. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.d.ts +34 -0
  156. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js +169 -0
  157. package/dist/esm/rendering/webgl2/WebGl2StencilClipper.js.map +1 -0
  158. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js +4 -0
  159. package/dist/esm/rendering/webgl2/WebGl2TextRenderer.js.map +1 -1
  160. package/dist/esm/rendering/webgl2/glsl/mesh.frag.js +1 -1
  161. package/dist/esm/rendering/webgl2/glsl/mesh.vert.js +1 -1
  162. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js +4 -0
  163. package/dist/esm/rendering/webgl2/glsl/stencil-clip.frag.js.map +1 -0
  164. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js +4 -0
  165. package/dist/esm/rendering/webgl2/glsl/stencil-clip.vert.js.map +1 -0
  166. package/dist/esm/rendering/webgpu/WebGpuBackend.d.ts +50 -0
  167. package/dist/esm/rendering/webgpu/WebGpuBackend.js +135 -19
  168. package/dist/esm/rendering/webgpu/WebGpuBackend.js.map +1 -1
  169. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js +22 -17
  170. package/dist/esm/rendering/webgpu/WebGpuMaskCompositor.js.map +1 -1
  171. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.d.ts +24 -0
  172. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js +488 -74
  173. package/dist/esm/rendering/webgpu/WebGpuMeshRenderer.js.map +1 -1
  174. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js +13 -17
  175. package/dist/esm/rendering/webgpu/WebGpuParticleRenderer.js.map +1 -1
  176. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.d.ts +141 -0
  177. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js +270 -0
  178. package/dist/esm/rendering/webgpu/WebGpuPassCoordinator.js.map +1 -0
  179. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.d.ts +16 -0
  180. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js +335 -26
  181. package/dist/esm/rendering/webgpu/WebGpuSpriteRenderer.js.map +1 -1
  182. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.d.ts +57 -0
  183. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js +257 -0
  184. package/dist/esm/rendering/webgpu/WebGpuStencilClipper.js.map +1 -0
  185. package/dist/esm/rendering/webgpu/WebGpuStencilState.d.ts +14 -0
  186. package/dist/esm/rendering/webgpu/WebGpuStencilState.js +36 -0
  187. package/dist/esm/rendering/webgpu/WebGpuStencilState.js.map +1 -0
  188. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js +14 -12
  189. package/dist/esm/rendering/webgpu/WebGpuTextRenderer.js.map +1 -1
  190. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.d.ts +16 -0
  191. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js +57 -0
  192. package/dist/esm/rendering/webgpu/WebGpuTransformStorage.js.map +1 -0
  193. package/dist/esm/resources/JsonStore.d.ts +18 -0
  194. package/dist/esm/resources/JsonStore.js +62 -0
  195. package/dist/esm/resources/JsonStore.js.map +1 -0
  196. package/dist/esm/resources/factories/ImageFactory.d.ts +14 -8
  197. package/dist/esm/resources/factories/ImageFactory.js +13 -6
  198. package/dist/esm/resources/factories/ImageFactory.js.map +1 -1
  199. package/dist/esm/resources/factories/TextureFactory.d.ts +4 -4
  200. package/dist/esm/resources/factories/TextureFactory.js +8 -4
  201. package/dist/esm/resources/factories/TextureFactory.js.map +1 -1
  202. package/dist/esm/resources/index.d.ts +1 -0
  203. package/dist/exo.esm.js +5424 -2205
  204. package/dist/exo.esm.js.map +1 -1
  205. package/package.json +30 -24
  206. package/dist/esm/particles/distributions/Gradient.js.map +0 -1
  207. package/dist/esm/rendering/mesh/MeshShader.js.map +0 -1
  208. package/dist/esm/vendor/webgl-debug.js +0 -1160
  209. package/dist/esm/vendor/webgl-debug.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ import type { Color } from '@/core/Color';
2
+ import { type RenderBackend } from '@/rendering/RenderBackend';
3
+ import { type RenderNode } from '@/rendering/RenderNode';
4
+ import { type RenderStats } from '@/rendering/RenderStats';
5
+ import { RenderTexture } from '@/rendering/texture/RenderTexture';
6
+ import { View } from '@/rendering/View';
7
+ import { Camera } from './Camera';
8
+ export interface RenderToOptions {
9
+ width: number;
10
+ height: number;
11
+ clearColor?: Color;
12
+ }
13
+ export interface RenderOptions {
14
+ /** Override the view used for this render call. Defaults to the context's active camera. */
15
+ view?: View;
16
+ }
17
+ /**
18
+ * Owns rendering orchestration: builds, optimizes and plays the internal
19
+ * RenderPlan for a RenderNode subtree, manages render-target/view state for
20
+ * off-screen capture, and exposes the low-level backend as an escape hatch.
21
+ *
22
+ * The conceptual model is "the context renders the node":
23
+ * context.render(node) // into the active target (canvas by default)
24
+ * context.render(node, { view }) // override view (camera, screenView, etc.)
25
+ * context.renderTo(node, opts) // into an off-screen RenderTexture
26
+ * @stable
27
+ */
28
+ export declare class RenderingContext {
29
+ private readonly _backend;
30
+ private _camera;
31
+ private readonly _screenView;
32
+ constructor(backend: RenderBackend);
33
+ /**
34
+ * The active camera. Defaults to a camera that matches the initial
35
+ * backend view. Replace with a custom `Camera` instance for follow,
36
+ * zoom, bounds, or split-screen viewport behavior.
37
+ */
38
+ get camera(): Camera;
39
+ set camera(camera: Camera);
40
+ /**
41
+ * A RenderingContext-managed screen-space {@link View} suitable for UI
42
+ * overlays. Center and size are reset to match canvas logical dimensions
43
+ * on each {@link resize} call. The returned reference is stable (the same
44
+ * View object across frames), but its properties may change.
45
+ *
46
+ * Never follows, shakes, or rotates by default.
47
+ */
48
+ get screenView(): View;
49
+ /** Backward-compatible alias — returns the active {@link camera}. */
50
+ get view(): View;
51
+ /**
52
+ * Advance follow, shake, and bounds-constraint animations on the
53
+ * active camera. Call once per frame before rendering.
54
+ */
55
+ update(deltaMs: number): void;
56
+ /**
57
+ * Resize the camera and screen view to match new canvas dimensions.
58
+ * Preserves the camera's center and zoom; only the visible area size changes.
59
+ */
60
+ resize(width: number, height: number): void;
61
+ /**
62
+ * Render `node` into the active render target.
63
+ *
64
+ * Sets the backend's active view to `options.view` (or the default camera)
65
+ * before building and playing the render plan. This is the recommended
66
+ * high-level rendering entry point.
67
+ */
68
+ render(node: RenderNode, options?: RenderOptions): void;
69
+ /**
70
+ * Renders `node` into an off-screen {@link RenderTexture} and returns it.
71
+ *
72
+ * The View is centered at `(width / 2, height / 2)` so that the origin
73
+ * of the node's local space sits at the center of the render texture.
74
+ *
75
+ * Saves and restores the active render target and view so the caller's
76
+ * rendering state is undisturbed.
77
+ */
78
+ renderTo(node: RenderNode, options: RenderToOptions): RenderTexture;
79
+ /** Per-frame render counters. Convenience over backend.stats. */
80
+ get stats(): RenderStats;
81
+ /**
82
+ * Low-level backend (draw primitives, flush, target/scissor/stencil state,
83
+ * GPU specifics). Escape hatch for custom passes / custom renderers.
84
+ * @advanced
85
+ */
86
+ get backend(): RenderBackend;
87
+ }
@@ -0,0 +1,157 @@
1
+ import '../core/Color.js';
2
+ import '../core/SceneNode.js';
3
+ import '../core/Time.js';
4
+ import '../math/Size.js';
5
+ import '../math/Rectangle.js';
6
+ import { playRenderTree } from './plan/playRenderTree.js';
7
+ import './plan/RenderCommand.js';
8
+ import './plan/RenderScope.js';
9
+ import { StencilAttachmentMode } from './pass/RenderPassDescriptor.js';
10
+ import { RenderTexture } from './texture/RenderTexture.js';
11
+ import './types.js';
12
+ import { View } from './View.js';
13
+ import { Camera } from './Camera.js';
14
+
15
+ /**
16
+ * Owns rendering orchestration: builds, optimizes and plays the internal
17
+ * RenderPlan for a RenderNode subtree, manages render-target/view state for
18
+ * off-screen capture, and exposes the low-level backend as an escape hatch.
19
+ *
20
+ * The conceptual model is "the context renders the node":
21
+ * context.render(node) // into the active target (canvas by default)
22
+ * context.render(node, { view }) // override view (camera, screenView, etc.)
23
+ * context.renderTo(node, opts) // into an off-screen RenderTexture
24
+ * @stable
25
+ */
26
+ class RenderingContext {
27
+ _backend;
28
+ _camera;
29
+ _screenView;
30
+ constructor(backend) {
31
+ this._backend = backend;
32
+ const viewWidth = backend.view?.width ?? 0;
33
+ const viewHeight = backend.view?.height ?? 0;
34
+ const viewCenterX = backend.view?.center?.x ?? viewWidth / 2;
35
+ const viewCenterY = backend.view?.center?.y ?? viewHeight / 2;
36
+ this._camera = new Camera({
37
+ center: { x: viewCenterX, y: viewCenterY },
38
+ size: { width: viewWidth, height: viewHeight },
39
+ });
40
+ this._screenView = new View(viewCenterX, viewCenterY, viewWidth, viewHeight);
41
+ }
42
+ /**
43
+ * The active camera. Defaults to a camera that matches the initial
44
+ * backend view. Replace with a custom `Camera` instance for follow,
45
+ * zoom, bounds, or split-screen viewport behavior.
46
+ */
47
+ get camera() {
48
+ return this._camera;
49
+ }
50
+ set camera(camera) {
51
+ const previousCamera = this._camera;
52
+ this._camera = camera;
53
+ if (previousCamera !== camera) {
54
+ previousCamera.destroy();
55
+ }
56
+ }
57
+ /**
58
+ * A RenderingContext-managed screen-space {@link View} suitable for UI
59
+ * overlays. Center and size are reset to match canvas logical dimensions
60
+ * on each {@link resize} call. The returned reference is stable (the same
61
+ * View object across frames), but its properties may change.
62
+ *
63
+ * Never follows, shakes, or rotates by default.
64
+ */
65
+ get screenView() {
66
+ return this._screenView;
67
+ }
68
+ /** Backward-compatible alias — returns the active {@link camera}. */
69
+ get view() {
70
+ return this._camera;
71
+ }
72
+ /**
73
+ * Advance follow, shake, and bounds-constraint animations on the
74
+ * active camera. Call once per frame before rendering.
75
+ */
76
+ update(deltaMs) {
77
+ this._camera.update(deltaMs);
78
+ }
79
+ /**
80
+ * Resize the camera and screen view to match new canvas dimensions.
81
+ * Preserves the camera's center and zoom; only the visible area size changes.
82
+ */
83
+ resize(width, height) {
84
+ this._camera.resize(width, height);
85
+ this._screenView.resize(width, height);
86
+ this._screenView.setCenter(width / 2, height / 2);
87
+ }
88
+ /**
89
+ * Render `node` into the active render target.
90
+ *
91
+ * Sets the backend's active view to `options.view` (or the default camera)
92
+ * before building and playing the render plan. This is the recommended
93
+ * high-level rendering entry point.
94
+ */
95
+ render(node, options = {}) {
96
+ const view = options.view ?? this._camera;
97
+ this._backend.setView(view);
98
+ playRenderTree(node, this._backend);
99
+ }
100
+ /**
101
+ * Renders `node` into an off-screen {@link RenderTexture} and returns it.
102
+ *
103
+ * The View is centered at `(width / 2, height / 2)` so that the origin
104
+ * of the node's local space sits at the center of the render texture.
105
+ *
106
+ * Saves and restores the active render target and view so the caller's
107
+ * rendering state is undisturbed.
108
+ */
109
+ renderTo(node, options) {
110
+ const target = new RenderTexture(options.width, options.height);
111
+ const view = new View(options.width / 2, options.height / 2, options.width, options.height);
112
+ const coordinator = this._backend._passCoordinator;
113
+ if (coordinator) {
114
+ coordinator.withChildPass({
115
+ target,
116
+ view,
117
+ load: options.clearColor !== undefined ? 'clear' : 'load',
118
+ clearColor: options.clearColor ?? null,
119
+ stencil: StencilAttachmentMode.None,
120
+ }, () => {
121
+ playRenderTree(node, this._backend);
122
+ });
123
+ return target;
124
+ }
125
+ // Legacy fallback for backends without a pass coordinator (e.g. test stubs).
126
+ const previousTarget = this._backend.renderTarget;
127
+ const previousView = this._backend.view;
128
+ this._backend.setRenderTarget(target);
129
+ this._backend.setView(view);
130
+ if (options.clearColor !== undefined) {
131
+ this._backend.clear(options.clearColor);
132
+ }
133
+ try {
134
+ playRenderTree(node, this._backend);
135
+ }
136
+ finally {
137
+ this._backend.setRenderTarget(previousTarget);
138
+ this._backend.setView(previousView);
139
+ }
140
+ return target;
141
+ }
142
+ /** Per-frame render counters. Convenience over backend.stats. */
143
+ get stats() {
144
+ return this._backend.stats;
145
+ }
146
+ /**
147
+ * Low-level backend (draw primitives, flush, target/scissor/stencil state,
148
+ * GPU specifics). Escape hatch for custom passes / custom renderers.
149
+ * @advanced
150
+ */
151
+ get backend() {
152
+ return this._backend;
153
+ }
154
+ }
155
+
156
+ export { RenderingContext };
157
+ //# sourceMappingURL=RenderingContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderingContext.js","sources":["../../../../src/rendering/RenderingContext.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Color } from '@/core/Color';
2
+ import type { Matrix } from '@/math/Matrix';
3
+ /** @internal */
4
+ export interface TransformBufferFrameSnapshot {
5
+ readonly count: number;
6
+ readonly hash: number;
7
+ readonly changed: boolean;
8
+ readonly version: number;
9
+ }
10
+ /**
11
+ * Internal per-frame transform+tint storage for draw-command node indices.
12
+ *
13
+ * Slot layout (12 floats):
14
+ * - 0..3: (a, b, c, d)
15
+ * - 4..7: (tx, ty, 0, 0)
16
+ * - 8..11: (tintR, tintG, tintB, tintA) with RGB in 0..1
17
+ *
18
+ * @internal
19
+ */
20
+ export declare class TransformBuffer {
21
+ private _data;
22
+ private _count;
23
+ private _version;
24
+ private _frameHash;
25
+ private _lastCommittedHash;
26
+ private _lastCommittedCount;
27
+ get count(): number;
28
+ get capacity(): number;
29
+ get data(): Float32Array;
30
+ get version(): number;
31
+ begin(expectedCount?: number): this;
32
+ push(transform: Matrix, tint: Color): number;
33
+ write(slot: number, transform: Matrix, tint: Color): this;
34
+ commitSnapshot(minCount?: number): TransformBufferFrameSnapshot;
35
+ private _ensureCapacity;
36
+ private _hashFloat;
37
+ private _mix;
38
+ }
@@ -0,0 +1,116 @@
1
+ const floatsPerSlot = 12;
2
+ const initialCapacity = 16;
3
+ const hashPrime = 0x01000193;
4
+ const hashOffset = 0x811c9dc5;
5
+ const hashFloatScratch = new Float32Array(1);
6
+ const hashUintScratch = new Uint32Array(hashFloatScratch.buffer);
7
+ /**
8
+ * Internal per-frame transform+tint storage for draw-command node indices.
9
+ *
10
+ * Slot layout (12 floats):
11
+ * - 0..3: (a, b, c, d)
12
+ * - 4..7: (tx, ty, 0, 0)
13
+ * - 8..11: (tintR, tintG, tintB, tintA) with RGB in 0..1
14
+ *
15
+ * @internal
16
+ */
17
+ class TransformBuffer {
18
+ _data = new Float32Array(initialCapacity * floatsPerSlot);
19
+ _count = 0;
20
+ _version = 0;
21
+ _frameHash = hashOffset >>> 0;
22
+ _lastCommittedHash = 0;
23
+ _lastCommittedCount = -1;
24
+ get count() {
25
+ return this._count;
26
+ }
27
+ get capacity() {
28
+ return this._data.length / floatsPerSlot;
29
+ }
30
+ get data() {
31
+ return this._data;
32
+ }
33
+ get version() {
34
+ return this._version;
35
+ }
36
+ begin(expectedCount = 0) {
37
+ if (expectedCount > 0) {
38
+ this._ensureCapacity(expectedCount);
39
+ }
40
+ this._count = 0;
41
+ this._frameHash = hashOffset >>> 0;
42
+ return this;
43
+ }
44
+ push(transform, tint) {
45
+ const slot = this._count;
46
+ this.write(slot, transform, tint);
47
+ return slot;
48
+ }
49
+ write(slot, transform, tint) {
50
+ if (!Number.isInteger(slot) || slot < 0) {
51
+ throw new Error(`TransformBuffer slot must be a non-negative integer (got ${slot}).`);
52
+ }
53
+ this._ensureCapacity(slot + 1);
54
+ const offset = slot * floatsPerSlot;
55
+ const data = this._data;
56
+ data[offset + 0] = transform.a;
57
+ data[offset + 1] = transform.b;
58
+ data[offset + 2] = transform.c;
59
+ data[offset + 3] = transform.d;
60
+ data[offset + 4] = transform.x;
61
+ data[offset + 5] = transform.y;
62
+ data[offset + 6] = 0;
63
+ data[offset + 7] = 0;
64
+ data[offset + 8] = tint.r / 255;
65
+ data[offset + 9] = tint.g / 255;
66
+ data[offset + 10] = tint.b / 255;
67
+ data[offset + 11] = tint.a;
68
+ if (slot >= this._count) {
69
+ this._count = slot + 1;
70
+ }
71
+ this._frameHash = this._mix(this._frameHash, slot);
72
+ for (let i = 0; i < floatsPerSlot; i++) {
73
+ this._frameHash = this._mix(this._frameHash, this._hashFloat(data[offset + i]));
74
+ }
75
+ return this;
76
+ }
77
+ commitSnapshot(minCount = 0) {
78
+ const count = Math.max(this._count, minCount);
79
+ const hash = this._mix(this._frameHash, count);
80
+ const changed = hash !== this._lastCommittedHash || count !== this._lastCommittedCount;
81
+ if (changed) {
82
+ this._version++;
83
+ this._lastCommittedHash = hash;
84
+ this._lastCommittedCount = count;
85
+ }
86
+ return {
87
+ count,
88
+ hash,
89
+ changed,
90
+ version: this._version,
91
+ };
92
+ }
93
+ _ensureCapacity(requiredSlots) {
94
+ const current = this.capacity;
95
+ if (requiredSlots <= current) {
96
+ return;
97
+ }
98
+ let next = Math.max(current, initialCapacity);
99
+ while (next < requiredSlots) {
100
+ next *= 2;
101
+ }
102
+ const nextData = new Float32Array(next * floatsPerSlot);
103
+ nextData.set(this._data);
104
+ this._data = nextData;
105
+ }
106
+ _hashFloat(value) {
107
+ hashFloatScratch[0] = value;
108
+ return hashUintScratch[0] >>> 0;
109
+ }
110
+ _mix(hash, value) {
111
+ return Math.imul((hash ^ value) >>> 0, hashPrime) >>> 0;
112
+ }
113
+ }
114
+
115
+ export { TransformBuffer };
116
+ //# sourceMappingURL=TransformBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformBuffer.js","sources":["../../../../src/rendering/TransformBuffer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -144,24 +144,17 @@ class WebGpuShaderFilter extends Filter {
144
144
  // ---- Build user bind group (group 1) ----
145
145
  const userBindGroup = this._buildUserBindGroup(gpu, conn);
146
146
  // ---- Encode render pass ----
147
- // Labels are picked up by Spector.js and Chrome DevTools' WebGPU
148
- // panel and displayed as the pass name in capture views; ignored
149
- // by WebGPU at runtime so they cost nothing in release builds.
150
- const device2 = gpu.device;
151
- const encoder = device2.createCommandEncoder({ label: 'WebGpuShaderFilter' });
152
- const pass = encoder.beginRenderPass({
153
- colorAttachments: [gpu.createColorAttachment()],
154
- label: 'WebGpuShaderFilter pass',
155
- });
156
- gpu.stats.renderPasses++;
147
+ // The coordinator owns the GPU pass (it runs inside the surrounding
148
+ // RenderTargetPass child pass, so load/clear is already resolved to
149
+ // a clear of the output target) and ends + submits it below.
150
+ const pass = gpu._passCoordinator.acquirePass().pass;
157
151
  pass.setPipeline(conn.pipeline);
158
152
  pass.setVertexBuffer(0, conn.vertexBuffer);
159
153
  pass.setBindGroup(0, autoBindGroup);
160
154
  pass.setBindGroup(1, userBindGroup);
161
155
  pass.draw(4);
162
156
  gpu.stats.drawCalls++;
163
- pass.end();
164
- gpu.submit(encoder.finish());
157
+ gpu._passCoordinator.endPass();
165
158
  }, {
166
159
  target: output,
167
160
  view: output.view,
@@ -1 +1 @@
1
- {"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WebGpuShaderFilter.js","sources":["../../../../../src/rendering/filters/WebGpuShaderFilter.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { Rectangle } from '@/math/Rectangle';
2
+ import type { GeometryAttribute, GeometryOptions, GeometryUsage, Topology } from './GeometryAttribute';
3
+ /**
4
+ * Non-renderable geometry data object used by advanced rendering paths.
5
+ *
6
+ * Geometry owns only vertex/index data and its layout metadata; it is not a
7
+ * scene node, has no transform state, and cannot render itself.
8
+ * @advanced
9
+ */
10
+ export declare class Geometry {
11
+ readonly attributes: readonly GeometryAttribute[];
12
+ readonly stride: number;
13
+ readonly topology: Topology;
14
+ readonly usage: GeometryUsage;
15
+ readonly indices: Uint16Array | Uint32Array | null;
16
+ vertexData: Float32Array | ArrayBuffer;
17
+ private _version;
18
+ private _localBounds;
19
+ private _localBoundsDirty;
20
+ private readonly _positionAttribute;
21
+ private readonly _disposeCallbacks;
22
+ constructor(options: GeometryOptions);
23
+ get vertexCount(): number;
24
+ get indexCount(): number;
25
+ get version(): number;
26
+ get id(): number;
27
+ /** Mark vertex data as mutated in place so backends can re-upload GPU buffers. */
28
+ invalidate(): this;
29
+ /** Return local-space bounds; when `out` is provided it is populated and returned. */
30
+ getLocalBounds(out?: Rectangle): Rectangle;
31
+ /** Force local-space AABB recomputation from the current position attribute data. */
32
+ recomputeLocalBounds(): this;
33
+ /** Release backend-owned resources associated with this geometry instance. */
34
+ destroy(): void;
35
+ /**
36
+ * Internal backend hook used to register per-geometry cleanup callbacks.
37
+ * @internal
38
+ */
39
+ _onDispose(callback: () => void): void;
40
+ }