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.
video files
Videos are fully uploaded to the GPU as 2D-array- or 3D textures. To save on GPU memory, textures are stored using GPU compression. Nevertheless, the resolution and length are limited.
Loading most video formats is quite slow because the frames need to be compressed during upload. Videos encoded using HAP or HAP Alpha will load much faster since the image data is already in the GPU compressed format.
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 to1920.height(int): vertical rendering resolution. defaults to1080.outputs: list of outputs. defaults to one 800x600 window. each output is a dictionary with the following keys:type(str): currently alwayswindow.width(int): window width. defaults to800.height(int): window height. defaults to600.filter(str): one ofnearestorlinear.osc: either a 'liblo URL' or dictionary with the following keys:protocol(str):udp,tcporunix. defaults toudp.port(int): port to bind to. defaults to9000.
liblo URLs
Unfortunately undocumented by libio. The following formats are valid:
osc.udp://localhost:1234osc.udp://224.0.1.9:1234(multicast IP)osc.tcp://:1234osc.unix://localhost/tmp/mysocket
Commit History
@main
git clone https://git.s-ol.nu/glsl-view.git
- ffmpeg: refactor/turn inside avcodec loops inside-out s-ol 18 hours ago
- Stream*Source: rewind on EOF s-ol a day ago
- update for ffmpeg 8 s-ol a day ago
- add BufferedStreamSource s-ol 4 days ago
- add toggleable crop mode s-ol 26 days ago
- log fps every 64 frames s-ol a month ago
- log errors in threads s-ol a month ago
- update for Zig 0.15.1 s-ol a month ago
- TSVSource: fix initialization in thread s-ol a month ago
- build.zig: remove 'lib' prefix from ffmpeg libs s-ol 2 months ago