@skenora/runtime 0.1.2

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 (270) hide show
  1. package/README.md +92 -0
  2. package/dist/core/built-in-runtime-capabilities.d.ts +21 -0
  3. package/dist/core/built-in-runtime-capabilities.d.ts.map +1 -0
  4. package/dist/core/built-in-runtime-capabilities.js +175 -0
  5. package/dist/core/built-in-runtime-capabilities.js.map +1 -0
  6. package/dist/core/runtime-capability-registry.d.ts +90 -0
  7. package/dist/core/runtime-capability-registry.d.ts.map +1 -0
  8. package/dist/core/runtime-capability-registry.js +42 -0
  9. package/dist/core/runtime-capability-registry.js.map +1 -0
  10. package/dist/core/runtime-document-coordinator.d.ts +28 -0
  11. package/dist/core/runtime-document-coordinator.d.ts.map +1 -0
  12. package/dist/core/runtime-document-coordinator.js +124 -0
  13. package/dist/core/runtime-document-coordinator.js.map +1 -0
  14. package/dist/core/runtime-events.d.ts +43 -0
  15. package/dist/core/runtime-events.d.ts.map +1 -0
  16. package/dist/core/runtime-events.js +2 -0
  17. package/dist/core/runtime-events.js.map +1 -0
  18. package/dist/core/runtime-session.d.ts +93 -0
  19. package/dist/core/runtime-session.d.ts.map +1 -0
  20. package/dist/core/runtime-session.js +1344 -0
  21. package/dist/core/runtime-session.js.map +1 -0
  22. package/dist/editor-tools/camera-path-editing-controller.d.ts +36 -0
  23. package/dist/editor-tools/camera-path-editing-controller.d.ts.map +1 -0
  24. package/dist/editor-tools/camera-path-editing-controller.js +212 -0
  25. package/dist/editor-tools/camera-path-editing-controller.js.map +1 -0
  26. package/dist/editor-tools/camera-path-visualizer.d.ts +28 -0
  27. package/dist/editor-tools/camera-path-visualizer.d.ts.map +1 -0
  28. package/dist/editor-tools/camera-path-visualizer.js +151 -0
  29. package/dist/editor-tools/camera-path-visualizer.js.map +1 -0
  30. package/dist/editor-tools/drop-preview-controller.d.ts +34 -0
  31. package/dist/editor-tools/drop-preview-controller.d.ts.map +1 -0
  32. package/dist/editor-tools/drop-preview-controller.js +209 -0
  33. package/dist/editor-tools/drop-preview-controller.js.map +1 -0
  34. package/dist/editor-tools/grid-helper.d.ts +18 -0
  35. package/dist/editor-tools/grid-helper.d.ts.map +1 -0
  36. package/dist/editor-tools/grid-helper.js +27 -0
  37. package/dist/editor-tools/grid-helper.js.map +1 -0
  38. package/dist/editor-tools/light-editing-controller.d.ts +25 -0
  39. package/dist/editor-tools/light-editing-controller.d.ts.map +1 -0
  40. package/dist/editor-tools/light-editing-controller.js +207 -0
  41. package/dist/editor-tools/light-editing-controller.js.map +1 -0
  42. package/dist/editor-tools/node-operations.d.ts +51 -0
  43. package/dist/editor-tools/node-operations.d.ts.map +1 -0
  44. package/dist/editor-tools/node-operations.js +182 -0
  45. package/dist/editor-tools/node-operations.js.map +1 -0
  46. package/dist/editor-tools/selection-controller.d.ts +44 -0
  47. package/dist/editor-tools/selection-controller.d.ts.map +1 -0
  48. package/dist/editor-tools/selection-controller.js +299 -0
  49. package/dist/editor-tools/selection-controller.js.map +1 -0
  50. package/dist/editor-tools/shape-drawing-controller.d.ts +45 -0
  51. package/dist/editor-tools/shape-drawing-controller.d.ts.map +1 -0
  52. package/dist/editor-tools/shape-drawing-controller.js +205 -0
  53. package/dist/editor-tools/shape-drawing-controller.js.map +1 -0
  54. package/dist/editor-tools/shape-editing-controller.d.ts +40 -0
  55. package/dist/editor-tools/shape-editing-controller.d.ts.map +1 -0
  56. package/dist/editor-tools/shape-editing-controller.js +340 -0
  57. package/dist/editor-tools/shape-editing-controller.js.map +1 -0
  58. package/dist/editor.d.ts +12 -0
  59. package/dist/editor.d.ts.map +1 -0
  60. package/dist/editor.js +12 -0
  61. package/dist/editor.js.map +1 -0
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +2 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/inspection/node-tools.d.ts +51 -0
  67. package/dist/inspection/node-tools.d.ts.map +1 -0
  68. package/dist/inspection/node-tools.js +282 -0
  69. package/dist/inspection/node-tools.js.map +1 -0
  70. package/dist/interaction/runtime-third-person-controller.d.ts +24 -0
  71. package/dist/interaction/runtime-third-person-controller.d.ts.map +1 -0
  72. package/dist/interaction/runtime-third-person-controller.js +71 -0
  73. package/dist/interaction/runtime-third-person-controller.js.map +1 -0
  74. package/dist/interaction/third-person-controller.d.ts +61 -0
  75. package/dist/interaction/third-person-controller.d.ts.map +1 -0
  76. package/dist/interaction/third-person-controller.js +400 -0
  77. package/dist/interaction/third-person-controller.js.map +1 -0
  78. package/dist/interaction.d.ts +3 -0
  79. package/dist/interaction.d.ts.map +1 -0
  80. package/dist/interaction.js +3 -0
  81. package/dist/interaction.js.map +1 -0
  82. package/dist/presentation/scene-renderer.d.ts +75 -0
  83. package/dist/presentation/scene-renderer.d.ts.map +1 -0
  84. package/dist/presentation/scene-renderer.js +324 -0
  85. package/dist/presentation/scene-renderer.js.map +1 -0
  86. package/dist/presentation/viewport-controller.d.ts +13 -0
  87. package/dist/presentation/viewport-controller.d.ts.map +1 -0
  88. package/dist/presentation/viewport-controller.js +186 -0
  89. package/dist/presentation/viewport-controller.js.map +1 -0
  90. package/dist/projection/annotation-projector.d.ts +28 -0
  91. package/dist/projection/annotation-projector.d.ts.map +1 -0
  92. package/dist/projection/annotation-projector.js +98 -0
  93. package/dist/projection/annotation-projector.js.map +1 -0
  94. package/dist/projection/built-in-entity-projectors.d.ts +7 -0
  95. package/dist/projection/built-in-entity-projectors.d.ts.map +1 -0
  96. package/dist/projection/built-in-entity-projectors.js +75 -0
  97. package/dist/projection/built-in-entity-projectors.js.map +1 -0
  98. package/dist/projection/camera-entity-factory.d.ts +9 -0
  99. package/dist/projection/camera-entity-factory.d.ts.map +1 -0
  100. package/dist/projection/camera-entity-factory.js +93 -0
  101. package/dist/projection/camera-entity-factory.js.map +1 -0
  102. package/dist/projection/document-applier.d.ts +38 -0
  103. package/dist/projection/document-applier.d.ts.map +1 -0
  104. package/dist/projection/document-applier.js +219 -0
  105. package/dist/projection/document-applier.js.map +1 -0
  106. package/dist/projection/entity-projection-registry.d.ts +56 -0
  107. package/dist/projection/entity-projection-registry.d.ts.map +1 -0
  108. package/dist/projection/entity-projection-registry.js +121 -0
  109. package/dist/projection/entity-projection-registry.js.map +1 -0
  110. package/dist/projection/model-importer.d.ts +41 -0
  111. package/dist/projection/model-importer.d.ts.map +1 -0
  112. package/dist/projection/model-importer.js +469 -0
  113. package/dist/projection/model-importer.js.map +1 -0
  114. package/dist/projection/particle-capability.d.ts +5 -0
  115. package/dist/projection/particle-capability.d.ts.map +1 -0
  116. package/dist/projection/particle-capability.js +2 -0
  117. package/dist/projection/particle-capability.js.map +1 -0
  118. package/dist/projection/particle-factory.d.ts +18 -0
  119. package/dist/projection/particle-factory.d.ts.map +1 -0
  120. package/dist/projection/particle-factory.js +313 -0
  121. package/dist/projection/particle-factory.js.map +1 -0
  122. package/dist/projection/primitive-factory.d.ts +5 -0
  123. package/dist/projection/primitive-factory.d.ts.map +1 -0
  124. package/dist/projection/primitive-factory.js +55 -0
  125. package/dist/projection/primitive-factory.js.map +1 -0
  126. package/dist/projection/procedural-factory.d.ts +6 -0
  127. package/dist/projection/procedural-factory.d.ts.map +1 -0
  128. package/dist/projection/procedural-factory.js +34 -0
  129. package/dist/projection/procedural-factory.js.map +1 -0
  130. package/dist/projection/runtime-projection-state.d.ts +19 -0
  131. package/dist/projection/runtime-projection-state.d.ts.map +1 -0
  132. package/dist/projection/runtime-projection-state.js +58 -0
  133. package/dist/projection/runtime-projection-state.js.map +1 -0
  134. package/dist/projection/shape-factory.d.ts +5 -0
  135. package/dist/projection/shape-factory.d.ts.map +1 -0
  136. package/dist/projection/shape-factory.js +101 -0
  137. package/dist/projection/shape-factory.js.map +1 -0
  138. package/dist/projection-entry.d.ts +10 -0
  139. package/dist/projection-entry.d.ts.map +1 -0
  140. package/dist/projection-entry.js +8 -0
  141. package/dist/projection-entry.js.map +1 -0
  142. package/dist/simulation/fixed-step-scheduler.d.ts +13 -0
  143. package/dist/simulation/fixed-step-scheduler.d.ts.map +1 -0
  144. package/dist/simulation/fixed-step-scheduler.js +45 -0
  145. package/dist/simulation/fixed-step-scheduler.js.map +1 -0
  146. package/dist/simulation/simulation-runtime-model.d.ts +24 -0
  147. package/dist/simulation/simulation-runtime-model.d.ts.map +1 -0
  148. package/dist/simulation/simulation-runtime-model.js +63 -0
  149. package/dist/simulation/simulation-runtime-model.js.map +1 -0
  150. package/dist/simulation/simulation-wgsl.d.ts +3 -0
  151. package/dist/simulation/simulation-wgsl.d.ts.map +1 -0
  152. package/dist/simulation/simulation-wgsl.js +294 -0
  153. package/dist/simulation/simulation-wgsl.js.map +1 -0
  154. package/dist/simulation/webgpu-simulation-renderer.d.ts +67 -0
  155. package/dist/simulation/webgpu-simulation-renderer.d.ts.map +1 -0
  156. package/dist/simulation/webgpu-simulation-renderer.js +504 -0
  157. package/dist/simulation/webgpu-simulation-renderer.js.map +1 -0
  158. package/dist/simulation/webgpu-types.d.ts +90 -0
  159. package/dist/simulation/webgpu-types.d.ts.map +1 -0
  160. package/dist/simulation/webgpu-types.js +10 -0
  161. package/dist/simulation/webgpu-types.js.map +1 -0
  162. package/dist/simulation.d.ts +4 -0
  163. package/dist/simulation.d.ts.map +1 -0
  164. package/dist/simulation.js +4 -0
  165. package/dist/simulation.js.map +1 -0
  166. package/dist/systems/animation-controller.d.ts +52 -0
  167. package/dist/systems/animation-controller.d.ts.map +1 -0
  168. package/dist/systems/animation-controller.js +146 -0
  169. package/dist/systems/animation-controller.js.map +1 -0
  170. package/dist/systems/camera-controller.d.ts +41 -0
  171. package/dist/systems/camera-controller.d.ts.map +1 -0
  172. package/dist/systems/camera-controller.js +207 -0
  173. package/dist/systems/camera-controller.js.map +1 -0
  174. package/dist/systems/camera-path-controller.d.ts +39 -0
  175. package/dist/systems/camera-path-controller.d.ts.map +1 -0
  176. package/dist/systems/camera-path-controller.js +287 -0
  177. package/dist/systems/camera-path-controller.js.map +1 -0
  178. package/dist/systems/environment-controller.d.ts +18 -0
  179. package/dist/systems/environment-controller.d.ts.map +1 -0
  180. package/dist/systems/environment-controller.js +251 -0
  181. package/dist/systems/environment-controller.js.map +1 -0
  182. package/dist/systems/environment-texture.d.ts +7 -0
  183. package/dist/systems/environment-texture.d.ts.map +1 -0
  184. package/dist/systems/environment-texture.js +57 -0
  185. package/dist/systems/environment-texture.js.map +1 -0
  186. package/dist/systems/fog-controller.d.ts +12 -0
  187. package/dist/systems/fog-controller.d.ts.map +1 -0
  188. package/dist/systems/fog-controller.js +60 -0
  189. package/dist/systems/fog-controller.js.map +1 -0
  190. package/dist/systems/generated-texture-cache.d.ts +33 -0
  191. package/dist/systems/generated-texture-cache.d.ts.map +1 -0
  192. package/dist/systems/generated-texture-cache.js +101 -0
  193. package/dist/systems/generated-texture-cache.js.map +1 -0
  194. package/dist/systems/glass-transmission-controller.d.ts +21 -0
  195. package/dist/systems/glass-transmission-controller.d.ts.map +1 -0
  196. package/dist/systems/glass-transmission-controller.js +119 -0
  197. package/dist/systems/glass-transmission-controller.js.map +1 -0
  198. package/dist/systems/gpu-program-cache.d.ts +19 -0
  199. package/dist/systems/gpu-program-cache.d.ts.map +1 -0
  200. package/dist/systems/gpu-program-cache.js +95 -0
  201. package/dist/systems/gpu-program-cache.js.map +1 -0
  202. package/dist/systems/ground-controller.d.ts +14 -0
  203. package/dist/systems/ground-controller.d.ts.map +1 -0
  204. package/dist/systems/ground-controller.js +121 -0
  205. package/dist/systems/ground-controller.js.map +1 -0
  206. package/dist/systems/lighting-controller.d.ts +23 -0
  207. package/dist/systems/lighting-controller.d.ts.map +1 -0
  208. package/dist/systems/lighting-controller.js +204 -0
  209. package/dist/systems/lighting-controller.js.map +1 -0
  210. package/dist/systems/material-animation-controller.d.ts +26 -0
  211. package/dist/systems/material-animation-controller.d.ts.map +1 -0
  212. package/dist/systems/material-animation-controller.js +221 -0
  213. package/dist/systems/material-animation-controller.js.map +1 -0
  214. package/dist/systems/material-binding-resolver.d.ts +16 -0
  215. package/dist/systems/material-binding-resolver.d.ts.map +1 -0
  216. package/dist/systems/material-binding-resolver.js +54 -0
  217. package/dist/systems/material-binding-resolver.js.map +1 -0
  218. package/dist/systems/material-controller.d.ts +29 -0
  219. package/dist/systems/material-controller.d.ts.map +1 -0
  220. package/dist/systems/material-controller.js +233 -0
  221. package/dist/systems/material-controller.js.map +1 -0
  222. package/dist/systems/material-preparation.d.ts +9 -0
  223. package/dist/systems/material-preparation.d.ts.map +1 -0
  224. package/dist/systems/material-preparation.js +51 -0
  225. package/dist/systems/material-preparation.js.map +1 -0
  226. package/dist/systems/material-slots.d.ts +18 -0
  227. package/dist/systems/material-slots.d.ts.map +1 -0
  228. package/dist/systems/material-slots.js +78 -0
  229. package/dist/systems/material-slots.js.map +1 -0
  230. package/dist/systems/owned-material-controller.d.ts +20 -0
  231. package/dist/systems/owned-material-controller.d.ts.map +1 -0
  232. package/dist/systems/owned-material-controller.js +611 -0
  233. package/dist/systems/owned-material-controller.js.map +1 -0
  234. package/dist/systems/pbr-material.d.ts +22 -0
  235. package/dist/systems/pbr-material.d.ts.map +1 -0
  236. package/dist/systems/pbr-material.js +358 -0
  237. package/dist/systems/pbr-material.js.map +1 -0
  238. package/dist/systems/post-process-controller.d.ts +17 -0
  239. package/dist/systems/post-process-controller.d.ts.map +1 -0
  240. package/dist/systems/post-process-controller.js +246 -0
  241. package/dist/systems/post-process-controller.js.map +1 -0
  242. package/dist/systems/runtime-clock.d.ts +9 -0
  243. package/dist/systems/runtime-clock.d.ts.map +1 -0
  244. package/dist/systems/runtime-clock.js +25 -0
  245. package/dist/systems/runtime-clock.js.map +1 -0
  246. package/dist/systems/skybox-controller.d.ts +15 -0
  247. package/dist/systems/skybox-controller.d.ts.map +1 -0
  248. package/dist/systems/skybox-controller.js +282 -0
  249. package/dist/systems/skybox-controller.js.map +1 -0
  250. package/dist/systems/sprite-sheet-controller.d.ts +52 -0
  251. package/dist/systems/sprite-sheet-controller.d.ts.map +1 -0
  252. package/dist/systems/sprite-sheet-controller.js +187 -0
  253. package/dist/systems/sprite-sheet-controller.js.map +1 -0
  254. package/dist/systems/surface-effect-plugin.d.ts +26 -0
  255. package/dist/systems/surface-effect-plugin.d.ts.map +1 -0
  256. package/dist/systems/surface-effect-plugin.js +204 -0
  257. package/dist/systems/surface-effect-plugin.js.map +1 -0
  258. package/dist/systems/surface-program-plugin.d.ts +29 -0
  259. package/dist/systems/surface-program-plugin.d.ts.map +1 -0
  260. package/dist/systems/surface-program-plugin.js +139 -0
  261. package/dist/systems/surface-program-plugin.js.map +1 -0
  262. package/dist/systems/texture-animation-controller.d.ts +18 -0
  263. package/dist/systems/texture-animation-controller.d.ts.map +1 -0
  264. package/dist/systems/texture-animation-controller.js +147 -0
  265. package/dist/systems/texture-animation-controller.js.map +1 -0
  266. package/dist/systems/weather-controller.d.ts +16 -0
  267. package/dist/systems/weather-controller.d.ts.map +1 -0
  268. package/dist/systems/weather-controller.js +205 -0
  269. package/dist/systems/weather-controller.js.map +1 -0
  270. package/package.json +63 -0
