跳转至

SDL3 shader

SDL3 tiles build 在 packaging 前把 GLSL source 编译为 backend-specific artifact;运行时 CCB 按 SDL 报告 GPU format 选择 Vulkan 的 SPIR-V、D3D12 的 DXIL 或 Metal 的 MSL。

权威 pipeline

  • 人工维护 source 是 data/shaders/*.frag 与 *.vert;
  • tools/build_shaders.py 调用 glslangValidator 与 SDL_shadercross;
  • .github/actions/build-sdl3-shaders/action.yml 固定/构建 toolchain 并上传 artifact;
  • Make/CMake/MSVC rule 消费 artifact,src/cata_shader.* 在运行时选择并拥有它们。

显式 generator 接口为:

python3 tools/build_shaders.py --shader-dir data/shaders --formats spv,dxil,msl

它需要外部 compiler。因工具缺失而失败的命令不能算 shader 验证通过。

生成边界

.spv、.dxil、.msl 与 build-stamp 是 generated artifact。修改 GLSL/generator 后 重新生成,不手改 binary。除非主仓库 generated-file policy 明确跟踪,否则大型生成输出 保留在 CI/release artifact。

运行时不变量

artifact basename/stage 与 GLSL 匹配;uniform/sampler count 与 runtime creation 匹配; 至少一个 shipped format 适配 active GPU;缺失/无效 artifact 提供有用 log;renderer recovery 安全释放并重建 shader/render-state resource。

验证

编译所有请求 format、保留 generator log、运行 SDL3 shader CI lane,在代表性 Vulkan/ D3D12/Metal backend 启动,覆盖各视觉 variant 与 renderer recovery,并比较受控 screenshot。 SDL2 不能验证本 pipeline。

性能与兼容

避免 runtime compile 和每次 draw 重建 render state。uniform、binding 或 backend preference 变化属于类似 API 的 renderer 变化,需要三个 artifact format 和 fallback/error-path 证据。