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`