Vulkan Cookbook 第二章 1 创建启用了WSI扩展的Vulkan实例

创建启用了WSI扩展的Vulkan实例

译者注:示例代码点击此处

为了能够在屏幕上正确显示图像,我们需要启用一组WSI扩展。 它们分为实例级和设备级,具体取决于它们引入的功能。 第一步是创建一个Vulkan实例,其中包含一组启用的扩展,允许我们创建一个表示表面 - 应用程序窗口的Vulkan表示。

怎么做...

在windows操作系统上:
1.准备一个名为instanceVkInstance类型变量。
2.准备名为desired_extensionstypestd::vector<charconst*>类型变量。在desired_extensions中储存要启用的所有扩展名的名称。
3.使用VK_KHR_SURFACE_EXTENSION_NAME值将另一个元素添加到desired_extensions向量。
4.使用VK_KHR_WIN32_SURFACE_EXTENSION_NAME值将另一个元素添加到desired_extensions向量。
5.创建一个Vulkan实例对象,为其启用desired_extensions变量中指定的所有扩展(请参阅第一章的创建Vulkan实例)。

在具有XILB接口的X11窗口的Liunx操作系统上:
1.准备一个名为instanceVkInstance类型变量。
2.准备名为desired_extensionstypestd::vector<charconst*>类型变量。在desired_extensions中储存要启用的所有扩展名的名称。
3.使用VK_KHR_SURFACE_EXTENSION_NAME值将另一个元素添加到desired_extensions向量。
4.使用VK_KHR_XLIB_SURFACE_EXTENSION_NAME值将另一个元素添加到desired_extensions向量。
5.创建一个Vulkan实例对象,为其启用desired_extensions变量中指定的所有扩展(请参阅第一章的创建Vulkan实例)。

在具有XCB接口的X11窗口的Liunx操作系统上:
1.准备一个名为instanceVkInstance类型变量。
2.准备名为desired_extensionstypestd::vector<charconst*>类型变量。在desired_extensions中储存要启用的所有扩展名的名称。
3.使用VK_KHR_SURFACE_EXTENSION_NAME值将另一个元素添加到desired_extensions向量。
4.使用VK_KHR_XCB_SURFACE_EXTENSION_NAME值将另一个元素添加到desired_extensions向量。
5.创建一个Vulkan实例对象,为其启用desired_extensions变量中指定的所有扩展(请参阅第一章的创建Vulkan实例)。

这个怎么运作...

实例级扩展负责管理创建和销毁表示层。它是应用程序窗口的(跨平台)表示。通过它,我们可以检查是否能够绘制到窗口(显示图像,呈现文稿,队列系列的附加属性),它的参数是什么,或支持什么样的呈现模式(如果我们想要垂直)同步启用或禁用)。
表示表面(presentation surface)直接连接到我们的应用程序窗口,因此只能以特定于给定操作系统的方式创建它。这就是为什么通过扩展引入此功能的原因,并且每个操作系统都有自己的扩展来创建表示层。在Windows操作系统系列中,此扩展名为VK_KHR_win32_surface。在具有XILB接口的X11窗口的Liunx操作系统系列中,此扩展名为VK_KHR_xlib_surface。在具有XCB窗口系统的Linux操作系统系列中,此扩展名为VK_KHR_xcb_surface。
通过称为VK_KHR_surface的附加扩展来启用销毁表示表面的功能。它适用于所有操作系统。因此,为了正确管理表示表面,检查其参数并验证呈现给它的能力,我们需要在Vulkan实例创建期间启用两个扩展。

提示:
VK_KHR_win32_surface和VK_KHR_surface扩展在Windows系统上引入了创建和销毁表示表面的功能。
VK_KHR_xlib_surface和VK_KHR_surface扩展在使用X11窗口系统和XLIB接口的Linux系统上引入了创建和销毁表示表面的功能。
VK_KHR_xcb_surface和VK_KHR_surface扩展在使用X11窗口系统和XCB接口的Linux系统上引入了创建和销毁表示表面的功能。

为了创建支持创建和销毁表示表面的函数的Vulkan实例,我们需要准备以下代码:

desired_extensions.emplace_back( VK_KHR_SURFACE_EXTENSION_NAME ); desired_extensions.emplace_back(
#ifdef VK_USE_PLATFORM_WIN32_KHR
  VK_KHR_WIN32_SURFACE_EXTENSION_NAME

#elif defined VK_USE_PLATFORM_XCB_KHR 
  VK_KHR_XCB_SURFACE_EXTENSION_NAME

#elif defined VK_USE_PLATFORM_XLIB_KHR 
  VK_KHR_XLIB_SURFACE_EXTENSION_NAME
#endif 
);

return CreateVulkanInstance( desired_extensions, application_name, instance );

在上面的代码中,我们从一个vector变量开始,其中包含我们想要的所有扩展名。
存储并启用。 然后,我们将所需的WSI扩展添加到向量中。 这些扩展的名称是预处理器定义提供的。 它们在vulkan.h文件中定义。 有了它们,我们不需要记住扩展的确切名称,如果我们犯了错误,编译器会告诉我们它。
在完成所需扩展列表的准备工作之后,我们可以按照第1章实例和设备中的创建Vulkan实例内容中所述的相同方式创建Vulkan实例对象。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值