Skip to content

dlozeve/ShaderTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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