本部分结果可参考 02_Development_Environment

本教程使用 VS 2022 进行开发,并使用 C++ 17 标准进行编译。

#Vulkan SDK

Vulkan 网站 下载并安装 Vulkan SDK:

或通过 winget 进行安装:

1
winget install KhronosGroup.VulkanSDK

通常而言,安装后的路径为 C:\VulkanSDK\<version>,从中找到 Bin/vkcube.exe 程序并运行,如果运行成功,则说明该设备显卡的驱动支持 Vulkan,运行结果如下:
vkcube

#GLFW

通过 GLFW 创建系统窗口,可以从其官网直接获取编译好的二进制文件,其解压缩后的目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
.
├── LICENSE.md
├── README.md
├── include
│ └── GLFW
│ ├── glfw3.h
│ └── glfw3native.h
├── ....
└── lib─vc2022
├── glfw3.dll
├── glfw3.lib
├── glfw3_mt.lib
└── glfw3dll.lib

我们需要其中的 include/GLFW 文件夹和 lib-vc2022/glfw3.lib 文件。

#GLM

如 DirectX 12 不同,Vulkan 并没有提供线性代数的库,可以选择使用 GLM 进行相应的运算。将解压缩后的 glm 文件夹在之后的项目中需要被使用。

#Settingup Visual Studio

创建 Visual Studio 新工程,并选择 Windows 桌面向导(Windows Desktop Wizard) 作为模板,并在创建时选择 控制台应用程序(Console Application),并勾选 空项目(Empty Project)

将上述的 GLFWGLM 添加至解决方案的根目录,并添加至 IncludeLib 文件夹,结构如下:

1
2
3
4
5
6
7
8
9
├───Include
│ ├───GLFW
│ └───glm
│ ├───detail
│ ├───gtc
│ ├───gtx
│ └───simd
└───Lib
glfw3.lib

Project/Vulkan Property Pages 窗口中添加 Include Directories:

Additional Include Directories 设置为 $(VULKAN_SDK)\Include;$(SolutionDir)include;

这里的 $(VULKAN_SDK) 是通过 winget 安装 Vulkan SDK 时自动添加的环境变量,通常为 C:\VulkanSDK\<version>
如果你是通过安装包安装的 Vulkan SDK,则需要手动添加该环境变量。

然后再 Linker/General 中选择 Additional Library Directories

Additional Library Directories 设置为 $(SolutionDir)Lib;$(VULKAN_SDK)\Lib;

然后在 Linker/Input 中选择 Additional Dependencies

最后选择支持 C++ 17 的编译器:

此时在 main.cpp 中添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#include <iostream>

int main() {
glfwInit();

glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);

uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);

std::cout << extensionCount << " extensions supported\n";

while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
}

glfwDestroyWindow(window);

glfwTerminate();

return 0;
}

并运行程序,命令行中应当显示支持的拓展数目以及一个空白的窗口:
Running Result