@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.
Files changed (207) hide show
  1. package/dist/advanced.d.ts +1 -0
  2. package/dist/advanced.d.ts.map +1 -0
  3. package/dist/advanced.js +12 -6
  4. package/dist/core/advanced.d.ts +1 -0
  5. package/dist/core/advanced.d.ts.map +1 -0
  6. package/dist/core/advanced.js +12 -5
  7. package/dist/core/current-value.d.ts +1 -0
  8. package/dist/core/current-value.d.ts.map +1 -0
  9. package/dist/core/current-value.js +35 -34
  10. package/dist/core/current-value.js.map +1 -0
  11. package/dist/core/error-diagnostics.d.ts +1 -0
  12. package/dist/core/error-diagnostics.d.ts.map +1 -0
  13. package/dist/core/error-diagnostics.js +70 -137
  14. package/dist/core/error-diagnostics.js.map +1 -0
  15. package/dist/core/error-report.d.ts +1 -0
  16. package/dist/core/error-report.d.ts.map +1 -0
  17. package/dist/core/error-report.js +184 -233
  18. package/dist/core/error-report.js.map +1 -0
  19. package/dist/core/frame-registry.d.ts +1 -0
  20. package/dist/core/frame-registry.d.ts.map +1 -0
  21. package/dist/core/frame-registry.js +546 -662
  22. package/dist/core/frame-registry.js.map +1 -0
  23. package/dist/core/index.d.ts +1 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +11 -12
  26. package/dist/core/material-preprocess.d.ts +1 -0
  27. package/dist/core/material-preprocess.d.ts.map +1 -0
  28. package/dist/core/material-preprocess.js +128 -151
  29. package/dist/core/material-preprocess.js.map +1 -0
  30. package/dist/core/material.d.ts +1 -0
  31. package/dist/core/material.d.ts.map +1 -0
  32. package/dist/core/material.js +263 -317
  33. package/dist/core/material.js.map +1 -0
  34. package/dist/core/recompile-policy.d.ts +1 -0
  35. package/dist/core/recompile-policy.d.ts.map +1 -0
  36. package/dist/core/recompile-policy.js +18 -13
  37. package/dist/core/recompile-policy.js.map +1 -0
  38. package/dist/core/render-graph.d.ts +1 -0
  39. package/dist/core/render-graph.d.ts.map +1 -0
  40. package/dist/core/render-graph.js +61 -68
  41. package/dist/core/render-graph.js.map +1 -0
  42. package/dist/core/render-targets.d.ts +2 -0
  43. package/dist/core/render-targets.d.ts.map +1 -0
  44. package/dist/core/render-targets.js +52 -53
  45. package/dist/core/render-targets.js.map +1 -0
  46. package/dist/core/renderer.d.ts +1 -0
  47. package/dist/core/renderer.d.ts.map +1 -0
  48. package/dist/core/renderer.js +942 -1081
  49. package/dist/core/renderer.js.map +1 -0
  50. package/dist/core/runtime-loop.d.ts +2 -0
  51. package/dist/core/runtime-loop.d.ts.map +1 -0
  52. package/dist/core/runtime-loop.js +305 -362
  53. package/dist/core/runtime-loop.js.map +1 -0
  54. package/dist/core/scheduler-helpers.d.ts +1 -0
  55. package/dist/core/scheduler-helpers.d.ts.map +1 -0
  56. package/dist/core/scheduler-helpers.js +52 -51
  57. package/dist/core/scheduler-helpers.js.map +1 -0
  58. package/dist/core/shader.d.ts +1 -0
  59. package/dist/core/shader.d.ts.map +1 -0
  60. package/dist/core/shader.js +92 -117
  61. package/dist/core/shader.js.map +1 -0
  62. package/dist/core/texture-loader.d.ts +1 -0
  63. package/dist/core/texture-loader.d.ts.map +1 -0
  64. package/dist/core/texture-loader.js +205 -273
  65. package/dist/core/texture-loader.js.map +1 -0
  66. package/dist/core/textures.d.ts +2 -0
  67. package/dist/core/textures.d.ts.map +1 -0
  68. package/dist/core/textures.js +106 -116
  69. package/dist/core/textures.js.map +1 -0
  70. package/dist/core/types.d.ts +2 -0
  71. package/dist/core/types.d.ts.map +1 -0
  72. package/dist/core/types.js +0 -4
  73. package/dist/core/uniforms.d.ts +1 -0
  74. package/dist/core/uniforms.d.ts.map +1 -0
  75. package/dist/core/uniforms.js +170 -191
  76. package/dist/core/uniforms.js.map +1 -0
  77. package/dist/index.d.ts +1 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +11 -6
  80. package/dist/passes/BlitPass.d.ts +1 -0
  81. package/dist/passes/BlitPass.d.ts.map +1 -0
  82. package/dist/passes/BlitPass.js +23 -18
  83. package/dist/passes/BlitPass.js.map +1 -0
  84. package/dist/passes/CopyPass.d.ts +2 -0
  85. package/dist/passes/CopyPass.d.ts.map +1 -0
  86. package/dist/passes/CopyPass.js +58 -52
  87. package/dist/passes/CopyPass.js.map +1 -0
  88. package/dist/passes/FullscreenPass.d.ts +2 -0
  89. package/dist/passes/FullscreenPass.d.ts.map +1 -0
  90. package/dist/passes/FullscreenPass.js +127 -130
  91. package/dist/passes/FullscreenPass.js.map +1 -0
  92. package/dist/passes/ShaderPass.d.ts +1 -0
  93. package/dist/passes/ShaderPass.d.ts.map +1 -0
  94. package/dist/passes/ShaderPass.js +40 -37
  95. package/dist/passes/ShaderPass.js.map +1 -0
  96. package/dist/passes/index.d.ts +1 -0
  97. package/dist/passes/index.d.ts.map +1 -0
  98. package/dist/passes/index.js +4 -3
  99. package/dist/react/FragCanvas.d.ts +2 -0
  100. package/dist/react/FragCanvas.d.ts.map +1 -0
  101. package/dist/react/FragCanvas.js +234 -211
  102. package/dist/react/FragCanvas.js.map +1 -0
  103. package/dist/react/MotionGPUErrorOverlay.d.ts +1 -0
  104. package/dist/react/MotionGPUErrorOverlay.d.ts.map +1 -0
  105. package/dist/react/MotionGPUErrorOverlay.js +384 -48
  106. package/dist/react/MotionGPUErrorOverlay.js.map +1 -0
  107. package/dist/react/Portal.d.ts +1 -0
  108. package/dist/react/Portal.d.ts.map +1 -0
  109. package/dist/react/Portal.js +18 -21
  110. package/dist/react/Portal.js.map +1 -0
  111. package/dist/react/advanced.d.ts +1 -0
  112. package/dist/react/advanced.d.ts.map +1 -0
  113. package/dist/react/advanced.js +12 -6
  114. package/dist/react/frame-context.d.ts +1 -0
  115. package/dist/react/frame-context.d.ts.map +1 -0
  116. package/dist/react/frame-context.js +88 -94
  117. package/dist/react/frame-context.js.map +1 -0
  118. package/dist/react/index.d.ts +1 -0
  119. package/dist/react/index.d.ts.map +1 -0
  120. package/dist/react/index.js +10 -9
  121. package/dist/react/motiongpu-context.d.ts +1 -0
  122. package/dist/react/motiongpu-context.d.ts.map +1 -0
  123. package/dist/react/motiongpu-context.js +18 -15
  124. package/dist/react/motiongpu-context.js.map +1 -0
  125. package/dist/react/use-motiongpu-user-context.d.ts +1 -0
  126. package/dist/react/use-motiongpu-user-context.d.ts.map +1 -0
  127. package/dist/react/use-motiongpu-user-context.js +83 -82
  128. package/dist/react/use-motiongpu-user-context.js.map +1 -0
  129. package/dist/react/use-texture.d.ts +1 -0
  130. package/dist/react/use-texture.d.ts.map +1 -0
  131. package/dist/react/use-texture.js +132 -152
  132. package/dist/react/use-texture.js.map +1 -0
  133. package/dist/svelte/FragCanvas.svelte.d.ts +2 -0
  134. package/dist/svelte/FragCanvas.svelte.d.ts.map +1 -0
  135. package/dist/svelte/MotionGPUErrorOverlay.svelte +17 -20
  136. package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts +1 -0
  137. package/dist/svelte/MotionGPUErrorOverlay.svelte.d.ts.map +1 -0
  138. package/dist/svelte/Portal.svelte.d.ts +1 -0
  139. package/dist/svelte/Portal.svelte.d.ts.map +1 -0
  140. package/dist/svelte/advanced.d.ts +1 -0
  141. package/dist/svelte/advanced.d.ts.map +1 -0
  142. package/dist/svelte/advanced.js +11 -6
  143. package/dist/svelte/frame-context.d.ts +1 -0
  144. package/dist/svelte/frame-context.d.ts.map +1 -0
  145. package/dist/svelte/frame-context.js +27 -27
  146. package/dist/svelte/frame-context.js.map +1 -0
  147. package/dist/svelte/index.d.ts +1 -0
  148. package/dist/svelte/index.d.ts.map +1 -0
  149. package/dist/svelte/index.js +10 -9
  150. package/dist/svelte/motiongpu-context.d.ts +1 -0
  151. package/dist/svelte/motiongpu-context.d.ts.map +1 -0
  152. package/dist/svelte/motiongpu-context.js +24 -21
  153. package/dist/svelte/motiongpu-context.js.map +1 -0
  154. package/dist/svelte/use-motiongpu-user-context.d.ts +1 -0
  155. package/dist/svelte/use-motiongpu-user-context.d.ts.map +1 -0
  156. package/dist/svelte/use-motiongpu-user-context.js +69 -70
  157. package/dist/svelte/use-motiongpu-user-context.js.map +1 -0
  158. package/dist/svelte/use-texture.d.ts +1 -0
  159. package/dist/svelte/use-texture.d.ts.map +1 -0
  160. package/dist/svelte/use-texture.js +125 -147
  161. package/dist/svelte/use-texture.js.map +1 -0
  162. package/package.json +15 -7
  163. package/src/lib/advanced.ts +6 -0
  164. package/src/lib/core/advanced.ts +12 -0
  165. package/src/lib/core/current-value.ts +64 -0
  166. package/src/lib/core/error-diagnostics.ts +236 -0
  167. package/src/lib/core/error-report.ts +406 -0
  168. package/src/lib/core/frame-registry.ts +1189 -0
  169. package/src/lib/core/index.ts +77 -0
  170. package/src/lib/core/material-preprocess.ts +284 -0
  171. package/src/lib/core/material.ts +667 -0
  172. package/src/lib/core/recompile-policy.ts +31 -0
  173. package/src/lib/core/render-graph.ts +143 -0
  174. package/src/lib/core/render-targets.ts +107 -0
  175. package/src/lib/core/renderer.ts +1547 -0
  176. package/src/lib/core/runtime-loop.ts +458 -0
  177. package/src/lib/core/scheduler-helpers.ts +136 -0
  178. package/src/lib/core/shader.ts +258 -0
  179. package/src/lib/core/texture-loader.ts +476 -0
  180. package/src/lib/core/textures.ts +235 -0
  181. package/src/lib/core/types.ts +582 -0
  182. package/src/lib/core/uniforms.ts +282 -0
  183. package/src/lib/index.ts +6 -0
  184. package/src/lib/passes/BlitPass.ts +54 -0
  185. package/src/lib/passes/CopyPass.ts +80 -0
  186. package/src/lib/passes/FullscreenPass.ts +173 -0
  187. package/src/lib/passes/ShaderPass.ts +88 -0
  188. package/src/lib/passes/index.ts +3 -0
  189. package/src/lib/react/MotionGPUErrorOverlay.tsx +392 -0
  190. package/src/lib/react/advanced.ts +36 -0
  191. package/src/lib/react/frame-context.ts +169 -0
  192. package/src/lib/react/index.ts +51 -0
  193. package/src/lib/react/motiongpu-context.ts +88 -0
  194. package/src/lib/react/use-motiongpu-user-context.ts +186 -0
  195. package/src/lib/react/use-texture.ts +233 -0
  196. package/src/lib/svelte/FragCanvas.svelte +249 -0
  197. package/src/lib/svelte/MotionGPUErrorOverlay.svelte +382 -0
  198. package/src/lib/svelte/Portal.svelte +31 -0
  199. package/src/lib/svelte/advanced.ts +32 -0
  200. package/src/lib/svelte/frame-context.ts +87 -0
  201. package/src/lib/svelte/index.ts +51 -0
  202. package/src/lib/svelte/motiongpu-context.ts +97 -0
  203. package/src/lib/svelte/use-motiongpu-user-context.ts +145 -0
  204. package/src/lib/svelte/use-texture.ts +232 -0
  205. package/dist/react/MotionGPUErrorOverlay.tsx +0 -129
  206. /package/{dist → src/lib}/react/FragCanvas.tsx +0 -0
  207. /package/{dist → src/lib}/react/Portal.tsx +0 -0
