ShaderBoy is a simple text editor that lets you write Shadertoy shaders more comfortably, anytime, anywhere. I like writing shaders for Shadertoy, or analyzing other people's esoteric shaders, and I created this especially because I wanted to do that on my smartphone. Whether you're traveling by train or plane, staying in the toilet, fishing or camping, you can write a shader anywhere and anytime.
Your power to go.
There are PC version and smartphone version. Both allow you to write shaders with the same variable/function name as Shadertoy. On the PC version, you can fine-tune your shaders with a rich debugging GUI. It also has a recording mode so you can easily save your shader as a movie. The smartphone version consists of a minimal GUI element that assumes the use of a physical keyboards, with a small screen as much coding space as possible.
ShaderBoy uses Google Drive to store your shaders. From any device on which you log in with your Google account, you can continue coding the shader that you last edited.
Enjoy ShaderBoy!
Bug reports, feature requests, and 🍺 are welcome.
ShaderBoy is a PWA(Progressive Web Apps).
You can install the app from here.
Smartphone | Windows | Mac | |
---|---|---|---|
Compile | ⌥+ENTER(SPACE) | ⌥+ENTER | ⌥+ENTER |
Play/Pause | ⌥+UP | ⌥+UP | ⌥+UP |
Reset time | ⌥+DOWN | ⌥+DOWN | ⌥+DOWN |
Move to neighbor buffer | ⌥+LEFT/RIGHT | ⌥+LEFT/RIGHT | ⌥+LEFT/RIGHT |
Search | ctrl+F | ctrl+F | ⌘+F |
Replace | ctrl+H | ctrl+H | ⌘+H |
Resolution | ctrl+1-4 | ctrl+1-4 | ctrl+1-4 |
Font size | ctrl+-/+ | ctrl+⇧+⌥+-/+ | ⌘+⇧+⌥+-/+ |
Hide/Show WebGL canvas | ctrl+⇧+⌥+V | ctrl+⇧+⌥+V | ⌘+⇧+⌥+V |
Hide/Show Code & All GUIs | ctrl+⇧+⌥+H | ctrl+⇧+⌥+H | ⌘+⇧+⌥+H |
Hide/Show Timeline | --- | ctrl+⇧+⌥+T | ⌘+⇧+⌥+T |
Hide/Show Knobs GUI | --- | ctrl+⇧+⌥+D | ⌘+⇧+⌥+D |
Hide/Show iChannel GUI | ctrl+⇧+⌥+A | ctrl+⇧+⌥+A | ⌘+⇧+⌥+A |
Hide/Show Recording GUI | --- | ctrl+⇧+⌥+R | ⌘+⇧+⌥+R |
Create a new shader | ctrl+⇧+⌥+N | ctrl+⇧+⌥+N | ctrl+⇧+⌥+N |
Fork a shader | ctrl+⇧+⌥+F | ctrl+⇧+⌥+F | ⌘+⇧+⌥+F |
Save shader files | ctrl+S | ctrl +S | ⌘+S |
Open shader list | ctrl+O | ctrl+O | ⌘+O |
Mute/Unmute sound | ctrl+M | ctrl+M | ⌥+M |
Switch header info(FPS/shader name) | ctrl+I | ctrl+I | ⌥+I |
- Shadertoy uniform variables
- Multipass shader
- Sound shader
- Cubemap shader
- Official assets(textures)
- Official assets(sounds)
- Display compilation time
- Display number of chars
- VR
- uniform vec3 iResolution; // viewport resolution (in pixels)
- uniform float iTime; // shader playback time (in seconds)
- uniform float iTimeDelta; // render time (in seconds)
- uniform int iFrame; // shader playback frame
- uniform float iFrameRate; // number of frames rendered per second
- uniform vec4 iDate; // (year, month, day, time in seconds)
- uniform vec4 iMouse; // mouse pixel coords. xy: current (if MLB down), zw: click
- uniform float iChannelTime[4]; // channel playback time (in seconds)
- uniform vec3 iChannelResolution[4]; // channel resolution (in pixels)
- uniform samplerXX iChannel0..3; // input channel. XX = 2D/Cube
- uniform float iSampleRate; // sound sample rate (i.e., 44100)
- Timeline GUI(frame based) :PC only
- x24 uniforms with GUI(knob style) :PC only
- supports MIDI controller :PC only
- GUI for Shader list
- GUI for iChannels
- Auto completion(Builtins/User defined funcs, macros, and structs/)
- User manual
- Kindful GUIs
- Inlined Khronos doc
- Snippets for writing SDF(Signed Distance field)
- Multiple editor pane
- Insert value with inlined GUIs.(https://github.com/patriciogonzalezvivo/glslEditor)
- Break point.(https://github.com/patriciogonzalezvivo/glslEditor)
- GoogleDrive
- Export Image shader(WebM/PNG/JPG/GIF)
- Export Sound shader(WAV)
- Witout Google account(Trial mode)
- Syntax highlight
- Import/Exprt JSON (for Shadertoy unofficial plugin)
- Direct import from Shadertoy URL
If you want have your own ShaderBoy,
Clone this repo and install dependencies.
$ npm install
You then set up a local host for development.
$ npm start
or to build,
$ npm run build
And upload files in "dest" directory to your server.
That's it! Good luck!
ShaderBoy depends on some awesome js libralies.
Codemirror
CCapture.js
keymaster
css_browser_selector