v0.3.0: display abstraction, map-browser menu, SAGE terrain tiling/blends

- ra3.client::display: shared interactive loops; SDL and Vulkan backends
  implement only the primitives (init/present/poll_event/window_size/
  key_down/present_terrain). ra3.display picks the backend.
- Menu: maps by localized name (gamestrings.csf), red/gold theme, hover
  highlight, mouse + keyboard, wheel scroll, fullscreen and FPS/vsync
  options, loading progress bar.
- Terrain: continuous tile sampling via a texture array (REPEAT, uv =
  cell/(2*cellSize)) removes per-cell grid seams; SAGE blend ramp for
  material transitions; FPS label + top-right minimap overlays.
- Skip the skirmish sim for map views; reuse the Vulkan texture; no idle
  terrain redraw.
This commit is contained in:
EnderTheCoder
2026-09-20 02:20:39 +08:00
parent 702b4e29aa
commit b6d619254d
66 changed files with 37661 additions and 406 deletions
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env sh
# Regenerate the committed SPIR-V blobs under shaders/generated/.
#
# The build embeds the .spv files directly (see CMakeLists.txt), so no shader
# compiler is needed to build OpenRA3. Run this only after editing a .vert/.frag.
#
# Needs one of: glslc (shaderc) or glslangValidator (glslang-tools). On a host
# without either, use a throwaway container:
# docker run --rm -v "$PWD/shaders:/s" ubuntu:26.04 bash -c \
# "apt-get update -qq && apt-get install -y -qq glslang-tools && \
# cd /s && sh ./compile.sh"
set -eu
DIR="$(cd "$(dirname "$0")" && pwd)"
OUT="$DIR/generated"
mkdir -p "$OUT"
compile() {
src="$1"
dst="$2"
if command -v glslc >/dev/null 2>&1; then
glslc "$src" -o "$dst"
else
glslangValidator -V "$src" -o "$dst"
fi
}
for name in scene terrain; do
compile "$DIR/$name.vert" "$OUT/$name.vert.spv"
compile "$DIR/$name.frag" "$OUT/$name.frag.spv"
done
echo "wrote $OUT/{scene,terrain}.{vert,frag}.spv"