@stevejtrettel/shader-sandbox 0.1.2 → 0.1.4
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/README.md +259 -235
- package/bin/cli.js +106 -14
- package/dist-lib/app/App.d.ts +143 -15
- package/dist-lib/app/App.d.ts.map +1 -1
- package/dist-lib/app/App.js +1343 -108
- package/dist-lib/app/app.css +349 -24
- package/dist-lib/app/types.d.ts +48 -5
- package/dist-lib/app/types.d.ts.map +1 -1
- package/dist-lib/editor/EditorPanel.d.ts +2 -2
- package/dist-lib/editor/EditorPanel.d.ts.map +1 -1
- package/dist-lib/editor/EditorPanel.js +1 -1
- package/dist-lib/editor/editor-panel.css +55 -32
- package/dist-lib/editor/prism-editor.css +16 -16
- package/dist-lib/embed.js +1 -1
- package/dist-lib/engine/{ShadertoyEngine.d.ts → ShaderEngine.d.ts} +134 -10
- package/dist-lib/engine/ShaderEngine.d.ts.map +1 -0
- package/dist-lib/engine/ShaderEngine.js +1523 -0
- package/dist-lib/engine/glHelpers.d.ts +24 -0
- package/dist-lib/engine/glHelpers.d.ts.map +1 -1
- package/dist-lib/engine/glHelpers.js +88 -0
- package/dist-lib/engine/std140.d.ts +47 -0
- package/dist-lib/engine/std140.d.ts.map +1 -0
- package/dist-lib/engine/std140.js +119 -0
- package/dist-lib/engine/types.d.ts +55 -5
- package/dist-lib/engine/types.d.ts.map +1 -1
- package/dist-lib/engine/types.js +1 -1
- package/dist-lib/index.d.ts +4 -3
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +2 -1
- package/dist-lib/layouts/SplitLayout.d.ts +2 -1
- package/dist-lib/layouts/SplitLayout.d.ts.map +1 -1
- package/dist-lib/layouts/SplitLayout.js +3 -0
- package/dist-lib/layouts/TabbedLayout.d.ts.map +1 -1
- package/dist-lib/layouts/UILayout.d.ts +55 -0
- package/dist-lib/layouts/UILayout.d.ts.map +1 -0
- package/dist-lib/layouts/UILayout.js +147 -0
- package/dist-lib/layouts/default.css +2 -2
- package/dist-lib/layouts/index.d.ts +11 -1
- package/dist-lib/layouts/index.d.ts.map +1 -1
- package/dist-lib/layouts/index.js +17 -1
- package/dist-lib/layouts/split.css +33 -31
- package/dist-lib/layouts/tabbed.css +127 -74
- package/dist-lib/layouts/types.d.ts +14 -3
- package/dist-lib/layouts/types.d.ts.map +1 -1
- package/dist-lib/main.js +33 -0
- package/dist-lib/project/configHelpers.d.ts +45 -0
- package/dist-lib/project/configHelpers.d.ts.map +1 -0
- package/dist-lib/project/configHelpers.js +196 -0
- package/dist-lib/project/generatedLoader.d.ts +2 -2
- package/dist-lib/project/generatedLoader.d.ts.map +1 -1
- package/dist-lib/project/generatedLoader.js +23 -5
- package/dist-lib/project/loadProject.d.ts +6 -6
- package/dist-lib/project/loadProject.d.ts.map +1 -1
- package/dist-lib/project/loadProject.js +396 -144
- package/dist-lib/project/loaderHelper.d.ts +4 -4
- package/dist-lib/project/loaderHelper.d.ts.map +1 -1
- package/dist-lib/project/loaderHelper.js +278 -116
- package/dist-lib/project/types.d.ts +292 -13
- package/dist-lib/project/types.d.ts.map +1 -1
- package/dist-lib/project/types.js +13 -1
- package/dist-lib/styles/base.css +5 -1
- package/dist-lib/uniforms/UniformControls.d.ts +60 -0
- package/dist-lib/uniforms/UniformControls.d.ts.map +1 -0
- package/dist-lib/uniforms/UniformControls.js +518 -0
- package/dist-lib/uniforms/UniformStore.d.ts +74 -0
- package/dist-lib/uniforms/UniformStore.d.ts.map +1 -0
- package/dist-lib/uniforms/UniformStore.js +145 -0
- package/dist-lib/uniforms/UniformsPanel.d.ts +53 -0
- package/dist-lib/uniforms/UniformsPanel.d.ts.map +1 -0
- package/dist-lib/uniforms/UniformsPanel.js +124 -0
- package/dist-lib/uniforms/index.d.ts +11 -0
- package/dist-lib/uniforms/index.d.ts.map +1 -0
- package/dist-lib/uniforms/index.js +8 -0
- package/package.json +16 -1
- package/src/app/App.ts +1469 -126
- package/src/app/app.css +349 -24
- package/src/app/types.ts +53 -5
- package/src/editor/EditorPanel.ts +5 -5
- package/src/editor/editor-panel.css +55 -32
- package/src/editor/prism-editor.css +16 -16
- package/src/embed.ts +1 -1
- package/src/engine/ShaderEngine.ts +1934 -0
- package/src/engine/glHelpers.ts +117 -0
- package/src/engine/std140.ts +136 -0
- package/src/engine/types.ts +69 -5
- package/src/index.ts +4 -3
- package/src/layouts/SplitLayout.ts +8 -3
- package/src/layouts/TabbedLayout.ts +3 -3
- package/src/layouts/UILayout.ts +185 -0
- package/src/layouts/default.css +2 -2
- package/src/layouts/index.ts +20 -1
- package/src/layouts/split.css +33 -31
- package/src/layouts/tabbed.css +127 -74
- package/src/layouts/types.ts +19 -3
- package/src/layouts/ui.css +289 -0
- package/src/main.ts +39 -1
- package/src/project/configHelpers.ts +225 -0
- package/src/project/generatedLoader.ts +27 -6
- package/src/project/loadProject.ts +459 -173
- package/src/project/loaderHelper.ts +377 -130
- package/src/project/types.ts +360 -14
- package/src/styles/base.css +5 -1
- package/src/styles/theme.css +292 -0
- package/src/uniforms/UniformControls.ts +660 -0
- package/src/uniforms/UniformStore.ts +166 -0
- package/src/uniforms/UniformsPanel.ts +163 -0
- package/src/uniforms/index.ts +13 -0
- package/src/uniforms/uniform-controls.css +342 -0
- package/src/uniforms/uniforms-panel.css +277 -0
- package/templates/shaders/example-buffer/config.json +1 -0
- package/dist-lib/engine/ShadertoyEngine.d.ts.map +0 -1
- package/dist-lib/engine/ShadertoyEngine.js +0 -704
- package/src/engine/ShadertoyEngine.ts +0 -929
|
@@ -5,6 +5,133 @@
|
|
|
5
5
|
* Based on docs/project-spec.md
|
|
6
6
|
*/
|
|
7
7
|
export type PassName = 'Image' | 'BufferA' | 'BufferB' | 'BufferC' | 'BufferD';
|
|
8
|
+
/**
|
|
9
|
+
* Theme mode for the shader viewer.
|
|
10
|
+
* - 'light': Always use light theme
|
|
11
|
+
* - 'dark': Always use dark theme
|
|
12
|
+
* - 'system': Follow OS preference (prefers-color-scheme)
|
|
13
|
+
*/
|
|
14
|
+
export type ThemeMode = 'light' | 'dark' | 'system';
|
|
15
|
+
/**
|
|
16
|
+
* Supported uniform types for user-defined controls.
|
|
17
|
+
* For now, we start with float only. More types will be added later.
|
|
18
|
+
*/
|
|
19
|
+
export type UniformType = 'float' | 'int' | 'bool' | 'vec2' | 'vec3' | 'vec4';
|
|
20
|
+
/**
|
|
21
|
+
* Base uniform definition shared by all types.
|
|
22
|
+
*/
|
|
23
|
+
interface UniformDefinitionBase {
|
|
24
|
+
/** Display label (defaults to uniform name if not provided) */
|
|
25
|
+
label?: string;
|
|
26
|
+
/** If true, uniform is declared but has no UI control (for script-only uniforms) */
|
|
27
|
+
hidden?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Float uniform with slider control.
|
|
31
|
+
*/
|
|
32
|
+
export interface FloatUniformDefinition extends UniformDefinitionBase {
|
|
33
|
+
type: 'float';
|
|
34
|
+
value: number;
|
|
35
|
+
min?: number;
|
|
36
|
+
max?: number;
|
|
37
|
+
step?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Integer uniform with discrete slider.
|
|
41
|
+
*/
|
|
42
|
+
export interface IntUniformDefinition extends UniformDefinitionBase {
|
|
43
|
+
type: 'int';
|
|
44
|
+
value: number;
|
|
45
|
+
min?: number;
|
|
46
|
+
max?: number;
|
|
47
|
+
step?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Boolean uniform with toggle control.
|
|
51
|
+
*/
|
|
52
|
+
export interface BoolUniformDefinition extends UniformDefinitionBase {
|
|
53
|
+
type: 'bool';
|
|
54
|
+
value: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Vec2 uniform (2D position picker).
|
|
58
|
+
*/
|
|
59
|
+
export interface Vec2UniformDefinition extends UniformDefinitionBase {
|
|
60
|
+
type: 'vec2';
|
|
61
|
+
value: [number, number];
|
|
62
|
+
min?: [number, number];
|
|
63
|
+
max?: [number, number];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Vec3 uniform (color picker or 3D value).
|
|
67
|
+
*/
|
|
68
|
+
export interface Vec3UniformDefinition extends UniformDefinitionBase {
|
|
69
|
+
type: 'vec3';
|
|
70
|
+
value: [number, number, number];
|
|
71
|
+
/** If true, use color picker UI. Otherwise use 3 sliders. */
|
|
72
|
+
color?: boolean;
|
|
73
|
+
/** Per-component min (default: [0, 0, 0]) */
|
|
74
|
+
min?: [number, number, number];
|
|
75
|
+
/** Per-component max (default: [1, 1, 1]) */
|
|
76
|
+
max?: [number, number, number];
|
|
77
|
+
/** Per-component step (default: [0.01, 0.01, 0.01]) */
|
|
78
|
+
step?: [number, number, number];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Vec4 uniform (color with alpha or 4D value).
|
|
82
|
+
*/
|
|
83
|
+
export interface Vec4UniformDefinition extends UniformDefinitionBase {
|
|
84
|
+
type: 'vec4';
|
|
85
|
+
value: [number, number, number, number];
|
|
86
|
+
/** If true, use color picker with alpha. Otherwise use 4 sliders. */
|
|
87
|
+
color?: boolean;
|
|
88
|
+
/** Per-component min (default: [0, 0, 0, 0]) */
|
|
89
|
+
min?: [number, number, number, number];
|
|
90
|
+
/** Per-component max (default: [1, 1, 1, 1]) */
|
|
91
|
+
max?: [number, number, number, number];
|
|
92
|
+
/** Per-component step (default: [0.01, 0.01, 0.01, 0.01]) */
|
|
93
|
+
step?: [number, number, number, number];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Array uniform types supported in UBOs.
|
|
97
|
+
*/
|
|
98
|
+
export type ArrayUniformType = 'float' | 'vec2' | 'vec3' | 'vec4' | 'mat3' | 'mat4';
|
|
99
|
+
/**
|
|
100
|
+
* Array uniform backed by a Uniform Buffer Object (UBO).
|
|
101
|
+
* Data is provided from JavaScript via setUniformValue().
|
|
102
|
+
* The engine auto-injects the layout(std140) uniform block into the shader.
|
|
103
|
+
*/
|
|
104
|
+
export interface ArrayUniformDefinition extends UniformDefinitionBase {
|
|
105
|
+
type: ArrayUniformType;
|
|
106
|
+
/** Number of elements in the array */
|
|
107
|
+
count: number;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Type guard: returns true if a uniform definition is an array uniform (has count).
|
|
111
|
+
*/
|
|
112
|
+
export declare function isArrayUniform(def: UniformDefinition): def is ArrayUniformDefinition;
|
|
113
|
+
/**
|
|
114
|
+
* Returns true if a uniform should have a UI control.
|
|
115
|
+
* Excludes array uniforms (UBOs) and hidden uniforms (script-only).
|
|
116
|
+
*/
|
|
117
|
+
export declare function hasUIControl(def: UniformDefinition): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Union of all uniform definition types.
|
|
120
|
+
*/
|
|
121
|
+
export type UniformDefinition = FloatUniformDefinition | IntUniformDefinition | BoolUniformDefinition | Vec2UniformDefinition | Vec3UniformDefinition | Vec4UniformDefinition | ArrayUniformDefinition;
|
|
122
|
+
/**
|
|
123
|
+
* Map of uniform names to their definitions.
|
|
124
|
+
*/
|
|
125
|
+
export type UniformDefinitions = Record<string, UniformDefinition>;
|
|
126
|
+
/**
|
|
127
|
+
* A single uniform value at runtime.
|
|
128
|
+
*/
|
|
129
|
+
export type UniformValue = number | boolean | number[] | Float32Array;
|
|
130
|
+
/**
|
|
131
|
+
* Runtime uniform values (current state).
|
|
132
|
+
* Keys are uniform names, values are the current value.
|
|
133
|
+
*/
|
|
134
|
+
export type UniformValues = Record<string, UniformValue>;
|
|
8
135
|
/**
|
|
9
136
|
* Reference to another buffer pass.
|
|
10
137
|
* By default, reads the previous frame (safe for all cases).
|
|
@@ -29,18 +156,48 @@ export interface ChannelJSONTexture {
|
|
|
29
156
|
export interface ChannelJSONKeyboard {
|
|
30
157
|
keyboard: true;
|
|
31
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Reference to audio input (microphone).
|
|
161
|
+
* Provides a 512x2 texture: row 0 = FFT spectrum, row 1 = waveform.
|
|
162
|
+
*/
|
|
163
|
+
export interface ChannelJSONAudio {
|
|
164
|
+
audio: true;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Reference to webcam input.
|
|
168
|
+
*/
|
|
169
|
+
export interface ChannelJSONWebcam {
|
|
170
|
+
webcam: true;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Reference to a video file.
|
|
174
|
+
*/
|
|
175
|
+
export interface ChannelJSONVideo {
|
|
176
|
+
video: string;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Reference to a script-uploaded texture.
|
|
180
|
+
* The texture is created/updated at runtime via engine.updateTexture().
|
|
181
|
+
*/
|
|
182
|
+
export interface ChannelJSONScript {
|
|
183
|
+
script: string;
|
|
184
|
+
}
|
|
32
185
|
/**
|
|
33
186
|
* Union type for channel sources in JSON config (object form).
|
|
34
187
|
*/
|
|
35
|
-
export type ChannelJSONObject = ChannelJSONBuffer | ChannelJSONTexture | ChannelJSONKeyboard;
|
|
188
|
+
export type ChannelJSONObject = ChannelJSONBuffer | ChannelJSONTexture | ChannelJSONKeyboard | ChannelJSONAudio | ChannelJSONWebcam | ChannelJSONVideo | ChannelJSONScript;
|
|
36
189
|
/**
|
|
37
190
|
* Channel value in simplified config format.
|
|
38
191
|
* Can be a string shorthand or full object:
|
|
39
192
|
* - "BufferA", "BufferB", etc. → buffer reference
|
|
40
193
|
* - "keyboard" → keyboard input
|
|
194
|
+
* - "audio" → microphone audio input
|
|
195
|
+
* - "webcam" → webcam video input
|
|
41
196
|
* - "photo.jpg" (with extension) → texture file
|
|
42
197
|
* - { buffer: "BufferA" } → explicit buffer with options
|
|
43
198
|
* - { texture: "photo.jpg", filter: "nearest" } → texture with options
|
|
199
|
+
* - { video: "clip.mp4" } → video file
|
|
200
|
+
* - { script: "myData" } → script-uploaded texture
|
|
44
201
|
*/
|
|
45
202
|
export type ChannelValue = string | ChannelJSONObject;
|
|
46
203
|
/**
|
|
@@ -81,18 +238,71 @@ export interface PassConfigSimplified {
|
|
|
81
238
|
* }
|
|
82
239
|
*/
|
|
83
240
|
export interface ShadertoyConfig {
|
|
241
|
+
/** Must be 'shadertoy' to use Shadertoy-compatible iChannel mode. */
|
|
242
|
+
mode: 'shadertoy';
|
|
243
|
+
title?: string;
|
|
244
|
+
author?: string;
|
|
245
|
+
description?: string;
|
|
246
|
+
layout?: 'fullscreen' | 'default' | 'split' | 'tabbed';
|
|
247
|
+
theme?: ThemeMode;
|
|
248
|
+
controls?: boolean;
|
|
249
|
+
common?: string;
|
|
250
|
+
/** Start paused on first frame (default: false) */
|
|
251
|
+
startPaused?: boolean;
|
|
252
|
+
/** Pixel ratio multiplier (default: window.devicePixelRatio). Use <1 for lower resolution. */
|
|
253
|
+
pixelRatio?: number;
|
|
254
|
+
Image?: PassConfigSimplified;
|
|
255
|
+
BufferA?: PassConfigSimplified;
|
|
256
|
+
BufferB?: PassConfigSimplified;
|
|
257
|
+
BufferC?: PassConfigSimplified;
|
|
258
|
+
BufferD?: PassConfigSimplified;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Per-buffer configuration in standard mode.
|
|
262
|
+
*/
|
|
263
|
+
export interface StandardBufferConfig {
|
|
264
|
+
filter?: 'nearest' | 'linear';
|
|
265
|
+
wrap?: 'clamp' | 'repeat';
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Standard mode config format.
|
|
269
|
+
* Buffers and textures are available everywhere by name.
|
|
270
|
+
* Also supports pass-level configs (Image, BufferA, etc.) for simple cases
|
|
271
|
+
* where named buffers aren't needed.
|
|
272
|
+
*/
|
|
273
|
+
export interface StandardConfig {
|
|
274
|
+
mode?: 'standard';
|
|
84
275
|
title?: string;
|
|
85
276
|
author?: string;
|
|
86
277
|
description?: string;
|
|
87
278
|
layout?: 'fullscreen' | 'default' | 'split' | 'tabbed';
|
|
279
|
+
theme?: ThemeMode;
|
|
88
280
|
controls?: boolean;
|
|
89
281
|
common?: string;
|
|
282
|
+
startPaused?: boolean;
|
|
283
|
+
pixelRatio?: number;
|
|
284
|
+
uniforms?: UniformDefinitions;
|
|
285
|
+
/**
|
|
286
|
+
* Named buffers (framebuffers with ping-pong).
|
|
287
|
+
* Array shorthand ["velocity"] normalizes to { "velocity": {} }.
|
|
288
|
+
* Max 4 buffers (maps to BufferA-D internally).
|
|
289
|
+
*/
|
|
290
|
+
buffers?: string[] | Record<string, StandardBufferConfig>;
|
|
291
|
+
/**
|
|
292
|
+
* Named textures available in all passes.
|
|
293
|
+
* Value is a file path or special source: "keyboard", "audio", "webcam".
|
|
294
|
+
*/
|
|
295
|
+
textures?: Record<string, string>;
|
|
90
296
|
Image?: PassConfigSimplified;
|
|
91
297
|
BufferA?: PassConfigSimplified;
|
|
92
298
|
BufferB?: PassConfigSimplified;
|
|
93
299
|
BufferC?: PassConfigSimplified;
|
|
94
300
|
BufferD?: PassConfigSimplified;
|
|
95
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Union of all config formats that can appear in config.json.
|
|
304
|
+
*/
|
|
305
|
+
export type ProjectConfig = ShadertoyConfig | StandardConfig;
|
|
96
306
|
/**
|
|
97
307
|
* Normalized channel source for engine consumption.
|
|
98
308
|
* All channels are represented as one of these discriminated union variants.
|
|
@@ -109,6 +319,16 @@ export type ChannelSource = {
|
|
|
109
319
|
cubemap: boolean;
|
|
110
320
|
} | {
|
|
111
321
|
kind: 'keyboard';
|
|
322
|
+
} | {
|
|
323
|
+
kind: 'audio';
|
|
324
|
+
} | {
|
|
325
|
+
kind: 'webcam';
|
|
326
|
+
} | {
|
|
327
|
+
kind: 'video';
|
|
328
|
+
src: string;
|
|
329
|
+
} | {
|
|
330
|
+
kind: 'script';
|
|
331
|
+
name: string;
|
|
112
332
|
};
|
|
113
333
|
/**
|
|
114
334
|
* Exactly 4 channels (iChannel0-3), matching Shadertoy's fixed channel count.
|
|
@@ -118,7 +338,7 @@ export type Channels = [ChannelSource, ChannelSource, ChannelSource, ChannelSour
|
|
|
118
338
|
* External 2D texture loaded from image file.
|
|
119
339
|
* Textures are deduplicated by (source, filter, wrap) tuple.
|
|
120
340
|
*/
|
|
121
|
-
export interface
|
|
341
|
+
export interface ShaderTexture2D {
|
|
122
342
|
name: string;
|
|
123
343
|
filename?: string;
|
|
124
344
|
source: string;
|
|
@@ -128,22 +348,24 @@ export interface ShadertoyTexture2D {
|
|
|
128
348
|
/**
|
|
129
349
|
* A single shader pass in the rendering pipeline.
|
|
130
350
|
*/
|
|
131
|
-
export interface
|
|
351
|
+
export interface ShaderPass {
|
|
132
352
|
name: PassName;
|
|
133
353
|
glslSource: string;
|
|
134
354
|
channels: Channels;
|
|
355
|
+
/** Named samplers (standard mode). Maps sampler name → source. */
|
|
356
|
+
namedSamplers?: Map<string, ChannelSource>;
|
|
135
357
|
}
|
|
136
358
|
/**
|
|
137
359
|
* Project metadata (title, author, description).
|
|
138
360
|
*/
|
|
139
|
-
export interface
|
|
361
|
+
export interface ShaderMeta {
|
|
140
362
|
title: string;
|
|
141
363
|
author: string | null;
|
|
142
364
|
description: string | null;
|
|
143
365
|
}
|
|
144
366
|
/**
|
|
145
367
|
* Complete in-memory representation of a Shadertoy project.
|
|
146
|
-
* Produced by loadProject() and consumed by
|
|
368
|
+
* Produced by loadProject() and consumed by ShaderEngine.
|
|
147
369
|
*
|
|
148
370
|
* Guarantees:
|
|
149
371
|
* - passes.Image always exists
|
|
@@ -151,7 +373,12 @@ export interface ShadertoyMeta {
|
|
|
151
373
|
* - Textures are deduplicated
|
|
152
374
|
* - All paths resolved and GLSL loaded
|
|
153
375
|
*/
|
|
154
|
-
export interface
|
|
376
|
+
export interface ShaderProject {
|
|
377
|
+
/**
|
|
378
|
+
* Project mode. 'shadertoy' uses iChannel0-3, 'standard' uses named samplers.
|
|
379
|
+
* Defaults to 'standard' if not specified.
|
|
380
|
+
*/
|
|
381
|
+
mode: 'shadertoy' | 'standard';
|
|
155
382
|
/**
|
|
156
383
|
* Project root directory path.
|
|
157
384
|
*/
|
|
@@ -159,15 +386,31 @@ export interface ShadertoyProject {
|
|
|
159
386
|
/**
|
|
160
387
|
* Project metadata.
|
|
161
388
|
*/
|
|
162
|
-
meta:
|
|
389
|
+
meta: ShaderMeta;
|
|
163
390
|
/**
|
|
164
391
|
* Layout mode for the shader viewer.
|
|
165
392
|
*/
|
|
166
393
|
layout: 'fullscreen' | 'default' | 'split' | 'tabbed';
|
|
394
|
+
/**
|
|
395
|
+
* Theme mode for the shader viewer.
|
|
396
|
+
* Defaults to 'light' if not specified.
|
|
397
|
+
*/
|
|
398
|
+
theme: ThemeMode;
|
|
167
399
|
/**
|
|
168
400
|
* Whether to show playback controls (play/pause, reset).
|
|
169
401
|
*/
|
|
170
402
|
controls: boolean;
|
|
403
|
+
/**
|
|
404
|
+
* Whether to start paused on first frame.
|
|
405
|
+
* Defaults to false.
|
|
406
|
+
*/
|
|
407
|
+
startPaused: boolean;
|
|
408
|
+
/**
|
|
409
|
+
* Pixel ratio for resolution scaling.
|
|
410
|
+
* Defaults to null (use window.devicePixelRatio).
|
|
411
|
+
* Use values < 1 for lower resolution (better performance).
|
|
412
|
+
*/
|
|
413
|
+
pixelRatio: number | null;
|
|
171
414
|
/**
|
|
172
415
|
* Common GLSL code (prepended to all shaders), or null if none.
|
|
173
416
|
*/
|
|
@@ -177,16 +420,52 @@ export interface ShadertoyProject {
|
|
|
177
420
|
* Image is always present, BufferA-D are optional.
|
|
178
421
|
*/
|
|
179
422
|
passes: {
|
|
180
|
-
Image:
|
|
181
|
-
BufferA?:
|
|
182
|
-
BufferB?:
|
|
183
|
-
BufferC?:
|
|
184
|
-
BufferD?:
|
|
423
|
+
Image: ShaderPass;
|
|
424
|
+
BufferA?: ShaderPass;
|
|
425
|
+
BufferB?: ShaderPass;
|
|
426
|
+
BufferC?: ShaderPass;
|
|
427
|
+
BufferD?: ShaderPass;
|
|
185
428
|
};
|
|
186
429
|
/**
|
|
187
430
|
* Deduplicated list of external textures.
|
|
188
431
|
* All ChannelSource with kind: 'texture2D' refer to names in this list.
|
|
189
432
|
*/
|
|
190
|
-
textures:
|
|
433
|
+
textures: ShaderTexture2D[];
|
|
434
|
+
/**
|
|
435
|
+
* Custom uniform definitions from config.
|
|
436
|
+
* Users must declare these uniforms in their shader code.
|
|
437
|
+
* Array uniforms (with count) are auto-declared by the engine.
|
|
438
|
+
*/
|
|
439
|
+
uniforms: UniformDefinitions;
|
|
440
|
+
/**
|
|
441
|
+
* Demo script hooks (from script.js in demo folder).
|
|
442
|
+
* Provides setup() and onFrame() callbacks for JS-driven computation.
|
|
443
|
+
*/
|
|
444
|
+
script: DemoScriptHooks | null;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* The API surface exposed to script.js hooks.
|
|
448
|
+
* A restricted view of the engine for safety and clarity.
|
|
449
|
+
*/
|
|
450
|
+
export interface ScriptEngineAPI {
|
|
451
|
+
setUniformValue(name: string, value: UniformValue): void;
|
|
452
|
+
getUniformValue(name: string): UniformValue | undefined;
|
|
453
|
+
/** Upload or update a named texture for use as a script channel. */
|
|
454
|
+
updateTexture(name: string, width: number, height: number, data: Uint8Array | Float32Array): void;
|
|
455
|
+
/** Read pixels from a buffer pass (previous frame). Returns RGBA Uint8Array. */
|
|
456
|
+
readPixels(passName: string, x: number, y: number, width: number, height: number): Uint8Array;
|
|
457
|
+
readonly width: number;
|
|
458
|
+
readonly height: number;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Hooks exported by a demo's script.js file.
|
|
462
|
+
* Both are optional — a script can export just setup, just onFrame, or both.
|
|
463
|
+
*/
|
|
464
|
+
export interface DemoScriptHooks {
|
|
465
|
+
/** Called once after engine init, before the first frame */
|
|
466
|
+
setup?: (engine: ScriptEngineAPI) => void;
|
|
467
|
+
/** Called every frame before shader execution */
|
|
468
|
+
onFrame?: (engine: ScriptEngineAPI, time: number, deltaTime: number, frame: number) => void;
|
|
191
469
|
}
|
|
470
|
+
export {};
|
|
192
471
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/project/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/project/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,4 +4,16 @@
|
|
|
4
4
|
* Pure TypeScript interfaces matching Shadertoy's mental model.
|
|
5
5
|
* Based on docs/project-spec.md
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Type guard: returns true if a uniform definition is an array uniform (has count).
|
|
9
|
+
*/
|
|
10
|
+
export function isArrayUniform(def) {
|
|
11
|
+
return 'count' in def && typeof def.count === 'number';
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if a uniform should have a UI control.
|
|
15
|
+
* Excludes array uniforms (UBOs) and hidden uniforms (script-only).
|
|
16
|
+
*/
|
|
17
|
+
export function hasUIControl(def) {
|
|
18
|
+
return !isArrayUniform(def) && !def.hidden;
|
|
19
|
+
}
|
package/dist-lib/styles/base.css
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Base Styles - Global resets and root element styling
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
+
@import './theme.css';
|
|
6
|
+
|
|
5
7
|
* {
|
|
6
8
|
margin: 0;
|
|
7
9
|
padding: 0;
|
|
@@ -16,7 +18,9 @@ html, body {
|
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
body {
|
|
19
|
-
background:
|
|
21
|
+
background: var(--bg-primary);
|
|
22
|
+
color: var(--text-primary);
|
|
23
|
+
transition: background-color 0.2s ease, color 0.2s ease;
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
#app {
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Uniform Controls Component
|
|
3
|
+
*
|
|
4
|
+
* Renders UI controls for custom uniforms defined in config.json.
|
|
5
|
+
* Supports: float, int, bool, vec2 (XY pad), vec3 (color picker or sliders), vec4 (sliders)
|
|
6
|
+
*/
|
|
7
|
+
import './uniform-controls.css';
|
|
8
|
+
import { UniformDefinitions, UniformValue, UniformValues } from '../project/types';
|
|
9
|
+
export interface UniformControlsOptions {
|
|
10
|
+
/** Container element to mount controls into */
|
|
11
|
+
container: HTMLElement;
|
|
12
|
+
/** Uniform definitions from project config */
|
|
13
|
+
uniforms: UniformDefinitions;
|
|
14
|
+
/** Callback when a uniform value changes */
|
|
15
|
+
onChange: (name: string, value: UniformValue) => void;
|
|
16
|
+
/** Initial values (optional, defaults to definition values) */
|
|
17
|
+
initialValues?: UniformValues;
|
|
18
|
+
}
|
|
19
|
+
export declare class UniformControls {
|
|
20
|
+
private container;
|
|
21
|
+
private uniforms;
|
|
22
|
+
private onChange;
|
|
23
|
+
private values;
|
|
24
|
+
private updaters;
|
|
25
|
+
private documentListeners;
|
|
26
|
+
constructor(opts: UniformControlsOptions);
|
|
27
|
+
/**
|
|
28
|
+
* Render all uniform controls.
|
|
29
|
+
*/
|
|
30
|
+
private render;
|
|
31
|
+
/**
|
|
32
|
+
* Create a control element for a uniform.
|
|
33
|
+
*/
|
|
34
|
+
private createControl;
|
|
35
|
+
private createSliderRow;
|
|
36
|
+
private createFloatSlider;
|
|
37
|
+
private createIntSlider;
|
|
38
|
+
private createBoolToggle;
|
|
39
|
+
private createVec2Pad;
|
|
40
|
+
private createColorPicker;
|
|
41
|
+
private createColorPicker4;
|
|
42
|
+
private createVecSliders;
|
|
43
|
+
private formatNumber;
|
|
44
|
+
private formatVec2;
|
|
45
|
+
private rgbToHex;
|
|
46
|
+
private hexToRgb;
|
|
47
|
+
/**
|
|
48
|
+
* Update a uniform value externally (e.g., from reset).
|
|
49
|
+
*/
|
|
50
|
+
setValue(name: string, value: UniformValue): void;
|
|
51
|
+
/**
|
|
52
|
+
* Reset all uniforms to their default values.
|
|
53
|
+
*/
|
|
54
|
+
resetToDefaults(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Destroy the controls and clean up.
|
|
57
|
+
*/
|
|
58
|
+
destroy(): void;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=UniformControls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniformControls.d.ts","sourceRoot":"","sources":["../../src/uniforms/UniformControls.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,wBAAwB,CAAC;AAEhC,OAAO,EACL,kBAAkB,EAElB,YAAY,EACZ,aAAa,EAQd,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,SAAS,EAAE,WAAW,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,+DAA+D;IAC/D,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAOD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAyD;IAGzE,OAAO,CAAC,iBAAiB,CAAuD;gBAEpE,IAAI,EAAE,sBAAsB;IAcxC;;OAEG;IACH,OAAO,CAAC,MAAM;IA2Cd;;OAEG;IACH,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,eAAe;IAqDvB,OAAO,CAAC,iBAAiB;IA6BzB,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,gBAAgB;IAgDxB,OAAO,CAAC,aAAa;IAkGrB,OAAO,CAAC,iBAAiB;IAgEzB,OAAO,CAAC,kBAAkB;IAuE1B,OAAO,CAAC,gBAAgB;IAkExB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,QAAQ;IAchB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAMjD;;OAEG;IACH,eAAe,IAAI,IAAI;IAQvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAShB"}
|