@@ -0,0 +1,235 @@
1
+ import { assertUniformName } from './uniforms.js';
2
+ import type {
3
+ TextureData,
4
+ TextureDefinition,
5
+ TextureDefinitionMap,
6
+ TextureUpdateMode,
7
+ TextureValue
8
+ } from './types.js';
9
+
10
+ /**
11
+ * Texture definition with defaults and normalized numeric limits applied.
12
+ */
13
+ export interface NormalizedTextureDefinition {
14
+ /**
15
+ * Normalized source value.
16
+ */
17
+ source: TextureValue;
18
+ /**
19
+ * Effective color space.
20
+ */
21
+ colorSpace: 'srgb' | 'linear';
22
+ /**
23
+ * Effective texture format.
24
+ */
25
+ format: GPUTextureFormat;
26
+ /**
27
+ * Effective flip-y flag.
28
+ */
29
+ flipY: boolean;
30
+ /**
31
+ * Effective mipmap toggle.
32
+ */
33
+ generateMipmaps: boolean;
34
+ /**
35
+ * Effective premultiplied-alpha flag.
36
+ */
37
+ premultipliedAlpha: boolean;
38
+ /**
39
+ * Effective dynamic update strategy.
40
+ */
41
+ update?: TextureUpdateMode;
42
+ /**
43
+ * Effective anisotropy level.
44
+ */
45
+ anisotropy: number;
46
+ /**
47
+ * Effective filter mode.
48
+ */
49
+ filter: GPUFilterMode;
50
+ /**
51
+ * Effective U address mode.
52
+ */
53
+ addressModeU: GPUAddressMode;
54
+ /**
55
+ * Effective V address mode.
56
+ */
57
+ addressModeV: GPUAddressMode;
58
+ }
59
+
60
+ /**
61
+ * Default sampling filter for textures when no explicit value is provided.
62
+ */
63
+ const DEFAULT_TEXTURE_FILTER: GPUFilterMode = 'linear';
64
+
65
+ /**
66
+ * Default addressing mode for textures when no explicit value is provided.
67
+ */
68
+ const DEFAULT_TEXTURE_ADDRESS_MODE: GPUAddressMode = 'clamp-to-edge';
69
+
70
+ /**
71
+ * Validates and returns sorted texture keys.
72
+ *
73
+ * @param textures - Texture definition map.
74
+ * @returns Lexicographically sorted texture keys.
75
+ */
76
+ export function resolveTextureKeys(textures: TextureDefinitionMap): string[] {
77
+ const keys = Object.keys(textures).sort();
78
+ for (const key of keys) {
79
+ assertUniformName(key);
80
+ }
81
+ return keys;
82
+ }
83
+
84
+ /**
85
+ * Applies defaults and clamps to a single texture definition.
86
+ *
87
+ * @param definition - Optional texture definition.
88
+ * @returns Normalized definition with deterministic defaults.
89
+ */
90
+ export function normalizeTextureDefinition(
91
+ definition: TextureDefinition | undefined
92
+ ): NormalizedTextureDefinition {
93
+ const normalized: NormalizedTextureDefinition = {
94
+ source: definition?.source ?? null,
95
+ colorSpace: definition?.colorSpace ?? 'srgb',
96
+ format: definition?.colorSpace === 'linear' ? 'rgba8unorm' : 'rgba8unorm-srgb',
97
+ flipY: definition?.flipY ?? true,
98
+ generateMipmaps: definition?.generateMipmaps ?? false,
99
+ premultipliedAlpha: definition?.premultipliedAlpha ?? false,
100
+ anisotropy: Math.max(1, Math.min(16, Math.floor(definition?.anisotropy ?? 1))),
101
+ filter: definition?.filter ?? DEFAULT_TEXTURE_FILTER,
102
+ addressModeU: definition?.addressModeU ?? DEFAULT_TEXTURE_ADDRESS_MODE,
103
+ addressModeV: definition?.addressModeV ?? DEFAULT_TEXTURE_ADDRESS_MODE
104
+ };
105
+
106
+ if (definition?.update !== undefined) {
107
+ normalized.update = definition.update;
108
+ }
109
+
110
+ return normalized;
111
+ }
112
+
113
+ /**
114
+ * Normalizes all texture definitions for already-resolved texture keys.
115
+ *
116
+ * @param textures - Source texture definitions.
117
+ * @param textureKeys - Texture keys to normalize.
118
+ * @returns Normalized map keyed by `textureKeys`.
119
+ */
120
+ export function normalizeTextureDefinitions(
121
+ textures: TextureDefinitionMap,
122
+ textureKeys: string[]
123
+ ): Record<string, NormalizedTextureDefinition> {
124
+ const out: Record<string, NormalizedTextureDefinition> = {};
125
+ for (const key of textureKeys) {
126
+ out[key] = normalizeTextureDefinition(textures[key]);
127
+ }
128
+ return out;
129
+ }
130
+
131
+ /**
132
+ * Checks whether a texture value is a structured `{ source, width?, height? }` object.
133
+ */
134
+ export function isTextureData(value: TextureValue): value is TextureData {
135
+ return typeof value === 'object' && value !== null && 'source' in value;
136
+ }
137
+
138
+ /**
139
+ * Converts supported texture input variants to normalized `TextureData`.
140
+ *
141
+ * @param value - Texture value input.
142
+ * @returns Structured texture data or `null`.
143
+ */
144
+ export function toTextureData(value: TextureValue): TextureData | null {
145
+ if (value === null) {
146
+ return null;
147
+ }
148
+
149
+ if (isTextureData(value)) {
150
+ return value;
151
+ }
152
+
153
+ return { source: value };
154
+ }
155
+
156
+ /**
157
+ * Resolves effective runtime texture update strategy.
158
+ */
159
+ export function resolveTextureUpdateMode(input: {
160
+ source: TextureData['source'];
161
+ override?: TextureUpdateMode;
162
+ defaultMode?: TextureUpdateMode;
163
+ }): TextureUpdateMode {
164
+ if (input.override) {
165
+ return input.override;
166
+ }
167
+
168
+ if (input.defaultMode) {
169
+ return input.defaultMode;
170
+ }
171
+
172
+ if (isVideoTextureSource(input.source)) {
173
+ return 'perFrame';
174
+ }
175
+
176
+ return 'once';
177
+ }
178
+
179
+ /**
180
+ * Resolves texture dimensions from explicit values or source metadata.
181
+ *
182
+ * @param data - Texture payload.
183
+ * @returns Positive integer width/height.
184
+ * @throws {Error} When dimensions cannot be resolved to positive values.
185
+ */
186
+ export function resolveTextureSize(data: TextureData): {
187
+ width: number;
188
+ height: number;
189
+ } {
190
+ const source = data.source as {
191
+ width?: number;
192
+ height?: number;
193
+ naturalWidth?: number;
194
+ naturalHeight?: number;
195
+ videoWidth?: number;
196
+ videoHeight?: number;
197
+ };
198
+
199
+ const width = data.width ?? source.naturalWidth ?? source.videoWidth ?? source.width ?? 0;
200
+ const height = data.height ?? source.naturalHeight ?? source.videoHeight ?? source.height ?? 0;
201
+
202
+ if (width <= 0 || height <= 0) {
203
+ throw new Error('Texture source must have positive width and height');
204
+ }
205
+
206
+ return { width, height };
207
+ }
208
+
209
+ /**
210
+ * Computes the number of mipmap levels for a base texture size.
211
+ *
212
+ * @param width - Base width.
213
+ * @param height - Base height.
214
+ * @returns Total mip level count (minimum `1`).
215
+ */
216
+ export function getTextureMipLevelCount(width: number, height: number): number {
217
+ let levels = 1;
218
+ let currentWidth = Math.max(1, width);
219
+ let currentHeight = Math.max(1, height);
220
+
221
+ while (currentWidth > 1 || currentHeight > 1) {
222
+ currentWidth = Math.max(1, Math.floor(currentWidth / 2));
223
+ currentHeight = Math.max(1, Math.floor(currentHeight / 2));
224
+ levels += 1;
225
+ }
226
+
227
+ return levels;
228
+ }
229
+
230
+ /**
231
+ * Checks whether the source is an `HTMLVideoElement`.
232
+ */
233
+ export function isVideoTextureSource(source: TextureData['source']): source is HTMLVideoElement {
234
+ return typeof HTMLVideoElement !== 'undefined' && source instanceof HTMLVideoElement;
235
+ }