• v0.6.0 70d4beca4f

    v0.6.0: WebAssembly build with a WebGL backend (playable in the browser)

    EnderTheCoder released this 2026-09-28 22:57:19 +08:00 | 10 commits to master since this release

    • ra3.webgl: a Web peer of Vulkan/Direct3D (SDL3 canvas + GLES3/WebGL2), with
      2D blit and the GPU terrain raymarch; GLSL ES shaders; null fallback off
      Emscripten. backend::webgl + default_backend() (webgl under Emscripten).
    • Emscripten toolchain + Dockerfile.wasm + scripts/build-wasm.sh; import std,
      global -fexceptions, and Asyncify so the blocking frame loop yields to the
      browser (display::sleep_frame calls emscripten_sleep).
    • apps/web/shell.html + apps/web/serve.py (Range-capable dev server).
    • Assets: browsers forbid synchronous on-demand reads on the main thread (and
      FS.createLazyFile / the WasmFS fetch backend are worker-only; SDL3's Emscripten
      backend is main-thread DOM only, so the engine cannot run in a worker). The
      wasm build therefore preloads a compact per-map set via OPENRA3_WEB_ASSETS.
    • New openra3 textures --map ID lists the loose terrain TGAs a map resolves to
      (terrain::resolve_texture_files, shared with load_textures_from_dir).
    • Fixes: webgl heightmap used GL_R16 = 0x8229 (that is R8) -> upload rejected,
      terrain flattened to water; now 0x822A. Logger uses a stdout console sink on
      the web (stderr maps to console.error); a GL error check logs bad uploads.
    • CI: wasm image + build jobs.
    Downloads