@motion-core/motion-gpu 0.4.1 → 0.5.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 (228) hide show
  1. package/README.md +99 -0
  2. package/dist/advanced.d.ts +1 -0
  3. package/dist/advanced.d.ts.map +1 -0
  4. package/dist/advanced.js +14 -6
  5. package/dist/core/advanced.d.ts +1 -0
  6. package/dist/core/advanced.d.ts.map +1 -0
  7. package/dist/core/advanced.js +14 -5
  8. package/dist/core/compute-shader.d.ts +87 -0
  9. package/dist/core/compute-shader.d.ts.map +1 -0
  10. package/dist/core/compute-shader.js +205 -0
  11. package/dist/core/compute-shader.js.map +1 -0
  12. package/dist/core/current-value.d.ts +1 -0
  13. package/dist/core/current-value.d.ts.map +1 -0
  14. package/dist/core/current-value.js +35 -34
  15. package/dist/core/current-value.js.map +1 -0
  16. package/dist/core/error-diagnostics.d.ts +1 -0
  17. package/dist/core/error-diagnostics.d.ts.map +1 -0
  18. package/dist/core/error-diagnostics.js +70 -137
  19. package/dist/core/error-diagnostics.js.map +1 -0
  20. package/dist/core/error-report.d.ts +2 -1
  21. package/dist/core/error-report.d.ts.map +1 -0
  22. package/dist/core/error-report.js +247 -233
  23. package/dist/core/error-report.js.map +1 -0
  24. package/dist/core/frame-registry.d.ts +1 -0
  25. package/dist/core/frame-registry.d.ts.map +1 -0
  26. package/dist/core/frame-registry.js +546 -662
  27. package/dist/core/frame-registry.js.map +1 -0
  28. package/dist/core/index.d.ts +6 -2
  29. package/dist/core/index.d.ts.map +1 -0
  30. package/dist/core/index.js +13 -12
  31. package/dist/core/material-preprocess.d.ts +1 -0
  32. package/dist/core/material-preprocess.d.ts.map +1 -0
  33. package/dist/core/material-preprocess.js +131 -152
  34. package/dist/core/material-preprocess.js.map +1 -0
  35. package/dist/core/material.d.ts +23 -6
  36. package/dist/core/material.d.ts.map +1 -0
  37. package/dist/core/material.js +290 -317
  38. package/dist/core/material.js.map +1 -0
  39. package/dist/core/recompile-policy.d.ts +1 -0
  40. package/dist/core/recompile-policy.d.ts.map +1 -0
  41. package/dist/core/recompile-policy.js +18 -13
  42. package/dist/core/recompile-policy.js.map +1 -0
  43. package/dist/core/render-graph.d.ts +8 -3
  44. package/dist/core/render-graph.d.ts.map +1 -0
  45. package/dist/core/render-graph.js +77 -68
  46. package/dist/core/render-graph.js.map +1 -0
  47. package/dist/core/render-targets.d.ts +1 -0
  48. package/dist/core/render-targets.d.ts.map +1 -0
  49. package/dist/core/render-targets.js +52 -53
  50. package/dist/core/render-targets.js.map +1 -0
  51. package/dist/core/renderer.d.ts +1 -0
  52. package/dist/core/renderer.d.ts.map +1 -0
  53. package/dist/core/renderer.js +1337 -1081
  54. package/dist/core/renderer.js.map +1 -0
  55. package/dist/core/runtime-loop.d.ts +3 -2
  56. package/dist/core/runtime-loop.d.ts.map +1 -0
  57. package/dist/core/runtime-loop.js +353 -362
  58. package/dist/core/runtime-loop.js.map +1 -0
  59. package/dist/core/scheduler-helpers.d.ts +1 -0
  60. package/dist/core/scheduler-helpers.d.ts.map +1 -0
  61. package/dist/core/scheduler-helpers.js +52 -51
  62. package/dist/core/scheduler-helpers.js.map +1 -0
  63. package/dist/core/shader.d.ts +10 -1
  64. package/dist/core/shader.d.ts.map +1 -0
  65. package/dist/core/shader.js +109 -115
  66. package/dist/core/shader.js.map +1 -0
  67. package/dist/core/storage-buffers.d.ts +37 -0
  68. package/dist/core/storage-buffers.d.ts.map +1 -0
  69. package/dist/core/storage-buffers.js +95 -0
  70. package/dist/core/storage-buffers.js.map +1 -0
  71. package/dist/core/texture-loader.d.ts +1 -0
  72. package/dist/core/texture-loader.d.ts.map +1 -0
  73. package/dist/core/texture-loader.js +209 -273
  74. package/dist/core/texture-loader.js.map +1 -0
  75. package/dist/core/textures.d.ts +13 -0
  76. package/dist/core/textures.d.ts.map +1 -0
  77. package/dist/core/textures.js +111 -116
  78. package/dist/core/textures.js.map +1 -0
  79. package/dist/core/types.d.ts +147 -4
  80. package/dist/core/types.d.ts.map +1 -0
  81. package/dist/core/types.js +0 -4
  82. package/dist/core/uniforms.d.ts +1 -0
  83. package/dist/core/uniforms.d.ts.map +1 -0
  84. package/dist/core/uniforms.js +170 -191
  85. package/dist/core/uniforms.js.map +1 -0
  86. package/dist/index.d.ts +1 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +13 -6
  89. package/dist/passes/BlitPass.d.ts +1 -0
  90. package/dist/passes/BlitPass.d.ts.map +1 -0
  91. package/dist/passes/BlitPass.js +23 -18
  92. package/dist/passes/BlitPass.js.map +1 -0
  93. package/dist/passes/ComputePass.d.ts +83 -0
  94. package/dist/passes/ComputePass.d.ts.map +1 -0
  95. package/dist/passes/ComputePass.js +92 -0
  96. package/dist/passes/ComputePass.js.map +1 -0
  97. package/dist/passes/CopyPass.d.ts +1 -0
  98. package/dist/passes/CopyPass.d.ts.map +1 -0
  99. package/dist/passes/CopyPass.js +58 -52
  100. package/dist/passes/CopyPass.js.map +1 -0
  101. package/dist/passes/FullscreenPass.d.ts +1 -0
  102. package/dist/passes/FullscreenPass.d.ts.map +1 -0
  103. package/dist/passes/FullscreenPass.js +127 -130
  104. package/dist/passes/FullscreenPass.js.map +1 -0
  105. package/dist/passes/PingPongComputePass.d.ts +104 -0
  106. package/dist/passes/PingPongComputePass.d.ts.map +1 -0
  107. package/dist/passes/PingPongComputePass.js +132 -0
  108. package/dist/passes/PingPongComputePass.js.map +1 -0
  109. package/dist/passes/ShaderPass.d.ts +1 -0
  110. package/dist/passes/ShaderPass.d.ts.map +1 -0
  111. package/dist/passes/ShaderPass.js +41 -37
  112. package/dist/passes/ShaderPass.js.map +1 -0
  113. package/dist/passes/index.d.ts +3 -0
  114. package/dist/passes/index.d.ts.map +1 -0
  115. package/dist/passes/index.js +6 -3
  116. package/dist/react/FragCanvas.d.ts +3 -2
  117. package/dist/react/FragCanvas.d.ts.map +1 -0
  118. package/dist/react/FragCanvas.js +234 -211
  119. package/dist/react/FragCanvas.js.map +1 -0
  120. package/dist/react/MotionGPUErrorOverlay.d.ts +1 -0
  121. package/dist/react/MotionGPUErrorOverlay.d.ts.map +1 -0
  122. package/dist/react/MotionGPUErrorOverlay.js +200 -14
  123. package/dist/react/MotionGPUErrorOverlay.js.map +1 -0
  124. package/dist/react/Portal.d.ts +1 -0
  125. package/dist/react/Portal.d.ts.map +1 -0
  126. package/dist/react/Portal.js +18 -21
  127. package/dist/react/Portal.js.map +1 -0
  128. package/dist/react/advanced.d.ts +1 -0
  129. package/dist/react/advanced.d.ts.map +1 -0
  130. package/dist/react/advanced.js +14 -6
  131. package/dist/react/frame-context.d.ts +1 -0
  132. package/dist/react/frame-context.d.ts.map +1 -0
  133. package/dist/react/frame-context.js +88 -94
  134. package/dist/react/frame-context.js.map +1 -0
  135. package/dist/react/index.d.ts +6 -2
  136. package/dist/react/index.d.ts.map +1 -0
  137. package/dist/react/index.js +12 -9
  138. package/dist/react/motiongpu-context.d.ts +1 -0
  139. package/dist/react/motiongpu-context.d.ts.map +1 -0
  140. package/dist/react/motiongpu-context.js +18 -15
  141. package/dist/react/motiongpu-context.js.map +1 -0
  142. package/dist/react/use-motiongpu-user-context.d.ts +1 -0
  143. package/dist/react/use-motiongpu-user-context.d.ts.map +1 -0
  144. package/dist/react/use-motiongpu-user-context.js +83 -82
  145. package/dist/react/use-motiongpu-user-context.js.map +1 -0
  146. package/dist/react/use-texture.d.ts +1 -0
  147. package/dist/react/use-texture.d.ts.map +1 -0
  148. package/dist/react/use-texture.js +132 -152
  149. package/dist/react/use-texture.js.map +1 -0
  150. package/dist/svelte/FragCanvas.svelte +2 -2
  151. package/dist/svelte/FragCanvas.svelte.d.ts +3 -2
  152. package/dist/svelte/FragCanvas.svelte.d.ts.map +1 -0
  153. package/dist/svelte/MotionGPUErrorOverlay.svelte +137 -7
  154. package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts +1 -0
  155. package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts.map +1 -0
  156. package/dist/svelte/Portal.svelte.d.ts +1 -0
  157. package/dist/svelte/Portal.svelte.d.ts.map +1 -0
  158. package/dist/svelte/advanced.d.ts +1 -0
  159. package/dist/svelte/advanced.d.ts.map +1 -0
  160. package/dist/svelte/advanced.js +13 -6
  161. package/dist/svelte/frame-context.d.ts +1 -0
  162. package/dist/svelte/frame-context.d.ts.map +1 -0
  163. package/dist/svelte/frame-context.js +27 -27
  164. package/dist/svelte/frame-context.js.map +1 -0
  165. package/dist/svelte/index.d.ts +6 -2
  166. package/dist/svelte/index.d.ts.map +1 -0
  167. package/dist/svelte/index.js +12 -9
  168. package/dist/svelte/motiongpu-context.d.ts +1 -0
  169. package/dist/svelte/motiongpu-context.d.ts.map +1 -0
  170. package/dist/svelte/motiongpu-context.js +24 -21
  171. package/dist/svelte/motiongpu-context.js.map +1 -0
  172. package/dist/svelte/use-motiongpu-user-context.d.ts +1 -0
  173. package/dist/svelte/use-motiongpu-user-context.d.ts.map +1 -0
  174. package/dist/svelte/use-motiongpu-user-context.js +69 -70
  175. package/dist/svelte/use-motiongpu-user-context.js.map +1 -0
  176. package/dist/svelte/use-texture.d.ts +1 -0
  177. package/dist/svelte/use-texture.d.ts.map +1 -0
  178. package/dist/svelte/use-texture.js +125 -147
  179. package/dist/svelte/use-texture.js.map +1 -0
  180. package/package.json +12 -7
  181. package/src/lib/advanced.ts +6 -0
  182. package/src/lib/core/advanced.ts +12 -0
  183. package/src/lib/core/compute-shader.ts +326 -0
  184. package/src/lib/core/current-value.ts +64 -0
  185. package/src/lib/core/error-diagnostics.ts +236 -0
  186. package/src/lib/core/error-report.ts +535 -0
  187. package/src/lib/core/frame-registry.ts +1190 -0
  188. package/src/lib/core/index.ts +94 -0
  189. package/src/lib/core/material-preprocess.ts +295 -0
  190. package/src/lib/core/material.ts +748 -0
  191. package/src/lib/core/recompile-policy.ts +31 -0
  192. package/src/lib/core/render-graph.ts +173 -0
  193. package/src/lib/core/render-targets.ts +107 -0
  194. package/src/lib/core/renderer.ts +2161 -0
  195. package/src/lib/core/runtime-loop.ts +537 -0
  196. package/src/lib/core/scheduler-helpers.ts +136 -0
  197. package/src/lib/core/shader.ts +301 -0
  198. package/src/lib/core/storage-buffers.ts +142 -0
  199. package/src/lib/core/texture-loader.ts +482 -0
  200. package/src/lib/core/textures.ts +257 -0
  201. package/src/lib/core/types.ts +743 -0
  202. package/src/lib/core/uniforms.ts +282 -0
  203. package/src/lib/index.ts +6 -0
  204. package/src/lib/passes/BlitPass.ts +54 -0
  205. package/src/lib/passes/ComputePass.ts +136 -0
  206. package/src/lib/passes/CopyPass.ts +80 -0
  207. package/src/lib/passes/FullscreenPass.ts +173 -0
  208. package/src/lib/passes/PingPongComputePass.ts +180 -0
  209. package/src/lib/passes/ShaderPass.ts +89 -0
  210. package/src/lib/passes/index.ts +9 -0
  211. package/src/lib/react/FragCanvas.tsx +345 -0
  212. package/src/lib/react/MotionGPUErrorOverlay.tsx +524 -0
  213. package/src/lib/react/Portal.tsx +34 -0
  214. package/src/lib/react/advanced.ts +36 -0
  215. package/src/lib/react/frame-context.ts +169 -0
  216. package/src/lib/react/index.ts +68 -0
  217. package/src/lib/react/motiongpu-context.ts +88 -0
  218. package/src/lib/react/use-motiongpu-user-context.ts +186 -0
  219. package/src/lib/react/use-texture.ts +233 -0
  220. package/src/lib/svelte/FragCanvas.svelte +249 -0
  221. package/src/lib/svelte/MotionGPUErrorOverlay.svelte +512 -0
  222. package/src/lib/svelte/Portal.svelte +31 -0
  223. package/src/lib/svelte/advanced.ts +32 -0
  224. package/src/lib/svelte/frame-context.ts +87 -0
  225. package/src/lib/svelte/index.ts +68 -0
  226. package/src/lib/svelte/motiongpu-context.ts +97 -0
  227. package/src/lib/svelte/use-motiongpu-user-context.ts +145 -0
  228. package/src/lib/svelte/use-texture.ts +232 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-texture.js","names":[],"sources":["../../src/lib/react/use-texture.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport {\n\tcreateCurrentWritable as currentWritable,\n\ttype CurrentReadable\n} from '../core/current-value.js';\nimport {\n\tisAbortError,\n\tloadTexturesFromUrls,\n\ttype LoadedTexture,\n\ttype TextureLoadOptions\n} from '../core/texture-loader.js';\nimport { toMotionGPUErrorReport, type MotionGPUErrorReport } from '../core/error-report.js';\n\n/**\n * Reactive state returned by `useTexture`.\n */\nexport interface UseTextureResult {\n\t/**\n\t * Loaded textures or `null` when unavailable/failed.\n\t */\n\ttextures: CurrentReadable<LoadedTexture[] | null>;\n\t/**\n\t * `true` while an active load request is running.\n\t */\n\tloading: CurrentReadable<boolean>;\n\t/**\n\t * Last loading error.\n\t */\n\terror: CurrentReadable<Error | null>;\n\t/**\n\t * Last loading error normalized to MotionGPU diagnostics report shape.\n\t */\n\terrorReport: CurrentReadable<MotionGPUErrorReport | null>;\n\t/**\n\t * Reloads all textures using current URL input.\n\t */\n\treload: () => Promise<void>;\n}\n\n/**\n * Supported URL input variants for `useTexture`.\n */\nexport type TextureUrlInput = string[] | (() => string[]);\n\n/**\n * Normalizes unknown thrown values to an `Error` instance.\n */\nfunction toError(error: unknown): Error {\n\tif (error instanceof Error) {\n\t\treturn error;\n\t}\n\n\treturn new Error('Unknown texture loading error');\n}\n\n/**\n * Releases GPU-side resources for a list of loaded textures.\n */\nfunction disposeTextures(list: LoadedTexture[] | null): void {\n\tfor (const texture of list ?? []) {\n\t\ttexture.dispose();\n\t}\n}\n\ninterface MergedAbortSignal {\n\tsignal: AbortSignal;\n\tdispose: () => void;\n}\n\nfunction mergeAbortSignals(\n\tprimary: AbortSignal,\n\tsecondary: AbortSignal | undefined\n): MergedAbortSignal {\n\tif (!secondary) {\n\t\treturn {\n\t\t\tsignal: primary,\n\t\t\tdispose: () => {}\n\t\t};\n\t}\n\n\tif (typeof AbortSignal.any === 'function') {\n\t\treturn {\n\t\t\tsignal: AbortSignal.any([primary, secondary]),\n\t\t\tdispose: () => {}\n\t\t};\n\t}\n\n\tconst fallback = new AbortController();\n\tlet disposed = false;\n\tconst cleanup = (): void => {\n\t\tif (disposed) {\n\t\t\treturn;\n\t\t}\n\t\tdisposed = true;\n\t\tprimary.removeEventListener('abort', abort);\n\t\tsecondary.removeEventListener('abort', abort);\n\t};\n\tconst abort = (): void => fallback.abort();\n\n\tprimary.addEventListener('abort', abort, { once: true });\n\tsecondary.addEventListener('abort', abort, { once: true });\n\n\treturn {\n\t\tsignal: fallback.signal,\n\t\tdispose: cleanup\n\t};\n}\n\n/**\n * Loads textures from URLs and exposes reactive loading/error state.\n *\n * @param urlInput - URLs array or lazy URL provider.\n * @param options - Loader options passed to URL fetch/decode pipeline.\n * @returns Reactive texture loading state with reload support.\n */\nexport function useTexture(\n\turlInput: TextureUrlInput,\n\toptions: TextureLoadOptions = {}\n): UseTextureResult {\n\tconst texturesRef = useRef(currentWritable<LoadedTexture[] | null>(null));\n\tconst loadingRef = useRef(currentWritable(true));\n\tconst errorRef = useRef(currentWritable<Error | null>(null));\n\tconst errorReportRef = useRef(currentWritable<MotionGPUErrorReport | null>(null));\n\tconst activeControllerRef = useRef<AbortController | null>(null);\n\tconst runningLoadRef = useRef<Promise<void> | null>(null);\n\tconst reloadQueuedRef = useRef(false);\n\tconst requestVersionRef = useRef(0);\n\tconst disposedRef = useRef(false);\n\tconst optionsRef = useRef(options);\n\tconst urlInputRef = useRef(urlInput);\n\n\toptionsRef.current = options;\n\turlInputRef.current = urlInput;\n\n\tconst getUrls = useCallback((): string[] => {\n\t\tconst currentInput = urlInputRef.current;\n\t\treturn typeof currentInput === 'function' ? currentInput() : currentInput;\n\t}, []);\n\n\tconst executeLoad = useCallback(async (): Promise<void> => {\n\t\tif (disposedRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst version = ++requestVersionRef.current;\n\t\tconst controller = new AbortController();\n\t\tactiveControllerRef.current = controller;\n\t\tloadingRef.current.set(true);\n\t\terrorRef.current.set(null);\n\t\terrorReportRef.current.set(null);\n\n\t\tconst previous = texturesRef.current.current;\n\t\tconst mergedSignal = mergeAbortSignals(controller.signal, optionsRef.current.signal);\n\t\ttry {\n\t\t\tconst loaded = await loadTexturesFromUrls(getUrls(), {\n\t\t\t\t...optionsRef.current,\n\t\t\t\tsignal: mergedSignal.signal\n\t\t\t});\n\t\t\tif (disposedRef.current || version !== requestVersionRef.current) {\n\t\t\t\tdisposeTextures(loaded);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttexturesRef.current.set(loaded);\n\t\t\tdisposeTextures(previous);\n\t\t} catch (nextError) {\n\t\t\tif (disposedRef.current || version !== requestVersionRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isAbortError(nextError)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdisposeTextures(previous);\n\t\t\ttexturesRef.current.set(null);\n\t\t\tconst normalizedError = toError(nextError);\n\t\t\terrorRef.current.set(normalizedError);\n\t\t\terrorReportRef.current.set(toMotionGPUErrorReport(normalizedError, 'initialization'));\n\t\t} finally {\n\t\t\tif (!disposedRef.current && version === requestVersionRef.current) {\n\t\t\t\tloadingRef.current.set(false);\n\t\t\t}\n\t\t\tif (activeControllerRef.current === controller) {\n\t\t\t\tactiveControllerRef.current = null;\n\t\t\t}\n\t\t\tmergedSignal.dispose();\n\t\t}\n\t}, [getUrls]);\n\n\tconst runLoadLoop = useCallback(async (): Promise<void> => {\n\t\tdo {\n\t\t\treloadQueuedRef.current = false;\n\t\t\tawait executeLoad();\n\t\t} while (reloadQueuedRef.current && !disposedRef.current);\n\t}, [executeLoad]);\n\n\tconst load = useCallback((): Promise<void> => {\n\t\tactiveControllerRef.current?.abort();\n\t\tif (runningLoadRef.current) {\n\t\t\treloadQueuedRef.current = true;\n\t\t\treturn runningLoadRef.current;\n\t\t}\n\n\t\tconst pending = runLoadLoop();\n\t\tconst trackedPending = pending.finally(() => {\n\t\t\tif (runningLoadRef.current === trackedPending) {\n\t\t\t\trunningLoadRef.current = null;\n\t\t\t}\n\t\t});\n\t\trunningLoadRef.current = trackedPending;\n\t\treturn trackedPending;\n\t}, [runLoadLoop]);\n\n\tuseEffect(() => {\n\t\tvoid load();\n\n\t\treturn () => {\n\t\t\tdisposedRef.current = true;\n\t\t\trequestVersionRef.current += 1;\n\t\t\tactiveControllerRef.current?.abort();\n\t\t\tdisposeTextures(texturesRef.current.current);\n\t\t};\n\t}, [load]);\n\n\treturn {\n\t\ttextures: texturesRef.current,\n\t\tloading: loadingRef.current,\n\t\terror: errorRef.current,\n\t\terrorReport: errorReportRef.current,\n\t\treload: load\n\t};\n}\n"],"mappings":"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"}
@@ -7,9 +7,9 @@
7
7
  import MotionGPUErrorOverlay from './MotionGPUErrorOverlay.svelte';
8
8
  import { createMotionGPURuntimeLoop } from '../core/runtime-loop';
9
9
  import type {
10
+ AnyPass,
10
11
  FrameInvalidationToken,
11
12
  OutputColorSpace,
12
- RenderPass,
13
13
  RenderMode,
14
14
  RenderTargetDefinitionMap
15
15
  } from '../core/types';
@@ -19,7 +19,7 @@
19
19
  interface Props {
20
20
  material: FragMaterial;
21
21
  renderTargets?: RenderTargetDefinitionMap;
22
- passes?: RenderPass[];
22
+ passes?: AnyPass[];
23
23
  clearColor?: [number, number, number, number];
24
24
  outputColorSpace?: OutputColorSpace;
25
25
  renderMode?: RenderMode;
@@ -2,11 +2,11 @@
2
2
  import type { Snippet } from 'svelte';
3
3
  import type { FragMaterial } from '../core/material';
4
4
  import { type MotionGPUErrorReport } from '../core/error-report';
5
- import type { OutputColorSpace, RenderPass, RenderMode, RenderTargetDefinitionMap } from '../core/types';
5
+ import type { AnyPass, OutputColorSpace, RenderMode, RenderTargetDefinitionMap } from '../core/types';
6
6
  interface Props {
7
7
  material: FragMaterial;
8
8
  renderTargets?: RenderTargetDefinitionMap;
9
- passes?: RenderPass[];
9
+ passes?: AnyPass[];
10
10
  clearColor?: [number, number, number, number];
11
11
  outputColorSpace?: OutputColorSpace;
12
12
  renderMode?: RenderMode;
@@ -27,3 +27,4 @@ interface Props {
27
27
  declare const FragCanvas: import("svelte").Component<Props, {}, "">;
28
28
  type FragCanvas = ReturnType<typeof FragCanvas>;
29
29
  export default FragCanvas;
30
+ //# sourceMappingURL=FragCanvas.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FragCanvas.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/FragCanvas.svelte"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGzF,OAAO,KAAK,EACV,OAAO,EAEP,gBAAgB,EAChB,UAAU,EACV,yBAAyB,EACzB,MAAM,eAAe,CAAC;AAKvB,UAAU,KAAK;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,IAAI,CAAC;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAiNF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -16,7 +16,87 @@
16
16
  };
17
17
 
18
18
  const shouldShowErrorMessage = (value: MotionGPUErrorReport): boolean => {
19
- return normalizeErrorText(value.message) !== normalizeErrorText(value.title);
19
+ return resolveDisplayMessage(value).length > 0;
20
+ };
21
+
22
+ const resolveDisplayMessage = (value: MotionGPUErrorReport): string => {
23
+ const rawMessage = value.message.trim();
24
+ if (rawMessage.length === 0) {
25
+ return '';
26
+ }
27
+
28
+ const normalizedMessage = normalizeErrorText(rawMessage);
29
+ const normalizedTitle = normalizeErrorText(value.title);
30
+ if (normalizedMessage === normalizedTitle) {
31
+ return '';
32
+ }
33
+
34
+ const escapedTitle = value.title.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
35
+ const prefixPattern = new RegExp(`^${escapedTitle}\\s*[:\\-|]\\s*`, 'i');
36
+ const stripped = rawMessage.replace(prefixPattern, '').trim();
37
+ return stripped.length > 0 ? stripped : rawMessage;
38
+ };
39
+
40
+ const formatRuntimeContext = (context: MotionGPUErrorReport['context']): string => {
41
+ if (!context) {
42
+ return '';
43
+ }
44
+
45
+ const indentBlock = (value: string, spaces = 2): string => {
46
+ const prefix = ' '.repeat(spaces);
47
+ return value
48
+ .split('\n')
49
+ .map((line) => `${prefix}${line}`)
50
+ .join('\n');
51
+ };
52
+
53
+ const formatMaterialSignature = (value: string): string => {
54
+ const trimmed = value.trim();
55
+ if (trimmed.length === 0) {
56
+ return '<empty>';
57
+ }
58
+ try {
59
+ return JSON.stringify(JSON.parse(trimmed), null, 2);
60
+ } catch {
61
+ return trimmed;
62
+ }
63
+ };
64
+
65
+ const lines: string[] = [];
66
+ if (context.materialSignature) {
67
+ lines.push('materialSignature:');
68
+ lines.push(indentBlock(formatMaterialSignature(context.materialSignature)));
69
+ }
70
+ if (context.passGraph) {
71
+ lines.push('passGraph:');
72
+ lines.push(` passCount: ${context.passGraph.passCount}`);
73
+ lines.push(` enabledPassCount: ${context.passGraph.enabledPassCount}`);
74
+ lines.push(' inputs:');
75
+ if (context.passGraph.inputs.length === 0) {
76
+ lines.push(' - <none>');
77
+ } else {
78
+ for (const input of context.passGraph.inputs) {
79
+ lines.push(` - ${input}`);
80
+ }
81
+ }
82
+ lines.push(' outputs:');
83
+ if (context.passGraph.outputs.length === 0) {
84
+ lines.push(' - <none>');
85
+ } else {
86
+ for (const output of context.passGraph.outputs) {
87
+ lines.push(` - ${output}`);
88
+ }
89
+ }
90
+ }
91
+ lines.push('activeRenderTargets:');
92
+ if (context.activeRenderTargets.length === 0) {
93
+ lines.push(' - <none>');
94
+ } else {
95
+ for (const target of context.activeRenderTargets) {
96
+ lines.push(` - ${target}`);
97
+ }
98
+ }
99
+ return lines.join('\n');
20
100
  };
21
101
  </script>
22
102
 
@@ -30,16 +110,28 @@
30
110
  data-testid="motiongpu-error"
31
111
  >
32
112
  <header class="motiongpu-error-header">
33
- <div class="motiongpu-error-badge-wrap">
34
- <p class="motiongpu-error-phase">
35
- {report.phase}
36
- </p>
113
+ <div class="motiongpu-error-header-top">
114
+ <div class="motiongpu-error-badges">
115
+ <div class="motiongpu-error-badge-wrap">
116
+ <p class="motiongpu-error-badge motiongpu-error-badge-phase">
117
+ {report.phase}
118
+ </p>
119
+ </div>
120
+ <div class="motiongpu-error-badge-wrap">
121
+ <p class="motiongpu-error-badge motiongpu-error-badge-severity">
122
+ {report.severity}
123
+ </p>
124
+ </div>
125
+ </div>
37
126
  </div>
38
127
  <h2 class="motiongpu-error-title">{report.title}</h2>
128
+ <p class="motiongpu-error-recoverable">
129
+ Recoverable: <span>{report.recoverable ? 'yes' : 'no'}</span>
130
+ </p>
39
131
  </header>
40
132
  <div class="motiongpu-error-body">
41
133
  {#if shouldShowErrorMessage(report)}
42
- <p class="motiongpu-error-message">{report.message}</p>
134
+ <p class="motiongpu-error-message">{resolveDisplayMessage(report)}</p>
43
135
  {/if}
44
136
  <p class="motiongpu-error-hint">{report.hint}</p>
45
137
  </div>
@@ -87,6 +179,12 @@
87
179
  <pre>{report.stack.join('\n')}</pre>
88
180
  </details>
89
181
  {/if}
182
+ {#if report.context}
183
+ <details class="motiongpu-error-details">
184
+ <summary>Runtime context</summary>
185
+ <pre>{formatRuntimeContext(report.context)}</pre>
186
+ </details>
187
+ {/if}
90
188
  </div>
91
189
  </section>
92
190
  </div>
@@ -162,6 +260,19 @@
162
260
  border-bottom: 1px solid var(--motiongpu-color-border);
163
261
  }
164
262
 
263
+ .motiongpu-error-header-top {
264
+ display: flex;
265
+ align-items: flex-start;
266
+ gap: 0.75rem;
267
+ }
268
+
269
+ .motiongpu-error-badges {
270
+ display: inline-flex;
271
+ align-items: center;
272
+ gap: 0.4rem;
273
+ flex-wrap: wrap;
274
+ }
275
+
165
276
  .motiongpu-error-badge-wrap {
166
277
  display: inline-flex;
167
278
  align-items: center;
@@ -173,7 +284,7 @@
173
284
  background: var(--motiongpu-color-background-muted);
174
285
  }
175
286
 
176
- .motiongpu-error-phase {
287
+ .motiongpu-error-badge {
177
288
  display: inline-flex;
178
289
  align-items: center;
179
290
  margin: 0;
@@ -193,6 +304,20 @@
193
304
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24);
194
305
  }
195
306
 
307
+ .motiongpu-error-recoverable {
308
+ margin: 0;
309
+ font-size: 0.67rem;
310
+ line-height: 1.2;
311
+ letter-spacing: 0.06em;
312
+ text-transform: uppercase;
313
+ color: var(--motiongpu-color-foreground-muted);
314
+ }
315
+
316
+ .motiongpu-error-recoverable span {
317
+ font-family: var(--motiongpu-font-mono);
318
+ color: var(--motiongpu-color-foreground);
319
+ }
320
+
196
321
  .motiongpu-error-title {
197
322
  margin: 0;
198
323
  font-size: clamp(1.02rem, 1vw + 0.72rem, 1.32rem);
@@ -372,6 +497,11 @@
372
497
  .motiongpu-error-title {
373
498
  font-size: 1.02rem;
374
499
  }
500
+
501
+ .motiongpu-error-header-top {
502
+ flex-direction: column;
503
+ align-items: flex-start;
504
+ }
375
505
  }
376
506
 
377
507
  @media (prefers-reduced-motion: reduce) {
@@ -5,3 +5,4 @@ interface Props {
5
5
  declare const MotionGPUErrorOverlay: import("svelte").Component<Props, {}, "">;
6
6
  type MotionGPUErrorOverlay = ReturnType<typeof MotionGPUErrorOverlay>;
7
7
  export default MotionGPUErrorOverlay;
8
+ //# sourceMappingURL=MotionGPUErrorOverlay.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MotionGPUErrorOverlay.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/MotionGPUErrorOverlay.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,UAAU,KAAK;IACd,MAAM,EAAE,oBAAoB,CAAC;CAC7B;AAoLF,QAAA,MAAM,qBAAqB,2CAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
@@ -6,3 +6,4 @@ interface Props {
6
6
  declare const Portal: import("svelte").Component<Props, {}, "">;
7
7
  type Portal = ReturnType<typeof Portal>;
8
8
  export default Portal;
9
+ //# sourceMappingURL=Portal.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Portal.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/Portal.svelte"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGrC,UAAU,KAAK;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA+BF,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
@@ -9,3 +9,4 @@ export type { MotionGPUUserContext, MotionGPUUserNamespace } from './motiongpu-c
9
9
  export type { FrameProfilingSnapshot, FrameKey, FrameTaskInvalidation, FrameTaskInvalidationToken, FrameRunTimings, FrameScheduleSnapshot, FrameStage, FrameStageCallback, FrameTimingStats, FrameTask } from '../core/frame-registry.js';
10
10
  export type { SetMotionGPUUserContextOptions } from './use-motiongpu-user-context.js';
11
11
  export type { RenderPassContext, RenderTarget, UniformLayout, UniformLayoutEntry } from '../core/types.js';
12
+ //# sourceMappingURL=advanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/advanced.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AACnG,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AACnG,YAAY,EACX,2BAA2B,EAC3B,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,YAAY,EACX,sBAAsB,EACtB,QAAQ,EACR,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,MAAM,kBAAkB,CAAC"}
@@ -1,6 +1,13 @@
1
- /**
2
- * Svelte adapter advanced entrypoint for MotionGPU.
3
- */
4
- export * from './index.js';
5
- export { applySchedulerPreset, captureSchedulerDebugSnapshot } from '../core/scheduler-helpers.js';
6
- export { setMotionGPUUserContext, useMotionGPUUserContext } from './use-motiongpu-user-context.js';
1
+ import { defineMaterial } from "../core/material.js";
2
+ import { BlitPass } from "../passes/BlitPass.js";
3
+ import { CopyPass } from "../passes/CopyPass.js";
4
+ import { ShaderPass } from "../passes/ShaderPass.js";
5
+ import { ComputePass } from "../passes/ComputePass.js";
6
+ import { PingPongComputePass } from "../passes/PingPongComputePass.js";
7
+ import { applySchedulerPreset, captureSchedulerDebugSnapshot } from "../core/scheduler-helpers.js";
8
+ import { useMotionGPU } from "./motiongpu-context.js";
9
+ import { useFrame } from "./frame-context.js";
10
+ import { useTexture } from "./use-texture.js";
11
+ import { FragCanvas } from "./index.js";
12
+ import { setMotionGPUUserContext, useMotionGPUUserContext } from "./use-motiongpu-user-context.js";
13
+ export { BlitPass, ComputePass, CopyPass, FragCanvas, PingPongComputePass, ShaderPass, applySchedulerPreset, captureSchedulerDebugSnapshot, defineMaterial, setMotionGPUUserContext, useFrame, useMotionGPU, useMotionGPUUserContext, useTexture };
@@ -12,3 +12,4 @@ export declare function useFrame(callback: FrameCallback, options?: UseFrameOpti
12
12
  * Registers a frame callback with an explicit task key.
13
13
  */
14
14
  export declare function useFrame(key: FrameKey, callback: FrameCallback, options?: UseFrameOptions): UseFrameResult;
15
+ //# sourceMappingURL=frame-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-context.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/frame-context.ts"],"names":[],"mappings":"AACA,OAAO,EACN,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,MAAM,2BAA2B,CAAC;AAOnC,OAAO,EACN,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,cAAc,CAAC;AAE7F;;GAEG;AACH,wBAAgB,QAAQ,CACvB,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,eAAe,GACvB,cAAc,CAAC"}
@@ -1,32 +1,32 @@
1
- import { getContext, onDestroy, setContext } from 'svelte';
2
- import { createFrameRegistry } from '../core/frame-registry.js';
1
+ import { createFrameRegistry } from "../core/frame-registry.js";
2
+ import { getContext, onDestroy, setContext } from "svelte";
3
+ //#region src/lib/svelte/frame-context.ts
3
4
  /**
4
- * Svelte context key for the active frame registry.
5
- */
6
- const FRAME_CONTEXT_KEY = Symbol('motiongpu.frame-context');
7
- export { createFrameRegistry };
5
+ * Svelte context key for the active frame registry.
6
+ */
7
+ var FRAME_CONTEXT_KEY = Symbol("motiongpu.frame-context");
8
8
  /**
9
- * Provides a frame registry through Svelte context.
10
- */
11
- export function provideFrameRegistry(registry) {
12
- setContext(FRAME_CONTEXT_KEY, registry);
9
+ * Provides a frame registry through Svelte context.
10
+ */
11
+ function provideFrameRegistry(registry) {
12
+ setContext(FRAME_CONTEXT_KEY, registry);
13
13
  }
14
14
  /**
15
- * Registers a callback in the active frame registry and auto-unsubscribes on destroy.
16
- */
17
- export function useFrame(keyOrCallback, callbackOrOptions, maybeOptions) {
18
- const registry = getContext(FRAME_CONTEXT_KEY);
19
- if (!registry) {
20
- throw new Error('useFrame must be used inside <FragCanvas>');
21
- }
22
- const registration = typeof keyOrCallback === 'function'
23
- ? registry.register(keyOrCallback, callbackOrOptions)
24
- : registry.register(keyOrCallback, callbackOrOptions, maybeOptions);
25
- onDestroy(registration.unsubscribe);
26
- return {
27
- task: registration.task,
28
- start: registration.start,
29
- stop: registration.stop,
30
- started: registration.started
31
- };
15
+ * Registers a callback in the active frame registry and auto-unsubscribes on destroy.
16
+ */
17
+ function useFrame(keyOrCallback, callbackOrOptions, maybeOptions) {
18
+ const registry = getContext(FRAME_CONTEXT_KEY);
19
+ if (!registry) throw new Error("useFrame must be used inside <FragCanvas>");
20
+ const registration = typeof keyOrCallback === "function" ? registry.register(keyOrCallback, callbackOrOptions) : registry.register(keyOrCallback, callbackOrOptions, maybeOptions);
21
+ onDestroy(registration.unsubscribe);
22
+ return {
23
+ task: registration.task,
24
+ start: registration.start,
25
+ stop: registration.stop,
26
+ started: registration.started
27
+ };
32
28
  }
29
+ //#endregion
30
+ export { createFrameRegistry, provideFrameRegistry, useFrame };
31
+
32
+ //# sourceMappingURL=frame-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-context.js","names":[],"sources":["../../src/lib/svelte/frame-context.ts"],"sourcesContent":["import { getContext, onDestroy, setContext } from 'svelte';\nimport {\n\tcreateFrameRegistry,\n\ttype FrameCallback,\n\ttype FrameKey,\n\ttype FrameProfilingSnapshot,\n\ttype FrameRegistry,\n\ttype FrameRunTimings,\n\ttype FrameScheduleSnapshot,\n\ttype FrameStage,\n\ttype FrameStageCallback,\n\ttype FrameTask,\n\ttype FrameTaskInvalidation,\n\ttype FrameTaskInvalidationToken,\n\ttype UseFrameOptions,\n\ttype UseFrameResult\n} from '../core/frame-registry.js';\n\n/**\n * Svelte context key for the active frame registry.\n */\nconst FRAME_CONTEXT_KEY = Symbol('motiongpu.frame-context');\n\nexport {\n\tcreateFrameRegistry,\n\ttype FrameCallback,\n\ttype FrameKey,\n\ttype FrameProfilingSnapshot,\n\ttype FrameRegistry,\n\ttype FrameRunTimings,\n\ttype FrameScheduleSnapshot,\n\ttype FrameStage,\n\ttype FrameStageCallback,\n\ttype FrameTask,\n\ttype FrameTaskInvalidation,\n\ttype FrameTaskInvalidationToken,\n\ttype UseFrameOptions,\n\ttype UseFrameResult\n};\n\n/**\n * Provides a frame registry through Svelte context.\n */\nexport function provideFrameRegistry(registry: FrameRegistry): void {\n\tsetContext(FRAME_CONTEXT_KEY, registry);\n}\n\n/**\n * Registers a frame callback using an auto-generated task key.\n */\nexport function useFrame(callback: FrameCallback, options?: UseFrameOptions): UseFrameResult;\n\n/**\n * Registers a frame callback with an explicit task key.\n */\nexport function useFrame(\n\tkey: FrameKey,\n\tcallback: FrameCallback,\n\toptions?: UseFrameOptions\n): UseFrameResult;\n\n/**\n * Registers a callback in the active frame registry and auto-unsubscribes on destroy.\n */\nexport function useFrame(\n\tkeyOrCallback: FrameKey | FrameCallback,\n\tcallbackOrOptions?: FrameCallback | UseFrameOptions,\n\tmaybeOptions?: UseFrameOptions\n): UseFrameResult {\n\tconst registry = getContext<FrameRegistry>(FRAME_CONTEXT_KEY);\n\tif (!registry) {\n\t\tthrow new Error('useFrame must be used inside <FragCanvas>');\n\t}\n\n\tconst registration =\n\t\ttypeof keyOrCallback === 'function'\n\t\t\t? registry.register(keyOrCallback, callbackOrOptions as UseFrameOptions | undefined)\n\t\t\t: registry.register(keyOrCallback, callbackOrOptions as FrameCallback, maybeOptions);\n\tonDestroy(registration.unsubscribe);\n\n\treturn {\n\t\ttask: registration.task,\n\t\tstart: registration.start,\n\t\tstop: registration.stop,\n\t\tstarted: registration.started\n\t};\n}\n"],"mappings":";;;;;;AAqBA,IAAM,oBAAoB,OAAO,0BAA0B;;;;AAsB3D,SAAgB,qBAAqB,UAA+B;AACnE,YAAW,mBAAmB,SAAS;;;;;AAoBxC,SAAgB,SACf,eACA,mBACA,cACiB;CACjB,MAAM,WAAW,WAA0B,kBAAkB;AAC7D,KAAI,CAAC,SACJ,OAAM,IAAI,MAAM,4CAA4C;CAG7D,MAAM,eACL,OAAO,kBAAkB,aACtB,SAAS,SAAS,eAAe,kBAAiD,GAClF,SAAS,SAAS,eAAe,mBAAoC,aAAa;AACtF,WAAU,aAAa,YAAY;AAEnC,QAAO;EACN,MAAM,aAAa;EACnB,OAAO,aAAa;EACpB,MAAM,aAAa;EACnB,SAAS,aAAa;EACtB"}
@@ -3,13 +3,17 @@
3
3
  */
4
4
  export { default as FragCanvas } from './FragCanvas.svelte';
5
5
  export { defineMaterial } from '../core/material.js';
6
- export { BlitPass, CopyPass, ShaderPass } from '../passes/index.js';
6
+ export { BlitPass, CopyPass, ShaderPass, ComputePass, PingPongComputePass } from '../passes/index.js';
7
7
  export { useMotionGPU } from './motiongpu-context.js';
8
8
  export { useFrame } from './frame-context.js';
9
9
  export { useTexture } from './use-texture.js';
10
- export type { FrameInvalidationToken, FrameState, OutputColorSpace, RenderPass, RenderPassContext, RenderPassFlags, RenderPassInputSlot, RenderPassOutputSlot, RenderMode, RenderTarget, RenderTargetDefinition, RenderTargetDefinitionMap, TextureData, TextureDefinition, TextureDefinitionMap, TextureUpdateMode, TextureMap, TextureSource, TextureValue, TypedUniform, UniformMat4Value, UniformMap, UniformType, UniformValue } from '../core/types.js';
10
+ export type { FrameInvalidationToken, FrameState, OutputColorSpace, AnyPass, ComputePassLike, RenderPass, RenderPassContext, RenderPassFlags, RenderPassInputSlot, RenderPassOutputSlot, RenderMode, RenderTarget, RenderTargetDefinition, RenderTargetDefinitionMap, TextureData, TextureDefinition, TextureDefinitionMap, TextureUpdateMode, TextureMap, TextureSource, TextureValue, TypedUniform, UniformMat4Value, UniformMap, UniformType, UniformValue } from '../core/types.js';
11
11
  export type { LoadedTexture, TextureDecodeOptions, TextureLoadOptions } from '../core/texture-loader.js';
12
12
  export type { FragMaterial, FragMaterialInput, MaterialIncludes, MaterialDefineValue, MaterialDefines, TypedMaterialDefineValue } from '../core/material.js';
13
13
  export type { MotionGPUContext } from './motiongpu-context.js';
14
14
  export type { UseFrameOptions, UseFrameResult } from './frame-context.js';
15
15
  export type { TextureUrlInput, UseTextureResult } from './use-texture.js';
16
+ export type { StorageBufferAccess, StorageBufferDefinition, StorageBufferDefinitionMap, StorageBufferType, ComputePassContext } from '../core/types.js';
17
+ export type { ComputePassOptions, ComputeDispatchContext } from '../passes/ComputePass.js';
18
+ export type { PingPongComputePassOptions } from '../passes/PingPongComputePass.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACX,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,YAAY,EACZ,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACX,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACX,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EACX,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,YAAY,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC"}
@@ -1,9 +1,12 @@
1
- /**
2
- * Svelte adapter entrypoint for MotionGPU.
3
- */
4
- export { default as FragCanvas } from './FragCanvas.svelte';
5
- export { defineMaterial } from '../core/material.js';
6
- export { BlitPass, CopyPass, ShaderPass } from '../passes/index.js';
7
- export { useMotionGPU } from './motiongpu-context.js';
8
- export { useFrame } from './frame-context.js';
9
- export { useTexture } from './use-texture.js';
1
+ import { defineMaterial } from "../core/material.js";
2
+ import { BlitPass } from "../passes/BlitPass.js";
3
+ import { CopyPass } from "../passes/CopyPass.js";
4
+ import { ShaderPass } from "../passes/ShaderPass.js";
5
+ import { ComputePass } from "../passes/ComputePass.js";
6
+ import { PingPongComputePass } from "../passes/PingPongComputePass.js";
7
+ import "../passes/index.js";
8
+ import { useMotionGPU } from "./motiongpu-context.js";
9
+ import { useFrame } from "./frame-context.js";
10
+ import { useTexture } from "./use-texture.js";
11
+ import FragCanvas from "./FragCanvas.svelte";
12
+ export { BlitPass, ComputePass, CopyPass, FragCanvas, PingPongComputePass, ShaderPass, defineMaterial, useFrame, useMotionGPU, useTexture };
@@ -73,3 +73,4 @@ export declare function provideMotionGPUContext(context: MotionGPUContext): void
73
73
  * @throws {Error} When called outside `<FragCanvas>`.
74
74
  */
75
75
  export declare function useMotionGPU(): MotionGPUContext;
76
+ //# sourceMappingURL=motiongpu-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motiongpu-context.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/motiongpu-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EACX,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAOjG,MAAM,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5F;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC;;OAEG;IACH,IAAI,EAAE,eAAe,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD;;OAEG;IACH,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7B;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAClC;;OAEG;IACH,UAAU,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;IACxC;;OAEG;IACH,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACrC;;OAEG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAC3B;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;OAEG;IACH,SAAS,EAAE,kBAAkB,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,CAO/C"}
@@ -1,26 +1,29 @@
1
- import { getContext, setContext } from 'svelte';
1
+ import { getContext, setContext } from "svelte";
2
+ //#region src/lib/svelte/motiongpu-context.ts
2
3
  /**
3
- * Svelte context key used to expose `FragCanvas` runtime state.
4
- */
5
- const MOTIONGPU_CONTEXT_KEY = Symbol('motiongpu.context');
4
+ * Svelte context key used to expose `FragCanvas` runtime state.
5
+ */
6
+ var MOTIONGPU_CONTEXT_KEY = Symbol("motiongpu.context");
6
7
  /**
7
- * Registers the motiongpu context in the current Svelte component tree.
8
- *
9
- * @param context - Context payload to provide.
10
- */
11
- export function provideMotionGPUContext(context) {
12
- setContext(MOTIONGPU_CONTEXT_KEY, context);
8
+ * Registers the motiongpu context in the current Svelte component tree.
9
+ *
10
+ * @param context - Context payload to provide.
11
+ */
12
+ function provideMotionGPUContext(context) {
13
+ setContext(MOTIONGPU_CONTEXT_KEY, context);
13
14
  }
14
15
  /**
15
- * Returns the active motiongpu context.
16
- *
17
- * @returns Active context.
18
- * @throws {Error} When called outside `<FragCanvas>`.
19
- */
20
- export function useMotionGPU() {
21
- const context = getContext(MOTIONGPU_CONTEXT_KEY);
22
- if (!context) {
23
- throw new Error('useMotionGPU must be used inside <FragCanvas>');
24
- }
25
- return context;
16
+ * Returns the active motiongpu context.
17
+ *
18
+ * @returns Active context.
19
+ * @throws {Error} When called outside `<FragCanvas>`.
20
+ */
21
+ function useMotionGPU() {
22
+ const context = getContext(MOTIONGPU_CONTEXT_KEY);
23
+ if (!context) throw new Error("useMotionGPU must be used inside <FragCanvas>");
24
+ return context;
26
25
  }
26
+ //#endregion
27
+ export { provideMotionGPUContext, useMotionGPU };
28
+
29
+ //# sourceMappingURL=motiongpu-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motiongpu-context.js","names":[],"sources":["../../src/lib/svelte/motiongpu-context.ts"],"sourcesContent":["import { getContext, setContext } from 'svelte';\nimport type { RenderMode } from '../core/types.js';\nimport type { CurrentReadable, CurrentWritable } from '../core/current-value.js';\nimport type {\n\tFrameProfilingSnapshot,\n\tFrameRunTimings,\n\tFrameScheduleSnapshot\n} from '../core/frame-registry.js';\nimport type { MotionGPUScheduler as CoreMotionGPUScheduler } from '../core/scheduler-helpers.js';\n\n/**\n * Svelte context key used to expose `FragCanvas` runtime state.\n */\nconst MOTIONGPU_CONTEXT_KEY = Symbol('motiongpu.context');\n\nexport type MotionGPUScheduler = CoreMotionGPUScheduler;\nexport type { FrameProfilingSnapshot, FrameRunTimings, FrameScheduleSnapshot };\n\n/**\n * Namespace identifier for user-owned context entries.\n */\nexport type MotionGPUUserNamespace = string | symbol;\n\n/**\n * Shared user context store exposed by `FragCanvas`.\n */\nexport type MotionGPUUserContext = CurrentWritable<Record<MotionGPUUserNamespace, unknown>>;\n\n/**\n * Public `FragCanvas` runtime context available to hooks and user components.\n */\nexport interface MotionGPUContext {\n\t/**\n\t * Underlying canvas element used by the renderer.\n\t */\n\tcanvas: HTMLCanvasElement | undefined;\n\t/**\n\t * Reactive canvas pixel size.\n\t */\n\tsize: CurrentReadable<{ width: number; height: number }>;\n\t/**\n\t * Device pixel ratio multiplier.\n\t */\n\tdpr: CurrentWritable<number>;\n\t/**\n\t * Max frame delta clamp passed to scheduled callbacks.\n\t */\n\tmaxDelta: CurrentWritable<number>;\n\t/**\n\t * Scheduler render mode (`always`, `on-demand`, `manual`).\n\t */\n\trenderMode: CurrentWritable<RenderMode>;\n\t/**\n\t * Global toggle for automatic rendering.\n\t */\n\tautoRender: CurrentWritable<boolean>;\n\t/**\n\t * Namespaced user context store shared within the canvas subtree.\n\t */\n\tuser: MotionGPUUserContext;\n\t/**\n\t * Marks current frame as invalidated.\n\t */\n\tinvalidate: () => void;\n\t/**\n\t * Requests one manual frame advance.\n\t */\n\tadvance: () => void;\n\t/**\n\t * Public scheduler API.\n\t */\n\tscheduler: MotionGPUScheduler;\n}\n\n/**\n * Registers the motiongpu context in the current Svelte component tree.\n *\n * @param context - Context payload to provide.\n */\nexport function provideMotionGPUContext(context: MotionGPUContext): void {\n\tsetContext(MOTIONGPU_CONTEXT_KEY, context);\n}\n\n/**\n * Returns the active motiongpu context.\n *\n * @returns Active context.\n * @throws {Error} When called outside `<FragCanvas>`.\n */\nexport function useMotionGPU(): MotionGPUContext {\n\tconst context = getContext<MotionGPUContext>(MOTIONGPU_CONTEXT_KEY);\n\tif (!context) {\n\t\tthrow new Error('useMotionGPU must be used inside <FragCanvas>');\n\t}\n\n\treturn context;\n}\n"],"mappings":";;;;;AAaA,IAAM,wBAAwB,OAAO,oBAAoB;;;;;;AAkEzD,SAAgB,wBAAwB,SAAiC;AACxE,YAAW,uBAAuB,QAAQ;;;;;;;;AAS3C,SAAgB,eAAiC;CAChD,MAAM,UAAU,WAA6B,sBAAsB;AACnE,KAAI,CAAC,QACJ,OAAM,IAAI,MAAM,gDAAgD;AAGjE,QAAO"}
@@ -41,3 +41,4 @@ export declare function useMotionGPUUserContext<UC extends UserContextStore = Us
41
41
  */
42
42
  export declare function setMotionGPUUserContext<UCT = unknown>(namespace: MotionGPUUserNamespace, value: UCT | (() => UCT), options?: SetMotionGPUUserContextOptions): UCT | undefined;
43
43
  export {};
44
+ //# sourceMappingURL=use-motiongpu-user-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-motiongpu-user-context.d.ts","sourceRoot":"","sources":["../../src/lib/svelte/use-motiongpu-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAgB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEnF;;GAEG;AACH,KAAK,gBAAgB,GAAG,MAAM,CAAC,sBAAsB,EAAE,OAAO,CAAC,CAAC;AAOhE;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC9C;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACxC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CACpC;AASD;;GAEG;AACH,wBAAgB,uBAAuB,CACtC,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,KAC1C,eAAe,CAAC,EAAE,CAAC,CAAC;AAEzB;;GAEG;AACH,wBAAgB,uBAAuB,CACtC,EAAE,SAAS,gBAAgB,GAAG,gBAAgB,EAC9C,CAAC,SAAS,MAAM,EAAE,GAAG,sBAAsB,GAAG,MAAM,EAAE,GAAG,sBAAsB,EAC9E,SAAS,EAAE,CAAC,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAwCpD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAG,OAAO,EACpD,SAAS,EAAE,sBAAsB,EACjC,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EACxB,OAAO,CAAC,EAAE,8BAA8B,GACtC,GAAG,GAAG,SAAS,CAuCjB"}