#!/usr/bin/env bash
# Transpile all WGSL shaders -> MSL + binding manifests into the engine package.
# WGSL stays single-source (shared with the web app); this is the build step that
# realises renderer "Ansatz 3" (see docs/superpowers/specs/2026-06-02-native-ambiance-app-design.md).
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
SRC="$ROOT/src/engine/shaders"
OUT="$ROOT/apple/PhysarumEngine/Sources/PhysarumEngine/Resources/Shaders"
TOOL="$ROOT/apple/tools/wgsl2msl/target/release/wgsl2msl"
if [ ! -x "$TOOL" ]; then
echo "building wgsl2msl…"
( cd "$ROOT/apple/tools/wgsl2msl" && cargo build --release )
fi
mkdir -p "$OUT"
count=0
for f in "$SRC"/*.wgsl; do
name="$(basename "$f" .wgsl)"
# blur.wgsl defaults to the horizontal pass (BLUR_DIR_X=1, BLUR_DIR_Y=0).
"$TOOL" "$f" "$OUT/$name.metal" "$OUT/$name.json"
count=$((count + 1))
done
# Vertical blur variant (separable Gaussian second pass).
"$TOOL" "$SRC/blur.wgsl" "$OUT/blur_v.metal" "$OUT/blur_v.json" BLUR_DIR_X=0 BLUR_DIR_Y=1
count=$((count + 1))
echo "transpiled $count shader variants -> $OUT"
if grep -rl 'user(fake' "$OUT" >/dev/null 2>&1; then
echo "ERROR: placeholder bindings remain:" >&2
grep -rl 'user(fake' "$OUT" >&2
exit 1
fi
echo "ok: no placeholder bindings"