API概念

本小节对Vulkan API的结构进行简要的介绍。

编码约定

Vulkan的所有函数、枚举和结构体都被定义在vulkan.h中,我们可以在Vulkan SDK中找到这一头文件。在下一章节,我们会介绍如何安装Vulkan SDK。

Vulkan API的函数都带有一个小写的vk前缀,枚举和结构体名带有一个Vk前缀,枚举值带有一个VK_前缀。Vulkan对结构体非常依赖,大量函数的参数由结构体提供。比如,Vulkan创建对象的一般形式如下:

VkXXXCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_XXX_CREATE_INFO;
createInfo.pNext = nullptr;
createInfo.foo = ...;
createInfo.bar = ...;

VkXXX object;
if (vkCreateXXX(&createInfo, nullptr, &object) != VK_SUCCESS) {
    std::cerr << "failed to create object" << std::endl;
    return false;
}

Vulkan的许多结构体需要我们通过设置sType成员变量来显式指定结构体类型。结构体的pNext成员可以指向一个扩展的结构体,在本教程,我们不使用它,它被设置为nullptr。Vulkan中创建和销毁对象的函数都有一个VkAllocationCallbacks参数,可以被用来自定义内存分配器,在这里,我们不使用它,将其设置为nullptr。

几乎所有Vulkan都会返回一个VkResult来表示调用的执行情况,它的值要么是VK_SUCCESS,要么是一个错误代码。Vulkan规范文档描述了这些函数返回的错误代码的意义。