返回 登录
0

没有任何秘密的 API: Vulkan* 简介第 2 部分: 交换链

教程 2: 交换链 — 集成 Vulkan 和操作系统

欢迎观看第 2 节 Vulkan 教程。 在第 1 节教程中,我们介绍了 Vulkan 基本设置:功能加载、实例创建、选择物理设备和队列,以及逻辑设备创建。 现在您一定希望绘制一些图像! 很遗憾,我们需要等到下一节。 为什么? 因为如果我们绘图,肯定希望能够看见它。 与 OpenGL* 类似,我们必须将 Vulkan 管道与操作系统提供的应用和 API 相集成。 不过很遗憾,使用 Vulkan 时,这项任务并不简单。 正如其他精简 API 一样,这样做是有目的的 — 实现高性能和灵活性。

那么如何集成 Vulkan 和应用窗口? 它与 OpenGL 之间有何不同? 在(Microsoft Windows* 上的)OpenGL 中,我们获取与应用窗口相关的设备环境 (Device Context)。 使用时,我们需要定义“如何”在屏幕上演示图像,用“哪种”格式在应用窗口上绘制,以及应支持哪些功能。 这可通过像素格式完成。 大多数时候,我们可通过 24 位深度缓冲区和双缓冲支持(这样我们可以在“隐藏的”后台缓冲区绘图,并图像完成后在屏幕上演示图像 — 交换前后缓冲区),创建 32 位色彩平面。 只有完成这些准备工作后,才能创建并激活渲染环境 (Rendering Context)。 在 OpenGL 中,所有渲染直接进入默认的后台缓冲区。

在 Vulkan 中没有默认帧缓冲区。 我们可以创建一个不显示任何内容的应用。 这种方法非常有效。 但是如果希望显示内容,我们可以创建支持渲染的缓冲区集。 这些缓冲区及其属性(与 Direct3D* 类似)称为交换链。 交换链可包含许多图像。 如果要显示其中一些图像,我们不必“交换”(顾名思义)图像,而是演示这些图像,这意味着我们要将它们返回至演示引擎。 因此在 OpenGL 中,首先需要定义平面格式并建立它与窗口(至少在 Windows 上)的相关性,然后创建渲染环境。 在 Vulkan 中,我们首先创建实例、设备,然后创建交换链。 但有意思的是,在一些情况下,需要破坏该交换链并重新创建它。 在工作流程中, 从头开始!

请求交换链扩展

在 Vulkan 中,交换链就是一种扩展。 为什么? 我们希望在应用窗口中的屏幕中显示图像,这不是很明显吗?

并不明显。 Vulkan 可用于多种用途,包括执行数学运算、提升物理计算速度,以及处理视频流。 这些行为结果无需显示在常用显示器上,这就是核心 API 适用于操作系统的原因(与 OpenGL 类似)。

如果想创建游戏,并将渲染后的图像显示在显示器上,您可…查看全文


了解更多相关内容,请关注CSDN英特尔开发专区

评论