通过已启用的WSI扩展创建逻辑设备
使用已启用的WSI扩展创建Vulkan实例,并找到支持图像显示操作的队列家族后,就可以通过另一个已启用的WSI扩展创建逻辑设备。使用设备级WSI扩展可以创建交换链,交换链是由显示引擎管理的图像集合。为了使用该集合中任意一幅图像并渲染该幅图像,我们需要先获取这些图像。处理完一幅图像后,应将这幅图像交还给显示引擎。这个操作称为显示,该操作会通知驱动程序——我们想要为用户显示一幅图像(在屏幕上显示该图像)。显示引擎会根据在创建交换链过程中定义的参数显示这幅图像,而且我们只能通过已启用的交换链进行扩展,在逻辑设备上创建这幅图像。
具体处理过程
(1)获取物理设备的句柄,该物理设备应含有支持图像显示操作的队列家族,将该句柄存储在一个VkPhysicalDevice类型的变量中,并将这个变量命名为physical_device。
(2)获取队列家族名单并从每个队列家族中获取一组队列,为来自每个家族的每个队列分配优先权(由0.0~1.0的浮点型值为代表)。将这些参数存储到元素类型为自定义类型QueueInfo、名为queue_infos的std::vector
容器变量中(请参阅第1章)。注意,至少要包含一个来自支持图像显示操作家族的队列。
(3)获取应启用扩展的名单,将该名单存储在一个std::vector<char const*>
类型的变量中,将该变量命名为desired_extensions。
(4)使用VK_KHR_SWAPCHAIN_EXTENSION_NAME预处理指令(用于定义交换链扩展的名称,以避免键入错误),为desired_extensions变量增加一个元素。
(5)使用存储在physical_device和queue_infos变量中的参数,与所有通过vector容器desired_extensions变量启用的扩展,创建逻辑设备。
具体运行情况
当想要在屏幕上显示图像时,需要在创建逻辑设备的过程中启用一个设备级扩展。该扩展名为VK_KHR_swapchain,使用它可以创建交换链。
交换链定义的参数与OpenGL API中默认的绘图缓冲区参数非常相似。这些参数用于设置渲染图像的格式、图像的数量(双缓冲区或三缓冲区模式)和显示模式(启用或禁用垂直同步)等功能。随交换链创建的图像归属于显示引擎,并由显示引擎管理,我们无法自行创建或销毁它们。不通过显示引擎,我们甚至无法使用这些图像。当想要在屏幕上显示图像时,需要先从交换链中获取这幅图像,渲染该图像,然后将这幅图像交还显示引擎(以便显示它)。
TIP VK_KHR_swapchain扩展定义了设置一组可显示图像的功能,即获取图像然后在屏幕上显示图像。
VK_KHR_swapchain扩展定义了上述功能。要在创建逻辑设备的过程中启用该扩展,可使用下列代码。

要了解创建逻辑设备的代码,请参阅第1章。此处我们只需要牢记:必须查明具体的物理设备是否支持VK_KHR_swapchain扩展,确认该信息后,应将VK_KHR_swapchain扩展添加到应启用扩展的名单中。
扩展的名单是通过预处理指令VK_KHR_SWAPCHAIN_EXTENSION_NAME设置的,该指令的定义存储在vulkan.h头文件中,它可以帮助我们避免在键入扩展名单时出错。
酷客网相关文章:
评论前必须登录!
注册