目录
一、SPIR-V 的核心优势
二、Slang 着色器语言基础
三、三角形渲染的着色器实现
3.1 顶点着色器(Vertex Shader)
3.2 片段着色器(Fragment Shader)
3.3 逐顶点颜色插值(进阶)
四、着色器编译(Slang → SPIR-V)
4.1 着色器文件组织
4.2 编译脚本(平台专属)
Windows(compile.bat)
Linux(compile.sh)
4.3 CMake 编译集成(推荐)
五、加载 SPIR-V 字节码
六、创建着色器模块(VkShaderModule)
七、配置管线着色器阶段
关键参数说明
八、总结与后续
核心要点
九,整体代码
十,Slang Shader代码
十一,GLSL Vertex Shader代码
十二,GLSL Fragment shader 代码
与早期图形 API 不同,Vulkan 中的着色器代码需以字节码格式(而非 GLSL、HLSL 等人类可读语法)提供。这种字节码格式名为 SPIR-V,由 Khronos 设计,专用于 Vulkan,可编写图形 / 计算着色器 —— 本教程聚焦 Vulkan 图形管线中的着色器应用。
一、SPIR-V 的核心优势
使用字节码格式的核心价值在于简化 GPU 厂商的编译器实现:
- 过去基于 GLSL 等可读语法的着色器,不同厂商对标准的解读差异可能导致代码兼容性问题(如语法报错、运行行为不一致);
- SPIR-V 作为标准化字节码,可避免上述问题,且编译器能更高效地将其转换为 GPU 原生指令。
无需手动编写 SPIR-V 字节码:Khronos 提供了厂商无关的编译器,可将 Slang(类 C 语法的着色器语言)编译为 SPIR-V。该编译器会验证代码的标准合规性,生成可随程序分发的 SPIR-V 二进制文件;也可作为库集成到程序中运行时编译(本教程暂不涉及,后续反射章节会讲解)。