ShaderTool  0.1
Live tool for developing OpenGL shaders interactively
ShaderTool

build docs

Live tool for developing OpenGL shaders interactively.

psychedelic bacteria julia

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 quit
  • R to reload the shaders
  • S to save a screenshot to the current directory, in a file shadername_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