项目布局
对于 Vulkan 引擎,我们使用特定的文件夹布局。
/assets
将包含我们在指南中使用的纹理和 3D 模型/bin
是可执行文件将被构建的位置。我们不使用正常的 CMake 构建文件夹来简化资源和着色器的路径/shaders
将包含我们所有的着色器及其编译后的输出/chapter-N
文件夹包含本指南每个章节的代码/third_party
包含我们使用的所有库,已 vendor-in,因此所有源代码都随时可用
库
在引擎中,我们使用一组库,大多数存储在 /third_party
中。唯一未 vendor-in 的库是 SDL
third-party 中的所有库都已 vendor-in,CMake 将自动构建它们。对于 SDL,需要将其与项目分开构建,并告诉 CMake 在哪里找到它。
我们正在使用的库
GLM (openGL Mathematics) 数学库,仅头文件。我们使用它来进行矩阵和向量数学运算。它是一个库,其中包含的类型在大多数情况下与 GLSL 类型直接兼容。例如,
glm::mat4
具有类似的操作,并且与着色器中的mat4
直接兼容。虽然名称中带有 OpenGL,但它与 Vulkan 配合良好。SDL 窗口和输入库,单独构建。SDL 是最常用的库之一,用于以跨平台方式创建窗口和访问输入设备。SDL 几乎在每个平台上都有效,并且得到很好的支持。在 Unreal Engine、Unity、Source 和其他引擎中使用。我们在项目中使用它来轻松快速地打开窗口,并获得详细的键盘输入。
dear IMGUI 易于使用的即时图形用户界面 (GUI) 库。这使我们能够创建可编辑的控件,例如用户界面的滑块和窗口。它在游戏行业中被广泛用于调试工具。在项目中,我们使用它来创建用于渲染的交互式选项。
STB Image 图像加载库,仅头文件。小巧易用的库,用于加载图像文件。它可以加载常见的图像格式,例如 BMP、PNG、JPEG 等。它是另一组类似的单文件库的一部分。
Tiny Obj Loader .Obj 模型加载库,仅头文件。快速且小巧的库,用于加载 .obj 3D 模型格式,我们将在加载 3D 模型时使用它。
Vk Bootstrap 抽象了 Vulkan 在设置时的大量样板代码。大多数代码只需编写一次,之后再也不会触及,因此我们将使用此库跳过大部分代码。该库简化了实例创建、交换链创建和扩展加载。它最终将在一个可选章节中从项目中删除,该章节解释了如何以“手动”方式初始化 Vulkan 样板代码。
VMA (vulkan memory allocator) 为 Vulkan 实现内存分配器,仅头文件。在 Vulkan 中,用户必须自行处理缓冲区、图像和其他资源的内存分配。这可能非常难以正确地以高性能和安全的方式完成。Vulkan Memory Allocator 为我们完成了这项工作,并允许我们简化图像和其他资源的创建。广泛用于个人 Vulkan 引擎或较小规模的项目(如模拟器)。Unreal Engine 或 AAA 引擎等高端项目编写自己的内存分配器。
下一步:构建项目