summaryrefslogtreecommitdiffstats
path: root/test_buffer.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test_buffer.sh')
-rwxr-xr-xtest_buffer.sh58
1 files changed, 58 insertions, 0 deletions
diff --git a/test_buffer.sh b/test_buffer.sh
new file mode 100755
index 0000000..745227e
--- /dev/null
+++ b/test_buffer.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+set -euo pipefail
+
+HOST=localhost
+PORT=9000
+TSV_SRC=test-vid
+
+# ensure relatively predictable timing for spawn()
+cargo build
+
+PIDS=()
+cleanup() {
+ for pid in "${PIDS[@]}"; do
+ kill "$pid" 2>/dev/null || true
+ done
+ wait 2>/dev/null
+}
+trap cleanup EXIT
+
+spawn() {
+ BIN="$1"
+ shift
+ cargo run --bin "$BIN" -- "$@" &
+ PIDS+=($!)
+}
+
+spawn tsv-video-buffer --name "$TSV_SRC" --frames 60 -- \
+ -f lavfi -i "testsrc=size=1920x1080:rate=60"
+spawn wgsl-render
+
+sleep 2
+
+SHADER='
+@group(1) @binding(0) var<uniform> time: f32;
+
+@group(1) @binding(1) var video: texture_3d<f32>;
+@group(1) @binding(2) var s: sampler;
+
+@fragment
+fn fs_main(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
+ let dims = textureDimensions(video);
+ let frame = fract(time / f32(dims.z));
+ return textureSampleLevel(video, s, vec3f(uv, frame), 0.0);
+}
+'
+oscsend "$HOST" "$PORT" /shader s "$SHADER"
+oscsend "$HOST" "$PORT" /texture/video s "$TSV_SRC"
+oscsend "$HOST" "$PORT" /sampler/s ss nearest repeat
+
+spawn tsv-view
+
+echo "Playing video buffer (Ctrl+C to stop)..."
+T=0
+while true; do
+ oscsend "$HOST" "$PORT" /uniform/time f "$T"
+ T=$((T+1 % 60))
+ sleep 0.016
+done