Windows

我们这里使用Visual Studio 2017作为Windows平台的开发环境,当然使用Visual Studio 2013或2015应该也不会有任何问题,只是配置方法可能会略微不同。

Vulkan SDK

Vulkan SDK是使用Vulkan开发应用程序必不可少的组件。它包含了Vulkan API的头文件,一个校验层实现,调试工具和Vulkan函数加载器。Vulkan函数加载器类似OpenGL的GLEW可以在运行时查询驱动程序支持的Vulkan API函数。

Vulkan SDK可以从LunarG的网站上免费下载。

image

安装Vulkan SDK后,我们需要验证下我们的显卡和驱动程序是否支持Vulkan。这可以通过运行Vulkan SDK自带的cube.exe来完成,我们可以在Vulkan SDK安装目录下的Bin目录下找到它,运行后,可以看下到下面的窗口:

image

如果没有看到这个窗口,而是出现了一条错误消息,可以尝试更新显卡的驱动程序到最新版本,再次尝试,如果仍然出现错误消息,可以在显卡官网查询自己的显卡是否支持Vukan。

在Bin目录下还有一个非常有用的程序:glslangValidator.exe。它可以将GLSL代码编译为字节码。我们会在着色器模块章节,对它进行更为详细地说明。除此之外,Bin目录下还包含了Vulkan函数加载器和校验层的二进制文件,它们的库文件则位于Vulkan SDK的Lib目录下。

Vulkan SDK的Documentation目录包含了Vulkan SDK的离线文档和完整的Vulkan规范文档。最后是Vulkan SDK的Include目录,它包含了Vulkan API的头文件。除此之外,还有很多文件和目录,但对于我们的教程来说,并没有直接用到它们,所以就不再一一介绍。

GLFW

之前提到,Vulkan是一个平台无关的图形API,它没有包含任何用于创建窗口的功能。为了跨平台和避免陷入Win32的窗口细节中去,我们使用GLFW库来完成窗口相关操作,GLFW库支持Windows,Linux和MacOS。当然,还有其它一些库可以完成类似功能,比如SDL。但除了窗口相关处理,GLFW库对于Vulkan的使用还有其它一些优点。

读者可以再GLFW的官方网站上免费下载到最新版本的GLFW库。在本教程,我们使用64位版本的GLFW库,但32位版本也是可以的,只是编译使用Vulkan的应用程序时也需要链接到32位版本的Vulkan API,也就是链接到Vulkan SDK下Lib32目录下的库。下载GLFW后,将它解压缩到一个合适的位置。这里,我们将它解压到Visual Studio目录下的Libraries目录中。不要纠结于为什么解压后不存在libvc-2017目录,我们的Visual Studio 2017是完全兼容lib-vc2015的。

image

GLM

和DirectX 12不同,Vulkan没有包含线性代数库,我们需要自己找一个。GLM就是一个我们需要的线性代数库,它经常和OpenGL一块使用。

GLM是一个只有头文件的库,我们只需要下载它的最新版,然后将它放在一个合适的位置,就可以通过包含头文件的方式使用它。

image

配置Visual Studio

现在,我们可以创建一个基本Visual Studio工程来验证我们安装的依赖是否可以正常工作。

首先,启动Visual Studio,然后选择Windows Destop Wizard。

image

我们选择使用Console Application (.exe)应用程序类型,这样做我们就可以直接将调试信息输出到控制台窗口上。另外,我们将Empty Project选项打勾来阻止Visual Studo添加模板代码。

image

创建项目后,我们添加一个C++源代码文件到项目中。

image

image

下面的代码是这个C++源文件的内容。源代码的内容暂时不需要理解,我们现在只是为了验证我们的依赖是否配置正确,源代码的内容,我们会在后面的章节详细说明。

#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>

#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>

#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" << std::endl;

    glm::mat4 matrix;
    glm::vec4 vec;
    auto test = matrix * vec;

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

    glfwDestroyWindow(window);

    glfwTerminate();

    return 0;
}

现在,让我们开始配置项目属性,选择All Configurations,让设置对Debug和Release模式都有效。

image

image

打开C++ -> General -> Additional Include Directories,点击Additional Include Directories的<Edit...>下拉选项。

image

添加Vulkan,GLFW和GLM的头文件目录:

image

接着,打开Linker -> General:

image

添加Vulkan和GLFW的库目录:

image

打开 Linker -> Input,点击Additional Dependencies的<Edit...>下拉选项:

image

添加Vulkan和GLFW的库文件:

image

现在可以关闭项目属性对话框了。如果一切顺利,我们的代码编辑器里已经没有任何高亮出的错误代码了。

最后,确认我们的代码在64位模式下编译:

image

然后,按下F5编译运行,你就会看到下面的窗口:

image

控制台窗口显示的扩展数应该是非0的。至此,我们就配置好了Vulkan的开发环境!