@@ -0,0 +1,67 @@
1
+ import type { SimulationProgram } from "@skenora/contracts";
2
+ import { SimulationRuntimeModel } from "./simulation-runtime-model.js";
3
+ export interface WebGpuSimulationRendererOptions {
4
+ readonly canvas: HTMLCanvasElement;
5
+ readonly program: Readonly<SimulationProgram>;
6
+ readonly autoStart?: boolean;
7
+ readonly maxPixelRatio?: number;
8
+ }
9
+ export interface WebGpuSimulationSnapshot {
10
+ readonly version: 1;
11
+ readonly backend: "webgpu";
12
+ readonly kernel: SimulationProgram["kernel"];
13
+ readonly status: ReturnType<SimulationRuntimeModel["snapshot"]>["status"];
14
+ readonly topologySignature: string;
15
+ readonly grid: Readonly<{
16
+ width: number;
17
+ height: number;
18
+ }>;
19
+ readonly canvas: Readonly<{
20
+ width: number;
21
+ height: number;
22
+ }>;
23
+ readonly resources: readonly [string, string];
24
+ readonly currentResource: string;
25
+ readonly storageBytes: number;
26
+ readonly passesPerStep: number;
27
+ readonly swaps: number;
28
+ readonly fixedSteps: number;
29
+ readonly frames: number;
30
+ readonly readbacks: number;
31
+ readonly droppedMilliseconds: number;
32
+ readonly features: readonly string[];
33
+ readonly limits: Readonly<Record<string, number>>;
34
+ readonly loss?: Readonly<{
35
+ reason: string;
36
+ message: string;
37
+ }>;
38
+ }
39
+ export interface WebGpuSimulationProbeReport {
40
+ readonly version: 1;
41
+ readonly verdict: "healthy" | "unhealthy";
42
+ readonly byteLength: number;
43
+ readonly finiteSamples: number;
44
+ readonly nonZeroSamples: number;
45
+ readonly maximumAbsoluteValue: number;
46
+ readonly steadyStateReadbacks: 0;
47
+ }
48
+ export declare class WebGpuSimulationUnsupportedError extends Error {
49
+ constructor(message?: string);
50
+ }
51
+ /**
52
+ * Optional public WebGPU compute/fullscreen renderer. It owns all GPU objects
53
+ * and exposes only serializable snapshots and explicit probe data.
54
+ */
55
+ export declare class WebGpuSimulationRenderer {
56
+ #private;
57
+ private constructor();
58
+ static create(options: WebGpuSimulationRendererOptions): Promise<WebGpuSimulationRenderer>;
59
+ snapshot(): WebGpuSimulationSnapshot;
60
+ pause(): void;
61
+ resume(): void;
62
+ reset(): void;
63
+ probe(): Promise<WebGpuSimulationProbeReport>;
64
+ dispose(): void;
65
+ }
66
+ export declare function isWebGpuSimulationSupported(): boolean;
67
+ //# sourceMappingURL=webgpu-simulation-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-simulation-renderer.d.ts","sourceRoot":"","sources":["../../src/simulation/webgpu-simulation-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAO5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAmBpE,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,oBAAoB,EAAE,CAAC,CAAC;CAClC;AAED,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,OAAO,SAAoD;CAIxE;AAED;;;GAGG;AACH,qBAAa,wBAAwB;;IAsCnC,OAAO;WAmIM,MAAM,CACjB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,wBAAwB,CAAC;IAmEpC,QAAQ,IAAI,wBAAwB;IA+BpC,KAAK,IAAI,IAAI;IAMb,MAAM,IAAI,IAAI;IAOd,KAAK,IAAI,IAAI;IAUP,KAAK,IAAI,OAAO,CAAC,2BAA2B,CAAC;IA+CnD,OAAO,IAAI,IAAI;CA8JhB;AAED,wBAAgB,2BAA2B,IAAI,OAAO,CAErD"}
@@ -0,0 +1,504 @@
1
+ import { compileSimulationProgram, } from "@skenora/procedural";
2
+ import { FixedStepScheduler } from "./fixed-step-scheduler.js";
3
+ import { SimulationRuntimeModel } from "./simulation-runtime-model.js";
4
+ import { createSimulationWgsl } from "./simulation-wgsl.js";
5
+ import { GPU_BUFFER_USAGE, GPU_MAP_MODE, GPU_TEXTURE_USAGE, } from "./webgpu-types.js";
6
+ const UNIFORM_STRIDE = 256;
7
+ const UNIFORM_BYTES = 64;
8
+ export class WebGpuSimulationUnsupportedError extends Error {
9
+ constructor(message = "WebGPU is unavailable in this browser or device") {
10
+ super(message);
11
+ this.name = "WebGpuSimulationUnsupportedError";
12
+ }
13
+ }
14
+ /**
15
+ * Optional public WebGPU compute/fullscreen renderer. It owns all GPU objects
16
+ * and exposes only serializable snapshots and explicit probe data.
17
+ */
18
+ export class WebGpuSimulationRenderer {
19
+ #canvas;
20
+ #compiled;
21
+ #adapter;
22
+ #device;
23
+ #context;
24
+ #format;
25
+ #computePipeline;
26
+ #renderPipeline;
27
+ #buffers;
28
+ #readback;
29
+ #uniforms;
30
+ #uniformData;
31
+ #computeBindGroups;
32
+ #renderBindGroups;
33
+ #scheduler;
34
+ #model;
35
+ #resizeObserver;
36
+ #maxPixelRatio;
37
+ #pointerHandler;
38
+ #frameHandle;
39
+ #frames = 0;
40
+ #readbacks = 0;
41
+ #droppedMilliseconds = 0;
42
+ #simulationTime = 0;
43
+ #pointer = Object.seal({ x: 0.5, y: 0.5, updatedAt: -Infinity });
44
+ #loss;
45
+ constructor(options, compiled, adapter, device, context, format, computePipeline, renderPipeline) {
46
+ this.#canvas = options.canvas;
47
+ this.#compiled = compiled;
48
+ this.#adapter = adapter;
49
+ this.#device = device;
50
+ this.#context = context;
51
+ this.#format = format;
52
+ this.#computePipeline = computePipeline;
53
+ this.#renderPipeline = renderPipeline;
54
+ this.#maxPixelRatio = options.maxPixelRatio ?? 1.5;
55
+ this.#scheduler = new FixedStepScheduler(compiled.fixedStepMilliseconds, compiled.maxSubsteps);
56
+ this.#model = new SimulationRuntimeModel(compiled);
57
+ const bytesPerBuffer = compiled.estimatedBytes / 2;
58
+ this.#buffers = [
59
+ device.createBuffer({
60
+ label: `skenora:${compiled.resourceIds[0]}`,
61
+ size: bytesPerBuffer,
62
+ usage: GPU_BUFFER_USAGE.STORAGE |
63
+ GPU_BUFFER_USAGE.COPY_SRC |
64
+ GPU_BUFFER_USAGE.COPY_DST,
65
+ }),
66
+ device.createBuffer({
67
+ label: `skenora:${compiled.resourceIds[1]}`,
68
+ size: bytesPerBuffer,
69
+ usage: GPU_BUFFER_USAGE.STORAGE |
70
+ GPU_BUFFER_USAGE.COPY_SRC |
71
+ GPU_BUFFER_USAGE.COPY_DST,
72
+ }),
73
+ ];
74
+ this.#readback = device.createBuffer({
75
+ label: "skenora:simulation-probe",
76
+ size: bytesPerBuffer,
77
+ usage: GPU_BUFFER_USAGE.MAP_READ | GPU_BUFFER_USAGE.COPY_DST,
78
+ });
79
+ this.#uniforms = device.createBuffer({
80
+ label: "skenora:simulation-uniforms",
81
+ size: Math.max(1, compiled.passes.length) * UNIFORM_STRIDE,
82
+ usage: GPU_BUFFER_USAGE.UNIFORM | GPU_BUFFER_USAGE.COPY_DST,
83
+ });
84
+ this.#uniformData = Object.freeze(compiled.passes.map(() => {
85
+ const buffer = new ArrayBuffer(UNIFORM_BYTES);
86
+ return Object.freeze({
87
+ u32: new Uint32Array(buffer),
88
+ f32: new Float32Array(buffer),
89
+ bytes: new Uint8Array(buffer),
90
+ });
91
+ }));
92
+ const computeLayout = computePipeline.getBindGroupLayout(0);
93
+ this.#computeBindGroups = Object.freeze(compiled.passes.map((pass, passIndex) => Object.freeze([
94
+ createComputeBindGroup(device, computeLayout, this.#uniforms, passIndex, this.#buffers[0], this.#buffers[1], pass.id),
95
+ createComputeBindGroup(device, computeLayout, this.#uniforms, passIndex, this.#buffers[1], this.#buffers[0], pass.id),
96
+ ])));
97
+ const renderLayout = renderPipeline.getBindGroupLayout(0);
98
+ this.#renderBindGroups = Object.freeze([
99
+ createRenderBindGroup(device, renderLayout, this.#uniforms, this.#buffers[0]),
100
+ createRenderBindGroup(device, renderLayout, this.#uniforms, this.#buffers[1]),
101
+ ]);
102
+ const initial = initialState(compiled);
103
+ device.queue.writeBuffer(this.#buffers[0], 0, initial);
104
+ device.queue.writeBuffer(this.#buffers[1], 0, initial);
105
+ this.#resizeObserver = new ResizeObserver(() => this.#resize());
106
+ this.#resizeObserver.observe(this.#canvas);
107
+ this.#pointerHandler = (event) => {
108
+ const bounds = this.#canvas.getBoundingClientRect();
109
+ this.#pointer.x = clamp01((event.clientX - bounds.left) / bounds.width);
110
+ this.#pointer.y = clamp01(1 - (event.clientY - bounds.top) / bounds.height);
111
+ this.#pointer.updatedAt = performance.now();
112
+ };
113
+ this.#canvas.addEventListener("pointermove", this.#pointerHandler);
114
+ this.#resize();
115
+ void device.lost.then((loss) => {
116
+ if (this.#model.status === "disposed")
117
+ return;
118
+ this.#loss = Object.freeze({
119
+ reason: loss.reason,
120
+ message: loss.message,
121
+ });
122
+ this.#model.markDeviceLost();
123
+ this.#cancelFrame();
124
+ });
125
+ if (options.autoStart === false)
126
+ this.#model.pause();
127
+ else
128
+ this.resume();
129
+ }
130
+ static async create(options) {
131
+ const compiled = compileSimulationProgram(options.program);
132
+ const gpu = getGpu();
133
+ if (!gpu)
134
+ throw new WebGpuSimulationUnsupportedError();
135
+ const adapter = await gpu.requestAdapter({
136
+ powerPreference: "high-performance",
137
+ });
138
+ if (!adapter)
139
+ throw new WebGpuSimulationUnsupportedError("No WebGPU adapter was returned");
140
+ const device = await adapter.requestDevice();
141
+ const context = options.canvas.getContext("webgpu");
142
+ if (!context)
143
+ throw new WebGpuSimulationUnsupportedError("WebGPU canvas context is unavailable");
144
+ const format = gpu.getPreferredCanvasFormat();
145
+ context.configure({
146
+ device,
147
+ format,
148
+ alphaMode: "opaque",
149
+ usage: GPU_TEXTURE_USAGE.RENDER_ATTACHMENT,
150
+ });
151
+ const shader = device.createShaderModule({
152
+ label: `skenora:${compiled.kernel}`,
153
+ code: createSimulationWgsl(compiled.kernel, compiled.workgroupSize),
154
+ });
155
+ const compilation = await shader.getCompilationInfo?.();
156
+ const errors = compilation?.messages.filter((message) => message.type === "error") ?? [];
157
+ if (errors.length)
158
+ throw new Error(`Simulation WGSL failed: ${errors
159
+ .map((error) => `line ${error.lineNum}: ${error.message}`)
160
+ .join("; ")}`);
161
+ const computePipeline = await device.createComputePipelineAsync({
162
+ label: `skenora:${compiled.kernel}:compute`,
163
+ layout: "auto",
164
+ compute: { module: shader, entryPoint: "computeMain" },
165
+ });
166
+ const renderPipeline = await device.createRenderPipelineAsync({
167
+ label: `skenora:${compiled.kernel}:render`,
168
+ layout: "auto",
169
+ vertex: { module: shader, entryPoint: "vertexMain" },
170
+ fragment: {
171
+ module: shader,
172
+ entryPoint: "fragmentMain",
173
+ targets: [{ format }],
174
+ },
175
+ primitive: { topology: "triangle-list" },
176
+ });
177
+ return new WebGpuSimulationRenderer(options, compiled, adapter, device, context, format, computePipeline, renderPipeline);
178
+ }
179
+ snapshot() {
180
+ const model = this.#model.snapshot();
181
+ return Object.freeze({
182
+ version: 1,
183
+ backend: "webgpu",
184
+ kernel: this.#compiled.kernel,
185
+ status: model.status,
186
+ topologySignature: this.#compiled.topologySignature,
187
+ grid: Object.freeze({
188
+ width: this.#compiled.width,
189
+ height: this.#compiled.height,
190
+ }),
191
+ canvas: Object.freeze({
192
+ width: this.#canvas.width,
193
+ height: this.#canvas.height,
194
+ }),
195
+ resources: model.resourceIds,
196
+ currentResource: model.currentResourceId,
197
+ storageBytes: this.#compiled.estimatedBytes,
198
+ passesPerStep: this.#compiled.passes.length,
199
+ swaps: model.swaps,
200
+ fixedSteps: model.fixedSteps,
201
+ frames: this.#frames,
202
+ readbacks: this.#readbacks,
203
+ droppedMilliseconds: this.#droppedMilliseconds,
204
+ features: Object.freeze([...this.#adapter.features].sort()),
205
+ limits: Object.freeze(readLimits(this.#adapter.limits)),
206
+ ...(this.#loss ? { loss: this.#loss } : {}),
207
+ });
208
+ }
209
+ pause() {
210
+ if (this.#model.status !== "running")
211
+ return;
212
+ this.#model.pause();
213
+ this.#cancelFrame();
214
+ }
215
+ resume() {
216
+ if (this.#model.status === "running")
217
+ return;
218
+ this.#model.start();
219
+ this.#scheduler.reset();
220
+ this.#requestFrame();
221
+ }
222
+ reset() {
223
+ this.#assertUsable();
224
+ const initial = initialState(this.#compiled);
225
+ this.#device.queue.writeBuffer(this.#buffers[0], 0, initial);
226
+ this.#device.queue.writeBuffer(this.#buffers[1], 0, initial);
227
+ this.#model.reset();
228
+ this.#scheduler.reset();
229
+ this.#simulationTime = 0;
230
+ }
231
+ async probe() {
232
+ this.#assertUsable();
233
+ const wasRunning = this.#model.status === "running";
234
+ if (wasRunning)
235
+ this.pause();
236
+ this.#encodeSimulationStep();
237
+ this.#render();
238
+ const encoder = this.#device.createCommandEncoder({
239
+ label: "skenora:simulation-probe-copy",
240
+ });
241
+ const current = this.#buffers[this.#model.currentIndex];
242
+ encoder.copyBufferToBuffer(current, 0, this.#readback, 0, current.size);
243
+ this.#device.queue.submit([encoder.finish()]);
244
+ await this.#device.queue.onSubmittedWorkDone();
245
+ await this.#readback.mapAsync(GPU_MAP_MODE.READ, 0, current.size);
246
+ const values = new Float32Array(this.#readback.getMappedRange(0, current.size).slice(0));
247
+ this.#readback.unmap();
248
+ this.#readbacks += 1;
249
+ let finiteSamples = 0;
250
+ let nonZeroSamples = 0;
251
+ let maximumAbsoluteValue = 0;
252
+ const stride = Math.max(1, Math.floor(values.length / 2048));
253
+ for (let index = 0; index < values.length; index += stride) {
254
+ const value = values[index];
255
+ if (Number.isFinite(value))
256
+ finiteSamples += 1;
257
+ if (Math.abs(value) > 1e-7)
258
+ nonZeroSamples += 1;
259
+ maximumAbsoluteValue = Math.max(maximumAbsoluteValue, Math.abs(value));
260
+ }
261
+ const verdict = finiteSamples > 0 &&
262
+ nonZeroSamples > 0 &&
263
+ Number.isFinite(maximumAbsoluteValue)
264
+ ? "healthy"
265
+ : "unhealthy";
266
+ if (wasRunning)
267
+ this.resume();
268
+ return Object.freeze({
269
+ version: 1,
270
+ verdict,
271
+ byteLength: current.size,
272
+ finiteSamples,
273
+ nonZeroSamples,
274
+ maximumAbsoluteValue,
275
+ steadyStateReadbacks: 0,
276
+ });
277
+ }
278
+ dispose() {
279
+ if (this.#model.status === "disposed")
280
+ return;
281
+ this.#cancelFrame();
282
+ this.#resizeObserver.disconnect();
283
+ this.#canvas.removeEventListener("pointermove", this.#pointerHandler);
284
+ this.#context.unconfigure();
285
+ this.#buffers[0].destroy();
286
+ this.#buffers[1].destroy();
287
+ this.#readback.destroy();
288
+ this.#uniforms.destroy();
289
+ this.#model.dispose();
290
+ this.#device.destroy();
291
+ }
292
+ #requestFrame() {
293
+ if (this.#frameHandle !== undefined || this.#model.status !== "running")
294
+ return;
295
+ this.#frameHandle = requestAnimationFrame((timestamp) => {
296
+ this.#frameHandle = undefined;
297
+ if (this.#model.status !== "running")
298
+ return;
299
+ const advance = this.#scheduler.advance(timestamp);
300
+ this.#droppedMilliseconds += advance.droppedMilliseconds;
301
+ for (let step = 0; step < advance.steps; step += 1)
302
+ this.#encodeSimulationStep();
303
+ this.#render();
304
+ this.#requestFrame();
305
+ });
306
+ }
307
+ #cancelFrame() {
308
+ if (this.#frameHandle === undefined)
309
+ return;
310
+ cancelAnimationFrame(this.#frameHandle);
311
+ this.#frameHandle = undefined;
312
+ }
313
+ #encodeSimulationStep() {
314
+ this.#assertUsable();
315
+ this.#simulationTime += this.#compiled.fixedStepMilliseconds / 1000;
316
+ const now = performance.now();
317
+ const automatic = now - this.#pointer.updatedAt > 1500;
318
+ const pointerX = automatic
319
+ ? 0.5 + Math.sin(this.#simulationTime * 0.73) * 0.26
320
+ : this.#pointer.x;
321
+ const pointerY = automatic
322
+ ? 0.5 + Math.cos(this.#simulationTime * 0.91) * 0.23
323
+ : this.#pointer.y;
324
+ const encoder = this.#device.createCommandEncoder({
325
+ label: `skenora:${this.#compiled.kernel}:step`,
326
+ });
327
+ for (let index = 0; index < this.#compiled.passes.length; index += 1) {
328
+ const pass = this.#compiled.passes[index];
329
+ const currentIndex = this.#model.currentIndex;
330
+ this.#writeUniform(index, pass, pointerX, pointerY);
331
+ const compute = encoder.beginComputePass({ label: pass.id });
332
+ compute.setPipeline(this.#computePipeline);
333
+ compute.setBindGroup(0, this.#computeBindGroups[index][currentIndex]);
334
+ compute.dispatchWorkgroups(...this.#compiled.dispatch);
335
+ compute.end();
336
+ this.#model.completePass();
337
+ }
338
+ this.#device.queue.submit([encoder.finish()]);
339
+ this.#model.completeFixedStep();
340
+ }
341
+ #render() {
342
+ this.#assertUsable();
343
+ this.#writeUniform(0, this.#compiled.passes[0], this.#pointer.x, this.#pointer.y);
344
+ const encoder = this.#device.createCommandEncoder({
345
+ label: `skenora:${this.#compiled.kernel}:frame`,
346
+ });
347
+ const pass = encoder.beginRenderPass({
348
+ label: `skenora:${this.#compiled.kernel}:present`,
349
+ colorAttachments: [
350
+ {
351
+ view: this.#context.getCurrentTexture().createView(),
352
+ clearValue: { r: 0.005, g: 0.01, b: 0.035, a: 1 },
353
+ loadOp: "clear",
354
+ storeOp: "store",
355
+ },
356
+ ],
357
+ });
358
+ pass.setPipeline(this.#renderPipeline);
359
+ pass.setBindGroup(0, this.#renderBindGroups[this.#model.currentIndex]);
360
+ pass.draw(3, 1);
361
+ pass.end();
362
+ this.#device.queue.submit([encoder.finish()]);
363
+ this.#frames += 1;
364
+ }
365
+ #writeUniform(index, pass, pointerX, pointerY) {
366
+ const data = this.#uniformData[index];
367
+ const { u32, f32 } = data;
368
+ u32[0] = this.#compiled.width;
369
+ u32[1] = this.#compiled.height;
370
+ u32[2] = passKind(pass);
371
+ u32[3] = pass.iteration;
372
+ f32[4] = this.#compiled.fixedStepMilliseconds / 1000;
373
+ f32[5] = this.#simulationTime;
374
+ f32[6] = pointerX;
375
+ f32[7] = pointerY;
376
+ const parameters = this.#compiled.program.parameters;
377
+ if (parameters.kind === "fluid-2d") {
378
+ f32[8] = parameters.injectionStrength;
379
+ f32[9] = parameters.viscosity;
380
+ f32[10] = parameters.dissipation;
381
+ f32[11] = 0;
382
+ }
383
+ else if (parameters.kind === "fft-ocean") {
384
+ f32[8] = parameters.choppiness;
385
+ f32[9] = parameters.windSpeed;
386
+ f32[10] = parameters.amplitude;
387
+ f32[11] = parameters.choppiness;
388
+ }
389
+ else {
390
+ f32[8] = 1;
391
+ f32[9] = parameters.emitterCount;
392
+ f32[10] = parameters.occluderCount;
393
+ f32[11] = parameters.cascadeCount;
394
+ }
395
+ u32[12] = pass.span;
396
+ u32[13] = kernelIndex(this.#compiled.kernel);
397
+ this.#device.queue.writeBuffer(this.#uniforms, index * UNIFORM_STRIDE, data.bytes);
398
+ }
399
+ #resize() {
400
+ const pixelRatio = Math.min(this.#maxPixelRatio, Math.max(1, globalThis.devicePixelRatio || 1));
401
+ const width = Math.max(1, Math.round(this.#canvas.clientWidth * pixelRatio));
402
+ const height = Math.max(1, Math.round(this.#canvas.clientHeight * pixelRatio));
403
+ if (this.#canvas.width !== width)
404
+ this.#canvas.width = width;
405
+ if (this.#canvas.height !== height)
406
+ this.#canvas.height = height;
407
+ }
408
+ #assertUsable() {
409
+ if (this.#model.status === "lost")
410
+ throw new Error("WebGPU device is lost");
411
+ if (this.#model.status === "disposed")
412
+ throw new Error("Renderer is disposed");
413
+ }
414
+ }
415
+ export function isWebGpuSimulationSupported() {
416
+ return getGpu() !== undefined;
417
+ }
418
+ function getGpu() {
419
+ if (typeof navigator === "undefined")
420
+ return undefined;
421
+ return navigator.gpu;
422
+ }
423
+ function createComputeBindGroup(device, layout, uniforms, passIndex, source, target, label) {
424
+ return device.createBindGroup({
425
+ label: `skenora:${label}`,
426
+ layout,
427
+ entries: [
428
+ {
429
+ binding: 0,
430
+ resource: {
431
+ buffer: uniforms,
432
+ offset: passIndex * UNIFORM_STRIDE,
433
+ size: UNIFORM_BYTES,
434
+ },
435
+ },
436
+ { binding: 1, resource: { buffer: source } },
437
+ { binding: 2, resource: { buffer: target } },
438
+ ],
439
+ });
440
+ }
441
+ function createRenderBindGroup(device, layout, uniforms, source) {
442
+ return device.createBindGroup({
443
+ label: "skenora:simulation-present",
444
+ layout,
445
+ entries: [
446
+ {
447
+ binding: 0,
448
+ resource: { buffer: uniforms, offset: 0, size: UNIFORM_BYTES },
449
+ },
450
+ { binding: 1, resource: { buffer: source } },
451
+ ],
452
+ });
453
+ }
454
+ function initialState(compiled) {
455
+ const state = new Float32Array(compiled.width * compiled.height * 4);
456
+ if (compiled.kernel !== "fluid-2d")
457
+ return state;
458
+ for (let y = 0; y < compiled.height; y += 1) {
459
+ for (let x = 0; x < compiled.width; x += 1) {
460
+ const uvX = (x + 0.5) / compiled.width - 0.5;
461
+ const uvY = (y + 0.5) / compiled.height - 0.5;
462
+ const radius = Math.hypot(uvX, uvY);
463
+ const falloff = Math.exp(-radius * radius * 24);
464
+ const index = (y * compiled.width + x) * 4;
465
+ state[index] = -uvY * falloff * 2.2;
466
+ state[index + 1] = uvX * falloff * 2.2;
467
+ state[index + 2] = falloff * (0.7 + 0.3 * Math.sin(radius * 80));
468
+ state[index + 3] = 0;
469
+ }
470
+ }
471
+ return state;
472
+ }
473
+ function passKind(pass) {
474
+ return {
475
+ "fluid.inject": 0,
476
+ "fluid.advect": 1,
477
+ "fluid.project": 2,
478
+ "ocean.spectrum": 10,
479
+ "ocean.bit-reverse-horizontal": 11,
480
+ "ocean.fft-horizontal": 12,
481
+ "ocean.bit-reverse-vertical": 13,
482
+ "ocean.fft-vertical": 14,
483
+ "radiance.seed": 20,
484
+ "radiance.jump-flood": 21,
485
+ "radiance.cascade": 22,
486
+ "radiance.resolve": 23,
487
+ }[pass.operation];
488
+ }
489
+ function kernelIndex(kernel) {
490
+ return kernel === "fluid-2d" ? 0 : kernel === "fft-ocean" ? 1 : 2;
491
+ }
492
+ function readLimits(limits) {
493
+ const names = [
494
+ "maxBufferSize",
495
+ "maxStorageBufferBindingSize",
496
+ "maxComputeInvocationsPerWorkgroup",
497
+ "maxComputeWorkgroupsPerDimension",
498
+ ];
499
+ return Object.fromEntries(names.flatMap((name) => Number.isFinite(limits[name]) ? [[name, limits[name]]] : []));
500
+ }
501
+ function clamp01(value) {
502
+ return Math.max(0, Math.min(1, value));
503
+ }
504
+ //# sourceMappingURL=webgpu-simulation-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgpu-simulation-renderer.js","sourceRoot":"","sources":["../../src/simulation/webgpu-simulation-renderer.ts"],"names":[],"mappings":"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"}