# SDL3 GPU Shader Toolchain SDL3 GPU accepts different shader formats depending on the selected backend: - Vulkan: SPIR-V - D3D12: DXBC or DXIL - Metal: MSL or metallib For this Linux-first prototype, use GLSL compiled to SPIR-V with `glslc` from shaderc. ```sh scripts/compile-shaders.sh ``` Outputs are written to `client/odin/shaders/compiled/` and intentionally ignored by git. Fedora install: ```sh sudo dnf install glslc ``` Cross-platform path later: - Use SDL_shadercross for offline conversion from SPIR-V or HLSL to backend-specific shader formats. - Keep source shaders in git. - Generate SPIR-V/DXIL/MSL in CI or release packaging. - At runtime, choose the shader blob matching `SDL.GetGPUDeviceDriver(device)` or `SDL.GetGPUShaderFormats(device)`. Current recommendation: - Build Linux/Vulkan first with checked-in GLSL sources and generated SPIR-V as build artifacts. - Add SDL_shadercross only when Windows/macOS backends matter. Current renderer state: - The editor loads `rect.vert.spv` and `rect.frag.spv` for the direct SDL3 GPU path. - The editor loads `text.vert.spv` and `text.frag.spv` for font-atlas text. - Text is rendered from a baked `stb_truetype` atlas using `/usr/share/fonts/google-noto/NotoSansMono-Regular.ttf`. - A later portability step should bundle a project font or add configurable font discovery.