@motion-core/motion-gpu 0.4.0 → 0.4.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.
- package/dist/advanced.d.ts +1 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +12 -6
- package/dist/core/advanced.d.ts +1 -0
- package/dist/core/advanced.d.ts.map +1 -0
- package/dist/core/advanced.js +12 -5
- package/dist/core/current-value.d.ts +1 -0
- package/dist/core/current-value.d.ts.map +1 -0
- package/dist/core/current-value.js +35 -34
- package/dist/core/current-value.js.map +1 -0
- package/dist/core/error-diagnostics.d.ts +1 -0
- package/dist/core/error-diagnostics.d.ts.map +1 -0
- package/dist/core/error-diagnostics.js +70 -137
- package/dist/core/error-diagnostics.js.map +1 -0
- package/dist/core/error-report.d.ts +1 -0
- package/dist/core/error-report.d.ts.map +1 -0
- package/dist/core/error-report.js +184 -233
- package/dist/core/error-report.js.map +1 -0
- package/dist/core/frame-registry.d.ts +1 -0
- package/dist/core/frame-registry.d.ts.map +1 -0
- package/dist/core/frame-registry.js +546 -662
- package/dist/core/frame-registry.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -12
- package/dist/core/material-preprocess.d.ts +1 -0
- package/dist/core/material-preprocess.d.ts.map +1 -0
- package/dist/core/material-preprocess.js +128 -151
- package/dist/core/material-preprocess.js.map +1 -0
- package/dist/core/material.d.ts +1 -0
- package/dist/core/material.d.ts.map +1 -0
- package/dist/core/material.js +263 -317
- package/dist/core/material.js.map +1 -0
- package/dist/core/recompile-policy.d.ts +1 -0
- package/dist/core/recompile-policy.d.ts.map +1 -0
- package/dist/core/recompile-policy.js +18 -13
- package/dist/core/recompile-policy.js.map +1 -0
- package/dist/core/render-graph.d.ts +1 -0
- package/dist/core/render-graph.d.ts.map +1 -0
- package/dist/core/render-graph.js +61 -68
- package/dist/core/render-graph.js.map +1 -0
- package/dist/core/render-targets.d.ts +2 -0
- package/dist/core/render-targets.d.ts.map +1 -0
- package/dist/core/render-targets.js +52 -53
- package/dist/core/render-targets.js.map +1 -0
- package/dist/core/renderer.d.ts +1 -0
- package/dist/core/renderer.d.ts.map +1 -0
- package/dist/core/renderer.js +942 -1081
- package/dist/core/renderer.js.map +1 -0
- package/dist/core/runtime-loop.d.ts +2 -0
- package/dist/core/runtime-loop.d.ts.map +1 -0
- package/dist/core/runtime-loop.js +305 -362
- package/dist/core/runtime-loop.js.map +1 -0
- package/dist/core/scheduler-helpers.d.ts +1 -0
- package/dist/core/scheduler-helpers.d.ts.map +1 -0
- package/dist/core/scheduler-helpers.js +52 -51
- package/dist/core/scheduler-helpers.js.map +1 -0
- package/dist/core/shader.d.ts +1 -0
- package/dist/core/shader.d.ts.map +1 -0
- package/dist/core/shader.js +92 -117
- package/dist/core/shader.js.map +1 -0
- package/dist/core/texture-loader.d.ts +1 -0
- package/dist/core/texture-loader.d.ts.map +1 -0
- package/dist/core/texture-loader.js +205 -273
- package/dist/core/texture-loader.js.map +1 -0
- package/dist/core/textures.d.ts +2 -0
- package/dist/core/textures.d.ts.map +1 -0
- package/dist/core/textures.js +106 -116
- package/dist/core/textures.js.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +0 -4
- package/dist/core/uniforms.d.ts +1 -0
- package/dist/core/uniforms.d.ts.map +1 -0
- package/dist/core/uniforms.js +170 -191
- package/dist/core/uniforms.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -6
- package/dist/passes/BlitPass.d.ts +1 -0
- package/dist/passes/BlitPass.d.ts.map +1 -0
- package/dist/passes/BlitPass.js +23 -18
- package/dist/passes/BlitPass.js.map +1 -0
- package/dist/passes/CopyPass.d.ts +2 -0
- package/dist/passes/CopyPass.d.ts.map +1 -0
- package/dist/passes/CopyPass.js +58 -52
- package/dist/passes/CopyPass.js.map +1 -0
- package/dist/passes/FullscreenPass.d.ts +2 -0
- package/dist/passes/FullscreenPass.d.ts.map +1 -0
- package/dist/passes/FullscreenPass.js +127 -130
- package/dist/passes/FullscreenPass.js.map +1 -0
- package/dist/passes/ShaderPass.d.ts +1 -0
- package/dist/passes/ShaderPass.d.ts.map +1 -0
- package/dist/passes/ShaderPass.js +40 -37
- package/dist/passes/ShaderPass.js.map +1 -0
- package/dist/passes/index.d.ts +1 -0
- package/dist/passes/index.d.ts.map +1 -0
- package/dist/passes/index.js +4 -3
- package/dist/react/FragCanvas.d.ts +2 -0
- package/dist/react/FragCanvas.d.ts.map +1 -0
- package/dist/react/FragCanvas.js +234 -211
- package/dist/react/FragCanvas.js.map +1 -0
- package/dist/react/MotionGPUErrorOverlay.d.ts +1 -0
- package/dist/react/MotionGPUErrorOverlay.d.ts.map +1 -0
- package/dist/react/MotionGPUErrorOverlay.js +384 -48
- package/dist/react/MotionGPUErrorOverlay.js.map +1 -0
- package/dist/react/Portal.d.ts +1 -0
- package/dist/react/Portal.d.ts.map +1 -0
- package/dist/react/Portal.js +18 -21
- package/dist/react/Portal.js.map +1 -0
- package/dist/react/advanced.d.ts +1 -0
- package/dist/react/advanced.d.ts.map +1 -0
- package/dist/react/advanced.js +12 -6
- package/dist/react/frame-context.d.ts +1 -0
- package/dist/react/frame-context.d.ts.map +1 -0
- package/dist/react/frame-context.js +88 -94
- package/dist/react/frame-context.js.map +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +10 -9
- package/dist/react/motiongpu-context.d.ts +1 -0
- package/dist/react/motiongpu-context.d.ts.map +1 -0
- package/dist/react/motiongpu-context.js +18 -15
- package/dist/react/motiongpu-context.js.map +1 -0
- package/dist/react/use-motiongpu-user-context.d.ts +1 -0
- package/dist/react/use-motiongpu-user-context.d.ts.map +1 -0
- package/dist/react/use-motiongpu-user-context.js +83 -82
- package/dist/react/use-motiongpu-user-context.js.map +1 -0
- package/dist/react/use-texture.d.ts +1 -0
- package/dist/react/use-texture.d.ts.map +1 -0
- package/dist/react/use-texture.js +132 -152
- package/dist/react/use-texture.js.map +1 -0
- package/dist/svelte/FragCanvas.svelte.d.ts +2 -0
- package/dist/svelte/FragCanvas.svelte.d.ts.map +1 -0
- package/dist/svelte/MotionGPUErrorOverlay.svelte +17 -20
- package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts +1 -0
- package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts.map +1 -0
- package/dist/svelte/Portal.svelte.d.ts +1 -0
- package/dist/svelte/Portal.svelte.d.ts.map +1 -0
- package/dist/svelte/advanced.d.ts +1 -0
- package/dist/svelte/advanced.d.ts.map +1 -0
- package/dist/svelte/advanced.js +11 -6
- package/dist/svelte/frame-context.d.ts +1 -0
- package/dist/svelte/frame-context.d.ts.map +1 -0
- package/dist/svelte/frame-context.js +27 -27
- package/dist/svelte/frame-context.js.map +1 -0
- package/dist/svelte/index.d.ts +1 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +10 -9
- package/dist/svelte/motiongpu-context.d.ts +1 -0
- package/dist/svelte/motiongpu-context.d.ts.map +1 -0
- package/dist/svelte/motiongpu-context.js +24 -21
- package/dist/svelte/motiongpu-context.js.map +1 -0
- package/dist/svelte/use-motiongpu-user-context.d.ts +1 -0
- package/dist/svelte/use-motiongpu-user-context.d.ts.map +1 -0
- package/dist/svelte/use-motiongpu-user-context.js +69 -70
- package/dist/svelte/use-motiongpu-user-context.js.map +1 -0
- package/dist/svelte/use-texture.d.ts +1 -0
- package/dist/svelte/use-texture.d.ts.map +1 -0
- package/dist/svelte/use-texture.js +125 -147
- package/dist/svelte/use-texture.js.map +1 -0
- package/package.json +15 -7
- package/src/lib/advanced.ts +6 -0
- package/src/lib/core/advanced.ts +12 -0
- package/src/lib/core/current-value.ts +64 -0
- package/src/lib/core/error-diagnostics.ts +236 -0
- package/src/lib/core/error-report.ts +406 -0
- package/src/lib/core/frame-registry.ts +1189 -0
- package/src/lib/core/index.ts +77 -0
- package/src/lib/core/material-preprocess.ts +284 -0
- package/src/lib/core/material.ts +667 -0
- package/src/lib/core/recompile-policy.ts +31 -0
- package/src/lib/core/render-graph.ts +143 -0
- package/src/lib/core/render-targets.ts +107 -0
- package/src/lib/core/renderer.ts +1547 -0
- package/src/lib/core/runtime-loop.ts +458 -0
- package/src/lib/core/scheduler-helpers.ts +136 -0
- package/src/lib/core/shader.ts +258 -0
- package/src/lib/core/texture-loader.ts +476 -0
- package/src/lib/core/textures.ts +235 -0
- package/src/lib/core/types.ts +582 -0
- package/src/lib/core/uniforms.ts +282 -0
- package/src/lib/index.ts +6 -0
- package/src/lib/passes/BlitPass.ts +54 -0
- package/src/lib/passes/CopyPass.ts +80 -0
- package/src/lib/passes/FullscreenPass.ts +173 -0
- package/src/lib/passes/ShaderPass.ts +88 -0
- package/src/lib/passes/index.ts +3 -0
- package/src/lib/react/MotionGPUErrorOverlay.tsx +392 -0
- package/src/lib/react/advanced.ts +36 -0
- package/src/lib/react/frame-context.ts +169 -0
- package/src/lib/react/index.ts +51 -0
- package/src/lib/react/motiongpu-context.ts +88 -0
- package/src/lib/react/use-motiongpu-user-context.ts +186 -0
- package/src/lib/react/use-texture.ts +233 -0
- package/src/lib/svelte/FragCanvas.svelte +249 -0
- package/src/lib/svelte/MotionGPUErrorOverlay.svelte +382 -0
- package/src/lib/svelte/Portal.svelte +31 -0
- package/src/lib/svelte/advanced.ts +32 -0
- package/src/lib/svelte/frame-context.ts +87 -0
- package/src/lib/svelte/index.ts +51 -0
- package/src/lib/svelte/motiongpu-context.ts +97 -0
- package/src/lib/svelte/use-motiongpu-user-context.ts +145 -0
- package/src/lib/svelte/use-texture.ts +232 -0
- package/dist/react/MotionGPUErrorOverlay.tsx +0 -129
- /package/{dist → src/lib}/react/FragCanvas.tsx +0 -0
- /package/{dist → src/lib}/react/Portal.tsx +0 -0
|
@@ -1,162 +1,142 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createCurrentWritable
|
|
3
|
-
import { isAbortError, loadTexturesFromUrls } from
|
|
4
|
-
import {
|
|
1
|
+
import { toMotionGPUErrorReport } from "../core/error-report.js";
|
|
2
|
+
import { createCurrentWritable } from "../core/current-value.js";
|
|
3
|
+
import { isAbortError, loadTexturesFromUrls } from "../core/texture-loader.js";
|
|
4
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
5
|
+
//#region src/lib/react/use-texture.ts
|
|
5
6
|
/**
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
* Normalizes unknown thrown values to an `Error` instance.
|
|
8
|
+
*/
|
|
8
9
|
function toError(error) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
return new Error('Unknown texture loading error');
|
|
10
|
+
if (error instanceof Error) return error;
|
|
11
|
+
return /* @__PURE__ */ new Error("Unknown texture loading error");
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
* Releases GPU-side resources for a list of loaded textures.
|
|
15
|
+
*/
|
|
17
16
|
function disposeTextures(list) {
|
|
18
|
-
|
|
19
|
-
texture.dispose();
|
|
20
|
-
}
|
|
17
|
+
for (const texture of list ?? []) texture.dispose();
|
|
21
18
|
}
|
|
22
19
|
function mergeAbortSignals(primary, secondary) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
primary.addEventListener('abort', abort, { once: true });
|
|
47
|
-
secondary.addEventListener('abort', abort, { once: true });
|
|
48
|
-
return {
|
|
49
|
-
signal: fallback.signal,
|
|
50
|
-
dispose: cleanup
|
|
51
|
-
};
|
|
20
|
+
if (!secondary) return {
|
|
21
|
+
signal: primary,
|
|
22
|
+
dispose: () => {}
|
|
23
|
+
};
|
|
24
|
+
if (typeof AbortSignal.any === "function") return {
|
|
25
|
+
signal: AbortSignal.any([primary, secondary]),
|
|
26
|
+
dispose: () => {}
|
|
27
|
+
};
|
|
28
|
+
const fallback = new AbortController();
|
|
29
|
+
let disposed = false;
|
|
30
|
+
const cleanup = () => {
|
|
31
|
+
if (disposed) return;
|
|
32
|
+
disposed = true;
|
|
33
|
+
primary.removeEventListener("abort", abort);
|
|
34
|
+
secondary.removeEventListener("abort", abort);
|
|
35
|
+
};
|
|
36
|
+
const abort = () => fallback.abort();
|
|
37
|
+
primary.addEventListener("abort", abort, { once: true });
|
|
38
|
+
secondary.addEventListener("abort", abort, { once: true });
|
|
39
|
+
return {
|
|
40
|
+
signal: fallback.signal,
|
|
41
|
+
dispose: cleanup
|
|
42
|
+
};
|
|
52
43
|
}
|
|
53
44
|
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
void load();
|
|
148
|
-
return () => {
|
|
149
|
-
disposedRef.current = true;
|
|
150
|
-
requestVersionRef.current += 1;
|
|
151
|
-
activeControllerRef.current?.abort();
|
|
152
|
-
disposeTextures(texturesRef.current.current);
|
|
153
|
-
};
|
|
154
|
-
}, [load]);
|
|
155
|
-
return {
|
|
156
|
-
textures: texturesRef.current,
|
|
157
|
-
loading: loadingRef.current,
|
|
158
|
-
error: errorRef.current,
|
|
159
|
-
errorReport: errorReportRef.current,
|
|
160
|
-
reload: load
|
|
161
|
-
};
|
|
45
|
+
* Loads textures from URLs and exposes reactive loading/error state.
|
|
46
|
+
*
|
|
47
|
+
* @param urlInput - URLs array or lazy URL provider.
|
|
48
|
+
* @param options - Loader options passed to URL fetch/decode pipeline.
|
|
49
|
+
* @returns Reactive texture loading state with reload support.
|
|
50
|
+
*/
|
|
51
|
+
function useTexture(urlInput, options = {}) {
|
|
52
|
+
const texturesRef = useRef(createCurrentWritable(null));
|
|
53
|
+
const loadingRef = useRef(createCurrentWritable(true));
|
|
54
|
+
const errorRef = useRef(createCurrentWritable(null));
|
|
55
|
+
const errorReportRef = useRef(createCurrentWritable(null));
|
|
56
|
+
const activeControllerRef = useRef(null);
|
|
57
|
+
const runningLoadRef = useRef(null);
|
|
58
|
+
const reloadQueuedRef = useRef(false);
|
|
59
|
+
const requestVersionRef = useRef(0);
|
|
60
|
+
const disposedRef = useRef(false);
|
|
61
|
+
const optionsRef = useRef(options);
|
|
62
|
+
const urlInputRef = useRef(urlInput);
|
|
63
|
+
optionsRef.current = options;
|
|
64
|
+
urlInputRef.current = urlInput;
|
|
65
|
+
const getUrls = useCallback(() => {
|
|
66
|
+
const currentInput = urlInputRef.current;
|
|
67
|
+
return typeof currentInput === "function" ? currentInput() : currentInput;
|
|
68
|
+
}, []);
|
|
69
|
+
const executeLoad = useCallback(async () => {
|
|
70
|
+
if (disposedRef.current) return;
|
|
71
|
+
const version = ++requestVersionRef.current;
|
|
72
|
+
const controller = new AbortController();
|
|
73
|
+
activeControllerRef.current = controller;
|
|
74
|
+
loadingRef.current.set(true);
|
|
75
|
+
errorRef.current.set(null);
|
|
76
|
+
errorReportRef.current.set(null);
|
|
77
|
+
const previous = texturesRef.current.current;
|
|
78
|
+
const mergedSignal = mergeAbortSignals(controller.signal, optionsRef.current.signal);
|
|
79
|
+
try {
|
|
80
|
+
const loaded = await loadTexturesFromUrls(getUrls(), {
|
|
81
|
+
...optionsRef.current,
|
|
82
|
+
signal: mergedSignal.signal
|
|
83
|
+
});
|
|
84
|
+
if (disposedRef.current || version !== requestVersionRef.current) {
|
|
85
|
+
disposeTextures(loaded);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
texturesRef.current.set(loaded);
|
|
89
|
+
disposeTextures(previous);
|
|
90
|
+
} catch (nextError) {
|
|
91
|
+
if (disposedRef.current || version !== requestVersionRef.current) return;
|
|
92
|
+
if (isAbortError(nextError)) return;
|
|
93
|
+
disposeTextures(previous);
|
|
94
|
+
texturesRef.current.set(null);
|
|
95
|
+
const normalizedError = toError(nextError);
|
|
96
|
+
errorRef.current.set(normalizedError);
|
|
97
|
+
errorReportRef.current.set(toMotionGPUErrorReport(normalizedError, "initialization"));
|
|
98
|
+
} finally {
|
|
99
|
+
if (!disposedRef.current && version === requestVersionRef.current) loadingRef.current.set(false);
|
|
100
|
+
if (activeControllerRef.current === controller) activeControllerRef.current = null;
|
|
101
|
+
mergedSignal.dispose();
|
|
102
|
+
}
|
|
103
|
+
}, [getUrls]);
|
|
104
|
+
const runLoadLoop = useCallback(async () => {
|
|
105
|
+
do {
|
|
106
|
+
reloadQueuedRef.current = false;
|
|
107
|
+
await executeLoad();
|
|
108
|
+
} while (reloadQueuedRef.current && !disposedRef.current);
|
|
109
|
+
}, [executeLoad]);
|
|
110
|
+
const load = useCallback(() => {
|
|
111
|
+
activeControllerRef.current?.abort();
|
|
112
|
+
if (runningLoadRef.current) {
|
|
113
|
+
reloadQueuedRef.current = true;
|
|
114
|
+
return runningLoadRef.current;
|
|
115
|
+
}
|
|
116
|
+
const trackedPending = runLoadLoop().finally(() => {
|
|
117
|
+
if (runningLoadRef.current === trackedPending) runningLoadRef.current = null;
|
|
118
|
+
});
|
|
119
|
+
runningLoadRef.current = trackedPending;
|
|
120
|
+
return trackedPending;
|
|
121
|
+
}, [runLoadLoop]);
|
|
122
|
+
useEffect(() => {
|
|
123
|
+
load();
|
|
124
|
+
return () => {
|
|
125
|
+
disposedRef.current = true;
|
|
126
|
+
requestVersionRef.current += 1;
|
|
127
|
+
activeControllerRef.current?.abort();
|
|
128
|
+
disposeTextures(texturesRef.current.current);
|
|
129
|
+
};
|
|
130
|
+
}, [load]);
|
|
131
|
+
return {
|
|
132
|
+
textures: texturesRef.current,
|
|
133
|
+
loading: loadingRef.current,
|
|
134
|
+
error: errorRef.current,
|
|
135
|
+
errorReport: errorReportRef.current,
|
|
136
|
+
reload: load
|
|
137
|
+
};
|
|
162
138
|
}
|
|
139
|
+
//#endregion
|
|
140
|
+
export { useTexture };
|
|
141
|
+
|
|
142
|
+
//# sourceMappingURL=use-texture.js.map
|
|
@@ -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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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/// <reference types="@webgpu/types" />
|
|
1
2
|
import type { Snippet } from 'svelte';
|
|
2
3
|
import type { FragMaterial } from '../core/material';
|
|
3
4
|
import { type MotionGPUErrorReport } from '../core/error-report';
|
|
@@ -26,3 +27,4 @@ interface Props {
|
|
|
26
27
|
declare const FragCanvas: import("svelte").Component<Props, {}, "">;
|
|
27
28
|
type FragCanvas = ReturnType<typeof FragCanvas>;
|
|
28
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,EAEV,gBAAgB,EAChB,UAAU,EACV,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,UAAU,EAAE,CAAC;IACtB,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"}
|
|
@@ -94,14 +94,16 @@
|
|
|
94
94
|
|
|
95
95
|
<style>
|
|
96
96
|
.motiongpu-error-overlay {
|
|
97
|
-
--motiongpu-
|
|
98
|
-
--motiongpu-color-background
|
|
99
|
-
--motiongpu-color-
|
|
100
|
-
--motiongpu-color-foreground
|
|
101
|
-
--motiongpu-color-
|
|
102
|
-
--motiongpu-color-
|
|
103
|
-
--motiongpu-color-accent
|
|
104
|
-
--motiongpu-color-
|
|
97
|
+
--motiongpu-base-hue: var(--base-hue, 265);
|
|
98
|
+
--motiongpu-color-background: oklch(0.2178 0.0056 var(--motiongpu-base-hue));
|
|
99
|
+
--motiongpu-color-background-muted: oklch(0.261 0.007 var(--motiongpu-base-hue));
|
|
100
|
+
--motiongpu-color-foreground: oklch(1 0 0);
|
|
101
|
+
--motiongpu-color-foreground-muted: oklch(0.6699 0.0081 var(--motiongpu-base-hue));
|
|
102
|
+
--motiongpu-color-card: var(--motiongpu-color-background);
|
|
103
|
+
--motiongpu-color-accent: oklch(0.6996 0.181959 44.4414);
|
|
104
|
+
--motiongpu-color-accent-secondary: oklch(0.5096 0.131959 44.4414);
|
|
105
|
+
--motiongpu-color-border: oklch(0.928 0.013 var(--motiongpu-base-hue) / 0.05);
|
|
106
|
+
--motiongpu-color-white-fixed: oklch(1 0 0);
|
|
105
107
|
--motiongpu-shadow-card: var(
|
|
106
108
|
--shadow-2xl,
|
|
107
109
|
0px 1px 1px -0.5px rgba(0, 0, 0, 0.06),
|
|
@@ -128,12 +130,11 @@
|
|
|
128
130
|
display: grid;
|
|
129
131
|
place-items: center;
|
|
130
132
|
padding: clamp(0.75rem, 1.4vw, 1.5rem);
|
|
131
|
-
background:
|
|
132
|
-
radial-gradient(125% 125% at 50% 0%, rgba(255, 105, 0, 0.12) 0%, rgba(255, 105, 0, 0) 56%),
|
|
133
|
-
rgba(12, 12, 14, 0.38);
|
|
133
|
+
background: rgba(0, 0, 0, 0.8);
|
|
134
134
|
backdrop-filter: blur(10px);
|
|
135
135
|
z-index: 2147483647;
|
|
136
136
|
font-family: var(--motiongpu-font-sans);
|
|
137
|
+
color-scheme: dark;
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
.motiongpu-error-dialog {
|
|
@@ -149,11 +150,7 @@
|
|
|
149
150
|
font-size: 0.875rem;
|
|
150
151
|
font-weight: 400;
|
|
151
152
|
line-height: 1.45;
|
|
152
|
-
background:
|
|
153
|
-
180deg,
|
|
154
|
-
var(--motiongpu-color-card) 0%,
|
|
155
|
-
var(--motiongpu-color-background-muted) 100%
|
|
156
|
-
);
|
|
153
|
+
background: var(--motiongpu-color-card);
|
|
157
154
|
color: var(--motiongpu-color-foreground);
|
|
158
155
|
box-shadow: var(--motiongpu-shadow-card);
|
|
159
156
|
}
|
|
@@ -187,7 +184,7 @@
|
|
|
187
184
|
line-height: 1;
|
|
188
185
|
font-weight: 500;
|
|
189
186
|
text-transform: uppercase;
|
|
190
|
-
color: var(--motiongpu-color-
|
|
187
|
+
color: var(--motiongpu-color-white-fixed);
|
|
191
188
|
background: linear-gradient(
|
|
192
189
|
180deg,
|
|
193
190
|
var(--motiongpu-color-accent) 0%,
|
|
@@ -215,9 +212,9 @@
|
|
|
215
212
|
.motiongpu-error-message {
|
|
216
213
|
margin: 0;
|
|
217
214
|
padding: 0.72rem 0.78rem;
|
|
218
|
-
border: 1px solid color-mix(in
|
|
215
|
+
border: 1px solid color-mix(in oklch, var(--motiongpu-color-accent) 28%, transparent);
|
|
219
216
|
border-radius: var(--motiongpu-radius-md);
|
|
220
|
-
background: color-mix(in
|
|
217
|
+
background: color-mix(in oklch, var(--motiongpu-color-accent) 10%, transparent);
|
|
221
218
|
font-size: 0.82rem;
|
|
222
219
|
line-height: 1.4;
|
|
223
220
|
font-weight: 400;
|
|
@@ -302,7 +299,7 @@
|
|
|
302
299
|
}
|
|
303
300
|
|
|
304
301
|
.motiongpu-error-source-row-active {
|
|
305
|
-
background: color-mix(in
|
|
302
|
+
background: color-mix(in oklch, var(--motiongpu-color-accent) 10%, transparent);
|
|
306
303
|
}
|
|
307
304
|
|
|
308
305
|
.motiongpu-error-source-line {
|
|
@@ -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;AAkFF,QAAA,MAAM,qBAAqB,2CAAwC,CAAC;AACpE,KAAK,qBAAqB,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACtE,eAAe,qBAAqB,CAAC"}
|
|
@@ -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"}
|
package/dist/svelte/advanced.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 { applySchedulerPreset, captureSchedulerDebugSnapshot } from "../core/scheduler-helpers.js";
|
|
6
|
+
import { useMotionGPU } from "./motiongpu-context.js";
|
|
7
|
+
import { useFrame } from "./frame-context.js";
|
|
8
|
+
import { useTexture } from "./use-texture.js";
|
|
9
|
+
import { FragCanvas } from "./index.js";
|
|
10
|
+
import { setMotionGPUUserContext, useMotionGPUUserContext } from "./use-motiongpu-user-context.js";
|
|
11
|
+
export { BlitPass, CopyPass, FragCanvas, 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 {
|
|
2
|
-
import {
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
* Provides a frame registry through Svelte context.
|
|
10
|
+
*/
|
|
11
|
+
function provideFrameRegistry(registry) {
|
|
12
|
+
setContext(FRAME_CONTEXT_KEY, registry);
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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"}
|
package/dist/svelte/index.d.ts
CHANGED
|
@@ -13,3 +13,4 @@ export type { FragMaterial, FragMaterialInput, MaterialIncludes, MaterialDefineV
|
|
|
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
|
+
//# 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,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACpE,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,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"}
|
package/dist/svelte/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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 "../passes/index.js";
|
|
6
|
+
import { useMotionGPU } from "./motiongpu-context.js";
|
|
7
|
+
import { useFrame } from "./frame-context.js";
|
|
8
|
+
import { useTexture } from "./use-texture.js";
|
|
9
|
+
import FragCanvas from "./FragCanvas.svelte";
|
|
10
|
+
export { BlitPass, CopyPass, FragCanvas, ShaderPass, defineMaterial, useFrame, useMotionGPU, useTexture };
|
|
@@ -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"}
|