环境配置
首先在 vulkan.lunarg.com 官网下载 Vulkan SDK。我自己的环境是 Windows,所以下载此时最新的 vulkansdk-windows-X64-1.4.328.1.exe 进行安装。
因为涉及系统窗口显示,此处使用 GLFW 库,它是跨平台的窗口管理库。可以在 glfw.org 官网下载。因为在 Windows 系统下使用,所以可以直接下载预编译的库。
我们再准备一下 GLM 库,它是专为图形编程设计的数学库。它是 header only 库,所以使用很方便。我们可以直接克隆 https://github.com/g-truc/glm 仓库进行使用。
接着,我们创建一个新的 Visual Studio 工程。然后在同级创建一个 externals 目录,把上述提及的三方库放入其中。
- ├─externals
- │ ├─glfw-3.4.bin.WIN64
- │ └─glm
- └─VulkanCourseApp
接着,我们设置工程的头文件目录和库文件目录。
右击功能,选择 属性。然后如图 1 所示,在 C/C++ - 常规 - 附加包含目录 选项里设置头文件目录。此处,GLFW 和 GLM 所在的头文件目录使用相对路径,Vulkan 头文件所在的目录使用绝对路径。
库文件目录设置如图 2 所示,需要在 链接器 - 常规 - 附加库目录 里设置。此处指定了 GLFW 和 Vulkan 库所在的目录。GLM 库没有库文件,它是 header only 的。
然后如图 3 所示,我们在 链接器 - 输入 - 附加依赖性 里指定具体需要链接的库。此处我们使用到 vulkan-1.lib 和 glfw3.lib。
头文件和库设置完成之后,我们就可以编写测试代码了。如代码清单 1 所示,我们对 GLFW、GLM 和 Vulkan 进行测试。
运行程序,如果显示了窗口,就代表 GLFW 配置正确了。extensionCount 变量非零,就代表 Vulkan 配置正确了。矩阵和向量计算正确,就代表 GLM 配置正确了。
- #define GLFW_INCLUDE_VULKAN
- #include <GLFW/glfw3.h>
- //#include <vulkan/vulkan.h>
- #define GLM_FORCE_RADIANS
- #define GLM_FORCE_DEPTH_ZERO_TO_ONE
- #define GLM_ENABLE_EXPERIMENTAL
- #include <glm/glm.hpp>
- #include <glm/mat4x4.hpp>
- #include <glm/gtx/string_cast.hpp>
- int main()
- {
- glfwInit();
- glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
- GLFWwindow* window = glfwCreateWindow(800, 600, "Test Window", NULL, NULL);
- uint32_t extensionCount = 0;
- vkEnumerateInstanceExtensionProperties(NULL, &extensionCount, NULL);
- printf("Extension count: %i\n", extensionCount);
- glm::mat4 testMatrix(1.0f);
- glm::vec4 testVector(1.0f);
- auto testResult = testMatrix * testVector;
- printf("testMatrix: %s\n", glm::to_string(testMatrix).c_str());
- printf("testVector: %s\n", glm::to_string(testVector).c_str());
- printf("testResult: %s\n", glm::to_string(testResult).c_str());
- while (!glfwWindowShouldClose(window))
- {
- glfwPollEvents();
- }
- glfwDestroyWindow(window);
- glfwTerminate();
- return 0;
- }