.github/workflows | ||
shaders | ||
src | ||
.gitignore | ||
Doxyfile | ||
LICENSE | ||
meson.build | ||
README.md |
ShaderTool
Live tool for developing OpenGL shaders interactively.
I developed this small program to experiment with shaders locally, to reproduce an experience like Shadertoy offline, with the ability to choose my own text editor. It was also a good project to learn OpenGL development. For this reason, the code is very minimal and should be fairly readable.
Additional features:
- Extensive logging (using the nice log.c library)
- FPS tracking
- Reload shaders automatically on save (using inotify)
- Save screenshot to a file
- Complete argument parsing with Argp
- Full documentation with Doxygen
Build
This project requires the GLFW, GLEW, and FreeImage libraries. On a Debian/Ubuntu system:
sudo apt-get install libglfw3-dev libglew-dev libfreeimage-dev
To build (with Meson):
meson build
ninja -C build
To build the documentation with Doxygen:
doxygen Doxyfile
The documentation is also available online.
Usage
Usage: shadertool [OPTION...] SHADER
Compile and render the SHADER.
ShaderTool -- Live tool for developing OpenGL shaders interactively
-b, --buffer=FILE Source file of the buffer fragment shader
-r, --auto-reload Automatically reload on save
-s, -q, --silent, --quiet Don't produce any output
-v, --verbose Produce verbose output
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
For instance, to run the mandelbrot shader with live reloading on save:
shadertool -r shaders/mandelbrot.frag
Keyboard shortcuts:
Escape
to quitR
to reload the shadersS
to save a screenshot to the current directory, in a fileshadername_frame_date_time.png
Limitations
For now, the "buffer" shader (i.e. the additional shader that renders in a texture in another framebuffer) does not work properly. I don't understand exactly what's broken, but maybe I'll investigate it more closely later. If you have any idea about what went wrong, don't hesitate to notify me!
References and other resources
- LearnOpenGL
- open.gl
- docs.gl
- The Book of Shaders
- glslViewer, a much more complete project with similar aims
- Shadertoy
- smoothstep.io
- webgl-noise, a collection of reference implementations of noise functions, for use in shaders