@motion-core/motion-gpu 0.1.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.
- package/LICENSE +21 -0
- package/README.md +325 -0
- package/dist/FragCanvas.svelte +511 -0
- package/dist/FragCanvas.svelte.d.ts +26 -0
- package/dist/MotionGPUErrorOverlay.svelte +394 -0
- package/dist/MotionGPUErrorOverlay.svelte.d.ts +7 -0
- package/dist/Portal.svelte +46 -0
- package/dist/Portal.svelte.d.ts +8 -0
- package/dist/advanced-scheduler.d.ts +44 -0
- package/dist/advanced-scheduler.js +58 -0
- package/dist/advanced.d.ts +14 -0
- package/dist/advanced.js +9 -0
- package/dist/core/error-diagnostics.d.ts +40 -0
- package/dist/core/error-diagnostics.js +111 -0
- package/dist/core/error-report.d.ts +67 -0
- package/dist/core/error-report.js +190 -0
- package/dist/core/material-preprocess.d.ts +63 -0
- package/dist/core/material-preprocess.js +166 -0
- package/dist/core/material.d.ts +157 -0
- package/dist/core/material.js +358 -0
- package/dist/core/recompile-policy.d.ts +27 -0
- package/dist/core/recompile-policy.js +15 -0
- package/dist/core/render-graph.d.ts +55 -0
- package/dist/core/render-graph.js +73 -0
- package/dist/core/render-targets.d.ts +39 -0
- package/dist/core/render-targets.js +63 -0
- package/dist/core/renderer.d.ts +9 -0
- package/dist/core/renderer.js +1097 -0
- package/dist/core/shader.d.ts +42 -0
- package/dist/core/shader.js +196 -0
- package/dist/core/texture-loader.d.ts +129 -0
- package/dist/core/texture-loader.js +295 -0
- package/dist/core/textures.d.ts +114 -0
- package/dist/core/textures.js +136 -0
- package/dist/core/types.d.ts +523 -0
- package/dist/core/types.js +4 -0
- package/dist/core/uniforms.d.ts +48 -0
- package/dist/core/uniforms.js +222 -0
- package/dist/current-writable.d.ts +31 -0
- package/dist/current-writable.js +27 -0
- package/dist/frame-context.d.ts +287 -0
- package/dist/frame-context.js +731 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +11 -0
- package/dist/motiongpu-context.d.ts +77 -0
- package/dist/motiongpu-context.js +26 -0
- package/dist/passes/BlitPass.d.ts +32 -0
- package/dist/passes/BlitPass.js +158 -0
- package/dist/passes/CopyPass.d.ts +25 -0
- package/dist/passes/CopyPass.js +53 -0
- package/dist/passes/ShaderPass.d.ts +40 -0
- package/dist/passes/ShaderPass.js +182 -0
- package/dist/passes/index.d.ts +3 -0
- package/dist/passes/index.js +3 -0
- package/dist/use-motiongpu-user-context.d.ts +35 -0
- package/dist/use-motiongpu-user-context.js +74 -0
- package/dist/use-texture.d.ts +35 -0
- package/dist/use-texture.js +147 -0
- package/package.json +94 -0
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core runtime and API contracts used by MotionGPU's renderer, hooks and scheduler.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* WGSL-compatible uniform primitive and aggregate types supported by MotionGPU.
|
|
6
|
+
*/
|
|
7
|
+
export type UniformType = 'f32' | 'vec2f' | 'vec3f' | 'vec4f' | 'mat4x4f';
|
|
8
|
+
/**
|
|
9
|
+
* Explicitly typed uniform declaration.
|
|
10
|
+
*
|
|
11
|
+
* @typeParam TType - WGSL type tag.
|
|
12
|
+
* @typeParam TValue - Runtime value shape for the selected type.
|
|
13
|
+
*/
|
|
14
|
+
export interface TypedUniform<TType extends UniformType = UniformType, TValue = unknown> {
|
|
15
|
+
/**
|
|
16
|
+
* WGSL type tag.
|
|
17
|
+
*/
|
|
18
|
+
type: TType;
|
|
19
|
+
/**
|
|
20
|
+
* Runtime value matching {@link type}.
|
|
21
|
+
*/
|
|
22
|
+
value: TValue;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Accepted matrix value formats for `mat4x4f` uniforms.
|
|
26
|
+
*/
|
|
27
|
+
export type UniformMat4Value = number[] | Float32Array;
|
|
28
|
+
/**
|
|
29
|
+
* Supported uniform input shapes accepted by material and render APIs.
|
|
30
|
+
*/
|
|
31
|
+
export type UniformValue = number | [number, number] | [number, number, number] | [number, number, number, number] | TypedUniform<'f32', number> | TypedUniform<'vec2f', [number, number]> | TypedUniform<'vec3f', [number, number, number]> | TypedUniform<'vec4f', [number, number, number, number]> | TypedUniform<'mat4x4f', UniformMat4Value>;
|
|
32
|
+
/**
|
|
33
|
+
* Uniform map keyed by WGSL identifier names.
|
|
34
|
+
*/
|
|
35
|
+
export type UniformMap = Record<string, UniformValue>;
|
|
36
|
+
/**
|
|
37
|
+
* Resolved layout metadata for a single uniform field inside the packed uniform buffer.
|
|
38
|
+
*/
|
|
39
|
+
export interface UniformLayoutEntry {
|
|
40
|
+
/**
|
|
41
|
+
* Uniform field name.
|
|
42
|
+
*/
|
|
43
|
+
name: string;
|
|
44
|
+
/**
|
|
45
|
+
* WGSL field type.
|
|
46
|
+
*/
|
|
47
|
+
type: UniformType;
|
|
48
|
+
/**
|
|
49
|
+
* Byte offset within packed uniform buffer.
|
|
50
|
+
*/
|
|
51
|
+
offset: number;
|
|
52
|
+
/**
|
|
53
|
+
* Field byte size without trailing alignment padding.
|
|
54
|
+
*/
|
|
55
|
+
size: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* GPU uniform buffer layout resolved from a {@link UniformMap} using WGSL alignment rules.
|
|
59
|
+
*/
|
|
60
|
+
export interface UniformLayout {
|
|
61
|
+
/**
|
|
62
|
+
* Layout entries sorted by uniform name.
|
|
63
|
+
*/
|
|
64
|
+
entries: UniformLayoutEntry[];
|
|
65
|
+
/**
|
|
66
|
+
* Fast lookup table by uniform name.
|
|
67
|
+
*/
|
|
68
|
+
byName: Record<string, UniformLayoutEntry>;
|
|
69
|
+
/**
|
|
70
|
+
* Final uniform buffer size in bytes.
|
|
71
|
+
*/
|
|
72
|
+
byteLength: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Supported runtime texture source types accepted by WebGPU uploads.
|
|
76
|
+
*/
|
|
77
|
+
export type TextureSource = ImageBitmap | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;
|
|
78
|
+
/**
|
|
79
|
+
* Texture payload with optional explicit dimensions.
|
|
80
|
+
*/
|
|
81
|
+
export interface TextureData {
|
|
82
|
+
/**
|
|
83
|
+
* GPU-uploadable image source.
|
|
84
|
+
*/
|
|
85
|
+
source: TextureSource;
|
|
86
|
+
/**
|
|
87
|
+
* Optional explicit width override.
|
|
88
|
+
*/
|
|
89
|
+
width?: number;
|
|
90
|
+
/**
|
|
91
|
+
* Optional explicit height override.
|
|
92
|
+
*/
|
|
93
|
+
height?: number;
|
|
94
|
+
/**
|
|
95
|
+
* Optional runtime color space override.
|
|
96
|
+
*/
|
|
97
|
+
colorSpace?: 'srgb' | 'linear';
|
|
98
|
+
/**
|
|
99
|
+
* Optional runtime flip-y override.
|
|
100
|
+
*/
|
|
101
|
+
flipY?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Optional runtime premultiplied-alpha override.
|
|
104
|
+
*/
|
|
105
|
+
premultipliedAlpha?: boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Optional runtime mipmap generation override.
|
|
108
|
+
*/
|
|
109
|
+
generateMipmaps?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Runtime update strategy override.
|
|
112
|
+
*/
|
|
113
|
+
update?: TextureUpdateMode;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Texture input accepted by renderer state APIs.
|
|
117
|
+
*/
|
|
118
|
+
export type TextureValue = TextureData | TextureSource | null;
|
|
119
|
+
/**
|
|
120
|
+
* Texture update strategy for dynamic sources.
|
|
121
|
+
*/
|
|
122
|
+
export type TextureUpdateMode = 'once' | 'onInvalidate' | 'perFrame';
|
|
123
|
+
/**
|
|
124
|
+
* Per-texture sampling and upload configuration.
|
|
125
|
+
*/
|
|
126
|
+
export interface TextureDefinition {
|
|
127
|
+
/**
|
|
128
|
+
* Default/initial texture value for this slot.
|
|
129
|
+
*/
|
|
130
|
+
source?: TextureValue;
|
|
131
|
+
/**
|
|
132
|
+
* Source color space used for format/decode decisions.
|
|
133
|
+
*/
|
|
134
|
+
colorSpace?: 'srgb' | 'linear';
|
|
135
|
+
/**
|
|
136
|
+
* Vertical flip during upload.
|
|
137
|
+
*/
|
|
138
|
+
flipY?: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Enables mipmap generation.
|
|
141
|
+
*/
|
|
142
|
+
generateMipmaps?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Enables premultiplied-alpha upload mode.
|
|
145
|
+
*/
|
|
146
|
+
premultipliedAlpha?: boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Dynamic source update strategy.
|
|
149
|
+
*/
|
|
150
|
+
update?: TextureUpdateMode;
|
|
151
|
+
/**
|
|
152
|
+
* Sampler anisotropy level (clamped internally).
|
|
153
|
+
*/
|
|
154
|
+
anisotropy?: number;
|
|
155
|
+
/**
|
|
156
|
+
* Min/mag filter mode.
|
|
157
|
+
*/
|
|
158
|
+
filter?: GPUFilterMode;
|
|
159
|
+
/**
|
|
160
|
+
* U axis address mode.
|
|
161
|
+
*/
|
|
162
|
+
addressModeU?: GPUAddressMode;
|
|
163
|
+
/**
|
|
164
|
+
* V axis address mode.
|
|
165
|
+
*/
|
|
166
|
+
addressModeV?: GPUAddressMode;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Texture definition map keyed by uniform-compatible texture names.
|
|
170
|
+
*/
|
|
171
|
+
export type TextureDefinitionMap = Record<string, TextureDefinition>;
|
|
172
|
+
/**
|
|
173
|
+
* Runtime texture value map keyed by texture uniform names.
|
|
174
|
+
*/
|
|
175
|
+
export type TextureMap = Record<string, TextureValue>;
|
|
176
|
+
/**
|
|
177
|
+
* Output color space requested for final canvas presentation.
|
|
178
|
+
*/
|
|
179
|
+
export type OutputColorSpace = 'srgb' | 'linear';
|
|
180
|
+
/**
|
|
181
|
+
* Declarative render target definition for post-processing or multi-pass pipelines.
|
|
182
|
+
*/
|
|
183
|
+
export interface RenderTargetDefinition {
|
|
184
|
+
/**
|
|
185
|
+
* Explicit target width. If omitted, derived from `scale * canvasWidth`.
|
|
186
|
+
*/
|
|
187
|
+
width?: number;
|
|
188
|
+
/**
|
|
189
|
+
* Explicit target height. If omitted, derived from `scale * canvasHeight`.
|
|
190
|
+
*/
|
|
191
|
+
height?: number;
|
|
192
|
+
/**
|
|
193
|
+
* Canvas-relative scale for implicit dimensions.
|
|
194
|
+
*/
|
|
195
|
+
scale?: number;
|
|
196
|
+
/**
|
|
197
|
+
* Texture format override.
|
|
198
|
+
*/
|
|
199
|
+
format?: GPUTextureFormat;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Runtime render target handle exposed to render passes.
|
|
203
|
+
*/
|
|
204
|
+
export interface RenderTarget {
|
|
205
|
+
/**
|
|
206
|
+
* Backing GPU texture.
|
|
207
|
+
*/
|
|
208
|
+
texture: GPUTexture;
|
|
209
|
+
/**
|
|
210
|
+
* Default texture view.
|
|
211
|
+
*/
|
|
212
|
+
view: GPUTextureView;
|
|
213
|
+
/**
|
|
214
|
+
* Width in pixels.
|
|
215
|
+
*/
|
|
216
|
+
width: number;
|
|
217
|
+
/**
|
|
218
|
+
* Height in pixels.
|
|
219
|
+
*/
|
|
220
|
+
height: number;
|
|
221
|
+
/**
|
|
222
|
+
* GPU texture format.
|
|
223
|
+
*/
|
|
224
|
+
format: GPUTextureFormat;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Named render target definitions keyed by output slot names.
|
|
228
|
+
*/
|
|
229
|
+
export type RenderTargetDefinitionMap = Record<string, RenderTargetDefinition>;
|
|
230
|
+
/**
|
|
231
|
+
* User-defined render slot name (mapped to `renderTargets` keys).
|
|
232
|
+
*/
|
|
233
|
+
export type RenderPassNamedSlot = string & {};
|
|
234
|
+
/**
|
|
235
|
+
* Built-in render graph source slots.
|
|
236
|
+
*/
|
|
237
|
+
export type RenderPassInputSlot = 'source' | 'target' | RenderPassNamedSlot;
|
|
238
|
+
/**
|
|
239
|
+
* Built-in render graph output slots.
|
|
240
|
+
*/
|
|
241
|
+
export type RenderPassOutputSlot = 'source' | 'target' | 'canvas' | RenderPassNamedSlot;
|
|
242
|
+
/**
|
|
243
|
+
* Per-pass render flags controlling attachment behavior.
|
|
244
|
+
*/
|
|
245
|
+
export interface RenderPassFlags {
|
|
246
|
+
/**
|
|
247
|
+
* Clears output attachment before drawing.
|
|
248
|
+
*/
|
|
249
|
+
clear?: boolean;
|
|
250
|
+
/**
|
|
251
|
+
* Clear color used when {@link clear} is enabled.
|
|
252
|
+
*/
|
|
253
|
+
clearColor?: [number, number, number, number];
|
|
254
|
+
/**
|
|
255
|
+
* Stores output attachment contents after rendering.
|
|
256
|
+
*/
|
|
257
|
+
preserve?: boolean;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Execution context passed to formal render passes.
|
|
261
|
+
*/
|
|
262
|
+
export interface RenderPassContext extends Required<RenderPassFlags> {
|
|
263
|
+
/**
|
|
264
|
+
* Active GPU device.
|
|
265
|
+
*/
|
|
266
|
+
device: GPUDevice;
|
|
267
|
+
/**
|
|
268
|
+
* Shared command encoder for this frame.
|
|
269
|
+
*/
|
|
270
|
+
commandEncoder: GPUCommandEncoder;
|
|
271
|
+
/**
|
|
272
|
+
* Current source slot surface.
|
|
273
|
+
*/
|
|
274
|
+
source: RenderTarget;
|
|
275
|
+
/**
|
|
276
|
+
* Current ping-pong target slot surface.
|
|
277
|
+
*/
|
|
278
|
+
target: RenderTarget;
|
|
279
|
+
/**
|
|
280
|
+
* Current frame canvas surface.
|
|
281
|
+
*/
|
|
282
|
+
canvas: RenderTarget;
|
|
283
|
+
/**
|
|
284
|
+
* Resolved pass input surface.
|
|
285
|
+
*/
|
|
286
|
+
input: RenderTarget;
|
|
287
|
+
/**
|
|
288
|
+
* Resolved pass output surface.
|
|
289
|
+
*/
|
|
290
|
+
output: RenderTarget;
|
|
291
|
+
/**
|
|
292
|
+
* Runtime render targets snapshot.
|
|
293
|
+
*/
|
|
294
|
+
targets: Readonly<Record<string, RenderTarget>>;
|
|
295
|
+
/**
|
|
296
|
+
* Frame timestamp in seconds.
|
|
297
|
+
*/
|
|
298
|
+
time: number;
|
|
299
|
+
/**
|
|
300
|
+
* Frame delta in seconds.
|
|
301
|
+
*/
|
|
302
|
+
delta: number;
|
|
303
|
+
/**
|
|
304
|
+
* Frame width in pixels.
|
|
305
|
+
*/
|
|
306
|
+
width: number;
|
|
307
|
+
/**
|
|
308
|
+
* Frame height in pixels.
|
|
309
|
+
*/
|
|
310
|
+
height: number;
|
|
311
|
+
/**
|
|
312
|
+
* Begins a color render pass targeting current output (or provided view).
|
|
313
|
+
*/
|
|
314
|
+
beginRenderPass: (options?: {
|
|
315
|
+
view?: GPUTextureView;
|
|
316
|
+
clear?: boolean;
|
|
317
|
+
clearColor?: [number, number, number, number];
|
|
318
|
+
preserve?: boolean;
|
|
319
|
+
}) => GPURenderPassEncoder;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Formal render pass contract used by MotionGPU render graph.
|
|
323
|
+
*/
|
|
324
|
+
export interface RenderPass extends RenderPassFlags {
|
|
325
|
+
/**
|
|
326
|
+
* Enables/disables this pass without removing it from graph.
|
|
327
|
+
*/
|
|
328
|
+
enabled?: boolean;
|
|
329
|
+
/**
|
|
330
|
+
* Triggers source/target ping-pong swap after render.
|
|
331
|
+
*/
|
|
332
|
+
needsSwap?: boolean;
|
|
333
|
+
/**
|
|
334
|
+
* Input slot used by this pass.
|
|
335
|
+
*/
|
|
336
|
+
input?: RenderPassInputSlot;
|
|
337
|
+
/**
|
|
338
|
+
* Output slot written by this pass.
|
|
339
|
+
*/
|
|
340
|
+
output?: RenderPassOutputSlot;
|
|
341
|
+
/**
|
|
342
|
+
* Called on resize events (canvas size * DPR changes).
|
|
343
|
+
*/
|
|
344
|
+
setSize?: (width: number, height: number) => void;
|
|
345
|
+
/**
|
|
346
|
+
* Executes pass commands for current frame.
|
|
347
|
+
*/
|
|
348
|
+
render: (context: RenderPassContext) => void;
|
|
349
|
+
/**
|
|
350
|
+
* Releases pass-owned resources.
|
|
351
|
+
*/
|
|
352
|
+
dispose?: () => void;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Frame submission strategy for the scheduler.
|
|
356
|
+
*/
|
|
357
|
+
export type RenderMode = 'always' | 'on-demand' | 'manual';
|
|
358
|
+
/**
|
|
359
|
+
* Token identifying an invalidation source.
|
|
360
|
+
*/
|
|
361
|
+
export type FrameInvalidationToken = string | number | symbol;
|
|
362
|
+
/**
|
|
363
|
+
* Mutable per-frame state passed to frame callbacks.
|
|
364
|
+
*/
|
|
365
|
+
export interface FrameState {
|
|
366
|
+
/**
|
|
367
|
+
* Elapsed time in seconds.
|
|
368
|
+
*/
|
|
369
|
+
time: number;
|
|
370
|
+
/**
|
|
371
|
+
* Delta time in seconds.
|
|
372
|
+
*/
|
|
373
|
+
delta: number;
|
|
374
|
+
/**
|
|
375
|
+
* Sets a uniform value for current/next frame.
|
|
376
|
+
*/
|
|
377
|
+
setUniform: (name: string, value: UniformValue) => void;
|
|
378
|
+
/**
|
|
379
|
+
* Sets a texture value for current/next frame.
|
|
380
|
+
*/
|
|
381
|
+
setTexture: (name: string, value: TextureValue) => void;
|
|
382
|
+
/**
|
|
383
|
+
* Invalidates frame for on-demand rendering.
|
|
384
|
+
*/
|
|
385
|
+
invalidate: (token?: FrameInvalidationToken) => void;
|
|
386
|
+
/**
|
|
387
|
+
* Requests a single render in manual mode.
|
|
388
|
+
*/
|
|
389
|
+
advance: () => void;
|
|
390
|
+
/**
|
|
391
|
+
* Current render mode.
|
|
392
|
+
*/
|
|
393
|
+
renderMode: RenderMode;
|
|
394
|
+
/**
|
|
395
|
+
* Whether automatic rendering is enabled.
|
|
396
|
+
*/
|
|
397
|
+
autoRender: boolean;
|
|
398
|
+
/**
|
|
399
|
+
* Active canvas element.
|
|
400
|
+
*/
|
|
401
|
+
canvas: HTMLCanvasElement;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Internal renderer construction options resolved from material/context state.
|
|
405
|
+
*/
|
|
406
|
+
export interface RendererOptions {
|
|
407
|
+
/**
|
|
408
|
+
* Target canvas.
|
|
409
|
+
*/
|
|
410
|
+
canvas: HTMLCanvasElement;
|
|
411
|
+
/**
|
|
412
|
+
* Resolved fragment WGSL.
|
|
413
|
+
*/
|
|
414
|
+
fragmentWgsl: string;
|
|
415
|
+
/**
|
|
416
|
+
* 1-based source map for preprocessed fragment lines.
|
|
417
|
+
*/
|
|
418
|
+
fragmentLineMap: Array<{
|
|
419
|
+
kind: 'fragment' | 'include' | 'define';
|
|
420
|
+
line: number;
|
|
421
|
+
include?: string;
|
|
422
|
+
define?: string;
|
|
423
|
+
} | null>;
|
|
424
|
+
/**
|
|
425
|
+
* Original material fragment source before preprocessing.
|
|
426
|
+
*/
|
|
427
|
+
fragmentSource: string;
|
|
428
|
+
/**
|
|
429
|
+
* Include sources used while preprocessing material fragment.
|
|
430
|
+
*/
|
|
431
|
+
includeSources: Record<string, string>;
|
|
432
|
+
/**
|
|
433
|
+
* Deterministic define block source used for diagnostics mapping.
|
|
434
|
+
*/
|
|
435
|
+
defineBlockSource?: string;
|
|
436
|
+
/**
|
|
437
|
+
* Optional material callsite/source metadata for diagnostics.
|
|
438
|
+
*/
|
|
439
|
+
materialSource?: {
|
|
440
|
+
component?: string;
|
|
441
|
+
file?: string;
|
|
442
|
+
line?: number;
|
|
443
|
+
column?: number;
|
|
444
|
+
functionName?: string;
|
|
445
|
+
} | null;
|
|
446
|
+
/**
|
|
447
|
+
* Resolved uniform layout.
|
|
448
|
+
*/
|
|
449
|
+
uniformLayout: UniformLayout;
|
|
450
|
+
/**
|
|
451
|
+
* Sorted texture keys.
|
|
452
|
+
*/
|
|
453
|
+
textureKeys: string[];
|
|
454
|
+
/**
|
|
455
|
+
* Texture definitions by key.
|
|
456
|
+
*/
|
|
457
|
+
textureDefinitions: TextureDefinitionMap;
|
|
458
|
+
/**
|
|
459
|
+
* Static render target definitions.
|
|
460
|
+
*/
|
|
461
|
+
renderTargets?: RenderTargetDefinitionMap;
|
|
462
|
+
/**
|
|
463
|
+
* Static render passes.
|
|
464
|
+
*/
|
|
465
|
+
passes?: RenderPass[];
|
|
466
|
+
/**
|
|
467
|
+
* Dynamic render targets provider.
|
|
468
|
+
*/
|
|
469
|
+
getRenderTargets?: () => RenderTargetDefinitionMap | undefined;
|
|
470
|
+
/**
|
|
471
|
+
* Dynamic render passes provider.
|
|
472
|
+
*/
|
|
473
|
+
getPasses?: () => RenderPass[] | undefined;
|
|
474
|
+
/**
|
|
475
|
+
* Requested output color space.
|
|
476
|
+
*/
|
|
477
|
+
outputColorSpace: OutputColorSpace;
|
|
478
|
+
/**
|
|
479
|
+
* Function returning current clear color.
|
|
480
|
+
*/
|
|
481
|
+
getClearColor: () => [number, number, number, number];
|
|
482
|
+
/**
|
|
483
|
+
* Function returning current DPR multiplier.
|
|
484
|
+
*/
|
|
485
|
+
getDpr: () => number;
|
|
486
|
+
/**
|
|
487
|
+
* Optional adapter request options.
|
|
488
|
+
*/
|
|
489
|
+
adapterOptions?: GPURequestAdapterOptions | undefined;
|
|
490
|
+
/**
|
|
491
|
+
* Optional device descriptor.
|
|
492
|
+
*/
|
|
493
|
+
deviceDescriptor?: GPUDeviceDescriptor | undefined;
|
|
494
|
+
/**
|
|
495
|
+
* Internal test hook invoked when an initialization cleanup is registered.
|
|
496
|
+
*
|
|
497
|
+
* @internal
|
|
498
|
+
*/
|
|
499
|
+
__onInitializationCleanupRegistered?: (() => void) | undefined;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Low-level renderer lifecycle contract used by `FragCanvas`.
|
|
503
|
+
*/
|
|
504
|
+
export interface Renderer {
|
|
505
|
+
/**
|
|
506
|
+
* Renders one frame.
|
|
507
|
+
*/
|
|
508
|
+
render: (input: {
|
|
509
|
+
time: number;
|
|
510
|
+
delta: number;
|
|
511
|
+
renderMode: RenderMode;
|
|
512
|
+
uniforms: UniformMap;
|
|
513
|
+
textures: TextureMap;
|
|
514
|
+
canvasSize?: {
|
|
515
|
+
width: number;
|
|
516
|
+
height: number;
|
|
517
|
+
};
|
|
518
|
+
}) => void;
|
|
519
|
+
/**
|
|
520
|
+
* Releases GPU resources and subscriptions.
|
|
521
|
+
*/
|
|
522
|
+
destroy: () => void;
|
|
523
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { UniformLayout, UniformMap, UniformType, UniformValue } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Asserts that a name can be safely used as a WGSL identifier.
|
|
4
|
+
*
|
|
5
|
+
* @param name - Candidate uniform/texture name.
|
|
6
|
+
* @throws {Error} When the identifier is invalid.
|
|
7
|
+
*/
|
|
8
|
+
export declare function assertUniformName(name: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Infers the WGSL type tag from a runtime uniform value.
|
|
11
|
+
*
|
|
12
|
+
* @param value - Uniform input value.
|
|
13
|
+
* @returns Inferred uniform type.
|
|
14
|
+
* @throws {Error} When the value does not match any supported shape.
|
|
15
|
+
*/
|
|
16
|
+
export declare function inferUniformType(value: UniformValue): UniformType;
|
|
17
|
+
/**
|
|
18
|
+
* Validates that a uniform value matches an explicit uniform type declaration.
|
|
19
|
+
*
|
|
20
|
+
* @param type - Declared WGSL type.
|
|
21
|
+
* @param value - Runtime value to validate.
|
|
22
|
+
* @throws {Error} When the value shape is incompatible with the declared type.
|
|
23
|
+
*/
|
|
24
|
+
export declare function assertUniformValueForType(type: UniformType, value: UniformValue): void;
|
|
25
|
+
/**
|
|
26
|
+
* Resolves a deterministic packed uniform buffer layout from a uniform map.
|
|
27
|
+
*
|
|
28
|
+
* @param uniforms - Input uniform definitions.
|
|
29
|
+
* @returns Sorted layout with byte offsets and final buffer byte length.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveUniformLayout(uniforms: UniformMap): UniformLayout;
|
|
32
|
+
/**
|
|
33
|
+
* Packs uniforms into a newly allocated `Float32Array`.
|
|
34
|
+
*
|
|
35
|
+
* @param uniforms - Uniform values to pack.
|
|
36
|
+
* @param layout - Target layout definition.
|
|
37
|
+
* @returns Packed float buffer sized to `layout.byteLength`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function packUniforms(uniforms: UniformMap, layout: UniformLayout): Float32Array;
|
|
40
|
+
/**
|
|
41
|
+
* Packs uniforms into an existing output buffer and zeroes missing values.
|
|
42
|
+
*
|
|
43
|
+
* @param uniforms - Uniform values to pack.
|
|
44
|
+
* @param layout - Target layout metadata.
|
|
45
|
+
* @param data - Destination float buffer.
|
|
46
|
+
* @throws {Error} When `data` size does not match the required layout size.
|
|
47
|
+
*/
|
|
48
|
+
export declare function packUniformsInto(uniforms: UniformMap, layout: UniformLayout, data: Float32Array): void;
|