@stevejtrettel/shader-sandbox 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/README.md +391 -0
- package/bin/cli.js +389 -0
- package/dist-lib/app/App.d.ts +134 -0
- package/dist-lib/app/App.d.ts.map +1 -0
- package/dist-lib/app/App.js +570 -0
- package/dist-lib/app/types.d.ts +32 -0
- package/dist-lib/app/types.d.ts.map +1 -0
- package/dist-lib/app/types.js +6 -0
- package/dist-lib/editor/EditorPanel.d.ts +39 -0
- package/dist-lib/editor/EditorPanel.d.ts.map +1 -0
- package/dist-lib/editor/EditorPanel.js +274 -0
- package/dist-lib/editor/prism-editor.css +99 -0
- package/dist-lib/editor/prism-editor.d.ts +19 -0
- package/dist-lib/editor/prism-editor.d.ts.map +1 -0
- package/dist-lib/editor/prism-editor.js +96 -0
- package/dist-lib/embed.d.ts +17 -0
- package/dist-lib/embed.d.ts.map +1 -0
- package/dist-lib/embed.js +35 -0
- package/dist-lib/engine/ShadertoyEngine.d.ts +160 -0
- package/dist-lib/engine/ShadertoyEngine.d.ts.map +1 -0
- package/dist-lib/engine/ShadertoyEngine.js +704 -0
- package/dist-lib/engine/glHelpers.d.ts +79 -0
- package/dist-lib/engine/glHelpers.d.ts.map +1 -0
- package/dist-lib/engine/glHelpers.js +298 -0
- package/dist-lib/engine/types.d.ts +77 -0
- package/dist-lib/engine/types.d.ts.map +1 -0
- package/dist-lib/engine/types.js +7 -0
- package/dist-lib/index.d.ts +12 -0
- package/dist-lib/index.d.ts.map +1 -0
- package/dist-lib/index.js +9 -0
- package/dist-lib/layouts/DefaultLayout.d.ts +17 -0
- package/dist-lib/layouts/DefaultLayout.d.ts.map +1 -0
- package/dist-lib/layouts/DefaultLayout.js +27 -0
- package/dist-lib/layouts/FullscreenLayout.d.ts +17 -0
- package/dist-lib/layouts/FullscreenLayout.d.ts.map +1 -0
- package/dist-lib/layouts/FullscreenLayout.js +27 -0
- package/dist-lib/layouts/SplitLayout.d.ts +26 -0
- package/dist-lib/layouts/SplitLayout.d.ts.map +1 -0
- package/dist-lib/layouts/SplitLayout.js +61 -0
- package/dist-lib/layouts/TabbedLayout.d.ts +38 -0
- package/dist-lib/layouts/TabbedLayout.d.ts.map +1 -0
- package/dist-lib/layouts/TabbedLayout.js +305 -0
- package/dist-lib/layouts/index.d.ts +24 -0
- package/dist-lib/layouts/index.d.ts.map +1 -0
- package/dist-lib/layouts/index.js +36 -0
- package/dist-lib/layouts/split.css +196 -0
- package/dist-lib/layouts/tabbed.css +345 -0
- package/dist-lib/layouts/types.d.ts +48 -0
- package/dist-lib/layouts/types.d.ts.map +1 -0
- package/dist-lib/layouts/types.js +4 -0
- package/dist-lib/main.d.ts +15 -0
- package/dist-lib/main.d.ts.map +1 -0
- package/dist-lib/main.js +102 -0
- package/dist-lib/project/generatedLoader.d.ts +3 -0
- package/dist-lib/project/generatedLoader.d.ts.map +1 -0
- package/dist-lib/project/generatedLoader.js +17 -0
- package/dist-lib/project/loadProject.d.ts +22 -0
- package/dist-lib/project/loadProject.d.ts.map +1 -0
- package/dist-lib/project/loadProject.js +350 -0
- package/dist-lib/project/loaderHelper.d.ts +7 -0
- package/dist-lib/project/loaderHelper.d.ts.map +1 -0
- package/dist-lib/project/loaderHelper.js +240 -0
- package/dist-lib/project/types.d.ts +192 -0
- package/dist-lib/project/types.d.ts.map +1 -0
- package/dist-lib/project/types.js +7 -0
- package/dist-lib/styles/base.css +29 -0
- package/package.json +48 -0
- package/src/app/App.ts +699 -0
- package/src/app/app.css +208 -0
- package/src/app/types.ts +36 -0
- package/src/editor/EditorPanel.ts +340 -0
- package/src/editor/editor-panel.css +175 -0
- package/src/editor/prism-editor.css +99 -0
- package/src/editor/prism-editor.ts +124 -0
- package/src/embed.ts +55 -0
- package/src/engine/ShadertoyEngine.ts +929 -0
- package/src/engine/glHelpers.ts +432 -0
- package/src/engine/types.ts +118 -0
- package/src/index.ts +13 -0
- package/src/layouts/DefaultLayout.ts +40 -0
- package/src/layouts/FullscreenLayout.ts +40 -0
- package/src/layouts/SplitLayout.ts +81 -0
- package/src/layouts/TabbedLayout.ts +371 -0
- package/src/layouts/default.css +22 -0
- package/src/layouts/fullscreen.css +15 -0
- package/src/layouts/index.ts +44 -0
- package/src/layouts/split.css +196 -0
- package/src/layouts/tabbed.css +345 -0
- package/src/layouts/types.ts +58 -0
- package/src/main.ts +114 -0
- package/src/project/generatedLoader.ts +23 -0
- package/src/project/loadProject.ts +421 -0
- package/src/project/loaderHelper.ts +300 -0
- package/src/project/types.ts +243 -0
- package/src/styles/base.css +29 -0
- package/src/styles/embed.css +14 -0
- package/src/vite-env.d.ts +1 -0
- package/templates/index.html +28 -0
- package/templates/main.ts +126 -0
- package/templates/package.json +12 -0
- package/templates/shaders/example-buffer/bufferA.glsl +14 -0
- package/templates/shaders/example-buffer/config.json +10 -0
- package/templates/shaders/example-buffer/image.glsl +5 -0
- package/templates/shaders/example-gradient/config.json +4 -0
- package/templates/shaders/example-gradient/image.glsl +7 -0
- package/templates/vite.config.js +35 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine - Shadertoy Execution Engine
|
|
3
|
+
*
|
|
4
|
+
* Implements the execution model described in docs/engine-spec.md.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* - Own WebGL resources for passes (programs, VAOs, textures, FBOs).
|
|
8
|
+
* - Execute passes each frame in Shadertoy order: BufferA→BufferB→BufferC→BufferD→Image.
|
|
9
|
+
* - Bind Shadertoy uniforms (iResolution, iTime, iTimeDelta, iFrame, iMouse).
|
|
10
|
+
* - Bind iChannel0..3 according to ChannelSource.
|
|
11
|
+
*/
|
|
12
|
+
import { ShadertoyProject, PassName } from '../project/types';
|
|
13
|
+
import { EngineOptions, EngineStats } from './types';
|
|
14
|
+
export declare class ShadertoyEngine {
|
|
15
|
+
readonly project: ShadertoyProject;
|
|
16
|
+
readonly gl: WebGL2RenderingContext;
|
|
17
|
+
private _width;
|
|
18
|
+
private _height;
|
|
19
|
+
private _frame;
|
|
20
|
+
private _time;
|
|
21
|
+
private _lastStepTime;
|
|
22
|
+
private _passes;
|
|
23
|
+
private _textures;
|
|
24
|
+
private _keyboardTexture;
|
|
25
|
+
private _blackTexture;
|
|
26
|
+
private _keyStates;
|
|
27
|
+
private _toggleStates;
|
|
28
|
+
private _compilationErrors;
|
|
29
|
+
constructor(opts: EngineOptions);
|
|
30
|
+
get width(): number;
|
|
31
|
+
get height(): number;
|
|
32
|
+
get stats(): EngineStats;
|
|
33
|
+
/**
|
|
34
|
+
* Get shader compilation errors (if any occurred during initialization).
|
|
35
|
+
* Returns empty array if all shaders compiled successfully.
|
|
36
|
+
*/
|
|
37
|
+
getCompilationErrors(): Array<{
|
|
38
|
+
passName: PassName;
|
|
39
|
+
error: string;
|
|
40
|
+
source: string;
|
|
41
|
+
isFromCommon: boolean;
|
|
42
|
+
originalLine: number | null;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Check if there were any compilation errors.
|
|
46
|
+
*/
|
|
47
|
+
hasErrors(): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get the framebuffer for the Image pass (for presenting to screen).
|
|
50
|
+
*/
|
|
51
|
+
getImageFramebuffer(): WebGLFramebuffer | null;
|
|
52
|
+
/**
|
|
53
|
+
* Run one full frame of all passes.
|
|
54
|
+
*
|
|
55
|
+
* @param timeSeconds - global time in seconds (monotone, from App)
|
|
56
|
+
* @param mouse - iMouse as [x, y, clickX, clickY]
|
|
57
|
+
*/
|
|
58
|
+
step(timeSeconds: number, mouse: [number, number, number, number]): void;
|
|
59
|
+
/**
|
|
60
|
+
* Resize all internal render targets to new width/height.
|
|
61
|
+
* Does not reset time or frame count.
|
|
62
|
+
*/
|
|
63
|
+
resize(width: number, height: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* Reset frame counter and clear all render targets.
|
|
66
|
+
* Used for playback controls to restart shader from frame 0.
|
|
67
|
+
*/
|
|
68
|
+
reset(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Update keyboard key state (called from App on keydown/keyup events).
|
|
71
|
+
*
|
|
72
|
+
* @param keycode ASCII keycode (e.g., 65 for 'A')
|
|
73
|
+
* @param isDown true if key pressed, false if released
|
|
74
|
+
*/
|
|
75
|
+
updateKeyState(keycode: number, isDown: boolean): void;
|
|
76
|
+
/**
|
|
77
|
+
* Update keyboard texture with current key states.
|
|
78
|
+
* Should be called once per frame before rendering.
|
|
79
|
+
*/
|
|
80
|
+
updateKeyboardTexture(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Recompile a single pass with new GLSL source code.
|
|
83
|
+
* Used for live editing - keeps the old shader running if compilation fails.
|
|
84
|
+
*
|
|
85
|
+
* @param passName - Name of the pass to recompile ('Image', 'BufferA', etc.)
|
|
86
|
+
* @param newSource - New GLSL source code for the pass
|
|
87
|
+
* @returns Object with success status and error message if failed
|
|
88
|
+
*/
|
|
89
|
+
recompilePass(passName: PassName, newSource: string): {
|
|
90
|
+
success: boolean;
|
|
91
|
+
error?: string;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Recompile common.glsl and all passes that use it.
|
|
95
|
+
* Used for live editing of common code.
|
|
96
|
+
*
|
|
97
|
+
* @param newCommonSource - New GLSL source code for common.glsl
|
|
98
|
+
* @returns Object with success status and errors for each failed pass
|
|
99
|
+
*/
|
|
100
|
+
recompileCommon(newCommonSource: string): {
|
|
101
|
+
success: boolean;
|
|
102
|
+
errors: Array<{
|
|
103
|
+
passName: PassName;
|
|
104
|
+
error: string;
|
|
105
|
+
}>;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Delete all GL resources.
|
|
109
|
+
*/
|
|
110
|
+
dispose(): void;
|
|
111
|
+
private initExtensions;
|
|
112
|
+
/**
|
|
113
|
+
* Initialize external textures based on project.textures.
|
|
114
|
+
*
|
|
115
|
+
* NOTE: This function as written assumes that actual image loading
|
|
116
|
+
* is handled elsewhere. For now we just construct an empty array.
|
|
117
|
+
* In a real implementation, you would load images here.
|
|
118
|
+
*/
|
|
119
|
+
private initProjectTextures;
|
|
120
|
+
/**
|
|
121
|
+
* Compile shaders, create VAOs/FBOs/textures, and build RuntimePass array.
|
|
122
|
+
*/
|
|
123
|
+
private initRuntimePasses;
|
|
124
|
+
/**
|
|
125
|
+
* Calculate line number mappings for error reporting.
|
|
126
|
+
* Returns info about where common.glsl code lives in the compiled shader.
|
|
127
|
+
*/
|
|
128
|
+
private getLineMapping;
|
|
129
|
+
/**
|
|
130
|
+
* Build complete fragment shader source with Shadertoy boilerplate.
|
|
131
|
+
*
|
|
132
|
+
* @param userSource - The user's GLSL source code
|
|
133
|
+
* @param channels - Channel configuration for this pass (to detect cubemap textures)
|
|
134
|
+
*/
|
|
135
|
+
private buildFragmentShader;
|
|
136
|
+
/**
|
|
137
|
+
* Preprocess shader to convert cubemap-style texture() calls to equirectangular.
|
|
138
|
+
*
|
|
139
|
+
* Uses the channel configuration to determine which channels are cubemaps.
|
|
140
|
+
* Only channels explicitly marked as `type: 'cubemap'` in config.json will have
|
|
141
|
+
* their texture() calls wrapped with _st_dirToEquirect().
|
|
142
|
+
*
|
|
143
|
+
* @param source - User's GLSL source code
|
|
144
|
+
* @param channels - Channel configuration for this pass
|
|
145
|
+
*/
|
|
146
|
+
private preprocessCubemapTextures;
|
|
147
|
+
private executePass;
|
|
148
|
+
private bindBuiltinUniforms;
|
|
149
|
+
private bindChannelTextures;
|
|
150
|
+
/**
|
|
151
|
+
* Resolve a ChannelSource to an actual WebGLTexture to bind.
|
|
152
|
+
*/
|
|
153
|
+
private resolveChannelTexture;
|
|
154
|
+
/**
|
|
155
|
+
* Swap current and previous textures for a pass (ping-pong).
|
|
156
|
+
* Also reattach framebuffer to new current texture.
|
|
157
|
+
*/
|
|
158
|
+
private swapPassTextures;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=ShadertoyEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShadertoyEngine.d.ts","sourceRoot":"","sources":["../../src/engine/ShadertoyEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,gBAAgB,EAEhB,QAAQ,EACT,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,aAAa,EAIb,WAAW,EAEZ,MAAM,SAAS,CAAC;AAkDjB,qBAAa,eAAe;IAC1B,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,sBAAsB,CAAC;IAEpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,gBAAgB,CAAuC;IAE/D,OAAO,CAAC,aAAa,CAA6B;IAGlD,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,aAAa,CAAkC;IAGvD,OAAO,CAAC,kBAAkB,CAMlB;gBAEI,IAAI,EAAE,aAAa;IAmC/B,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,KAAK,IAAI,WAAW,CASvB;IAED;;;OAGG;IACH,oBAAoB,IAAI,KAAK,CAAC;QAC5B,QAAQ,EAAE,QAAQ,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC;IAIF;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,mBAAmB,IAAI,gBAAgB,GAAG,IAAI;IAK9C;;;;;OAKG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAyCxE;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsB3C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAkCb;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAatD;;;OAGG;IACH,qBAAqB,IAAI,IAAI;IAa7B;;;;;;;OAOG;IACH,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAyD1F;;;;;;OAMG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,QAAQ,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE;IA0CpH;;OAEG;IACH,OAAO,IAAI,IAAI;IAsCf,OAAO,CAAC,cAAc;IAgBtB;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IA4D3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0FzB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;;;;;;;;OASG;IACH,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,mBAAmB;IAiC3B,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA4C7B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAmBzB"}
|