Vulkan学习--6.创建交换链

交换链是最终显示给用户的图像缓冲区列表。这是设置渲染所需的所有缓冲区所需的第一步。

这是Vulkan交换链的视图,与系统的其他各个部分有关。其中一些部分是熟悉的,您将在本节中了解其余部分。
在这里插入图片描述

Vulkan和窗口系统
与其他图形API一样,Vulkan将窗口系统方面与核心图形API分开。在Vulkan中,窗口系统细节通过WSI(窗口系统集成)扩展来公开。您可以在启用了WSI内容的情况下准备的Vulkan规范文档中找到这些扩展的文档。在Vulkan SDK下载网站 和Khronos Vulkan注册表中找到的Vulkan规范 是使用此内容构建的。

WSI扩展包含对各种平台的支持。通过定义以下内容为特定平台激活扩展:

  • VK_USE_PLATFORM_ANDROID_KHR - Android
  • VK_USE_PLATFORM_WAYLAND_KHR - Wayland
  • VK_USE_PLATFORM_WIN32_KHR - 微软Windows
  • VK_USE_PLATFORM_XCB_KHR - X Window系统,使用XCB库
  • VK_USE_PLATFORM_XLIB_KHR - X Window系统,使用Xlib库

名称的“KHR”部分表示该符号是在Khronos扩展中定义的。

表面抽象

Vulkan使用该VkSurfaceKHR对象来抽象本机平台表面或窗口。此符号被定义为VK_KHR_surface扩展的一部分。WSI扩展中的各种功能用于创建,操作和销毁这些表面对象

实例扩展

要使用WSI扩展,您需要激活常规表面扩展。init_instance_extension_names()在示例中查找函数中的代码,该代码将添加VK_KHR_SURFACE_EXTENSION_NAME到要加载的实例扩展列表中。

info.instance_extension_names.push_back(VK_KHR_SURFACE_EXTENSION_NAME);

另请注意,此功能确定特定于平台的扩展,具体取决于构建代码的平台。例如,如果为Windows构建,则该函数会添加 VK_KHR_WIN32_SURFACE_EXTENSION_NAME 到要加载的实例扩展列表中。

info.instance_extension_names.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);

在init_instance()函数中创建实例时会加载这些扩展。

设备扩展

交换链是GPU绘制的图像缓冲区列表,并且还呈现给显示硬件以扫描到显示器。由于是GPU硬件正在写入这些图像,因此需要使用设备级扩展来使用交换链。因此,示例代码将VK_KHR_SWAPCHAIN_EXTENSION_NAME 设备扩展添加到要加载的设备扩展列表中 init_device_extension_names()。

info.device_extension_names.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);

总结:

  • 此示例使用该init_instance_extension_names()函数将常规表面扩展和特定于平台的表面扩展加载为实例扩展。
  • 此示例使用该init_device_extension_names()函数将交换链扩展加载为设备扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力减肥的小胖子5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值