1
0
Fork 1
mirror of https://git.s-ol.nu/glsl-view synced 2025-08-02 23:49:57 +02:00
zig-glsl-view/README.md
2025-03-10 12:45:04 +01:00

82 lines
2.4 KiB
Markdown

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 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`