git.s-ol.nu glsl-view / hap
hap

Tree @hap (Download .tar.gz)

glsl-view

a minimal GLSL shader host with an OSC interface for setting uniforms in realtime.

OSC interface

GLSL uniforms are accessible as /$UNIFORM_NAME. The OSC type must match the GLSL type:

uniform float time = 0;
uniform dvec3 color;

----

/time f 123.56
/color ddd 0.5 0.1 0.1

Vectors and matrices can be indexed using integers or the GLSL swizzling keys (x/y/z/w, r/g/b/a, s/t/p/q):

uniform vec3 color;
uniform mat3 mat;

----

/color/r f 0.5
/mat/0/y f 123

samplers

When built with ffmpeg, images and videos can be loaded as 2D or 3D textures:

uniform sampler2D image;
uniform sampler3D videoA;
uniform sampler2DArray videoB;

----

/image s "image.jpg"
/videoA s "subdir/video_a.mp4"
/videoB s "subdir/video_b.mov"

The filepaths are interpreted relative to the config file.

commands

A message to /-/reload forces a reload of the shader source code.

configuration

Configuration is read from config.yaml or the only command line argument.

  • fragment (str): path to GLSL fragment shader.
  • width (int): horizontal rendering resolution. defaults to 1920.
  • height (int): vertical rendering resolution. defaults to 1080.
  • outputs: list of outputs. defaults to one 800x600 window. each output is a dictionary with the following keys:
  • type (str): currently always window.
  • width (int): window width. defaults to 800.
  • height (int): window height. defaults to 600.
  • filter (str): one of nearest or linear.
  • osc: either a 'liblo URL' or dictionary with the following keys:
  • protocol (str): udp, tcp or unix. defaults to udp.
  • port (int): port to bind to. defaults to 9000.

liblo URLs

Unfortunately undocumented by libio. The following formats are valid:

  • osc.udp://localhost:1234
  • osc.udp://224.0.1.9:1234 (multicast IP)
  • osc.tcp://:1234
  • osc.unix://localhost/tmp/mysocket