mirror of
https://git.s-ol.nu/glsl-view
synced 2025-08-02 23:49:57 +02:00
82 lines
2.4 KiB
Markdown
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`
|