1)实例的概念
vulkan的层级实际上是一个挺麻烦的东西,因为它包含了太多的内容和概念。实际上对于一个应用程序来说,举个例子,一个游戏的app,它并不是直接进行图像画面的渲染,而是通过vulkan来实现的渲染,那么这里应用程序就是通过创建vulkan实例来进行图像渲染的操作。
实际上vulkan就是一个子系统的概念。应用程序把渲染的这些任务统一交给vulkan来处理,通过这种子系统的方式,app不需要知道太多的细节,但是它还是需要与vulkan子系统进行状态的追踪,信息的交互,这些必须要有一个媒介,这个就是instance。
2) 实例创建
实例用如下的函数创建:1
2
3
4
5// Provided by VK_VERSION_1_0
VkResult vkCreateInstance(
const VkInstanceCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkInstance* pInstance);
第一个参数是指向创建instance需要传入的结构体的指针,第二个参数一般是NULL,第三个参数是指向创建的结构体的指针。
VkInstanceCreateInfo结构体如下所示:1
2
3
4
5
6
7
8
9
10
11// Provided by VK_VERSION_1_0
typedef struct VkInstanceCreateInfo {
VkStructureType sType;
const void* pNext;
VkInstanceCreateFlags flags;
const VkApplicationInfo* pApplicationInfo;
uint32_t enabledLayerCount;
const char* const* ppEnabledLayerNames;
uint32_t enabledExtensionCount;
const char* const* ppEnabledExtensionNames;
} VkInstanceCreateInfo;
其中VkApplicationInfo 的结构图下所示1
2
3
4
5
6
7
8
9
10// Provided by VK_VERSION_1_0
typedef struct VkApplicationInfo {
VkStructureType sType;
const void* pNext;
const char* pApplicationName;
uint32_t applicationVersion;
const char* pEngineName;
uint32_t engineVersion;
uint32_t apiVersion;
} VkApplicationInfo;
上面的内容,通过参数的名称也大概能猜出是什么意思,就不再介绍了。
注:
实际上vulkan的命令,大多数都是上面的这种模式,通过各种复杂的结构体(还包括结构体套结构体)来创建各种结构,并通过结构体指针参数得到创建的结果。
参考文献:
https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Instance
https://www.khronos.org/registry/vulkan/specs/1.2/pdf/vkspec.pdf
vulkan应用开发指南