返回 登录
0

没有任何秘密的 API:Vulkan* 简介第 1 部分:序言

目录

教程 1: Vulkan* – 序言
加载 Vulkan Runtime 库并获取导出函数指示器
获取全局级函数指示器
创建 Vulkan 实例
获取实例级函数指示器
创建逻辑设备
设备属性
设备特性
队列、队列家族和命令缓冲区
获取设备级函数指示器
检索队列
Tutorial01 执行
清空
结论

前往第 2 部分
教程 1:Vulkan* – 序言

我们从不显示任何内容的简单应用开始。 因为教程太长,因此本文不展示完整的源代码(以及窗口、渲染循环等)。 大家可以访问 https://github.com/GameTechDev/IntroductionToVulkan,在提供的示例中获取包含完整源代码的示例项目。 此处我仅展示与 Vulkan 相关的部分代码。 在应用中使用 Vulkan API 的方法有多种:

可以动态加载驱动程序的库来提供 Vulkan API 实施,并自己获取它提供的函数指示器。
可以使用 Vulkan SDK 并链接至提供的 Vulkan Runtime (Vulkan Loader) 静态库。
可以使用 Vulkan SDK,在运行时动态加载 Vulkan Loader 库,并通过它加载函数指示器。
不建议使用第一种方法。 硬件厂商可以任意修改它们的驱动程序,从而可能影响与特定应用的兼容性。 甚至还会破坏应用,并要求开发人员编写支持 Vulkan 的应用,以覆写部分代码。 这就是为什么最好使用部分抽象层的原因。

建议使用 Vulkan SDK 的 Vulkan Loader。 它能够提供更多配置功能和更高的灵活性,无需修改 Vulkan 应用源代码。 有关灵活性的一个示例是层。 Vulkan API 要求开发人员创建严格遵守 API 使用规则的应用。 如果出现错误,驱动程序几乎不会提供反馈,仅报告部分严重且重大的错误(比如内存不足)。 因为使用该方法,所以 API 本身能够尽可能的小、快。 但如果我们希望获得更多有关哪些地方出错的信息,那么必须启用调试/验证层。 不同的层级用途各不相同,比如内存使用、相应参数传递、对象寿命检查等等。 这些层级都会降低应用的性能,但会为我们提供更多信息。

我们还需选择是静态链接至 Vulkan Loader ,还是动态加载并在运行时由我们自己获取函数指示器。 选择哪一种只是个人喜好问题。 本文将重点介绍第三种使用 Vulkan 的访问,从 Vulkan Runtime 库动态加载函数指示器。 该方法与我们希望在 Windows* 系统上使用 OpenGL* 时的做法类似,采用该方法时,默认实施仅提供部分基础函数。 剩下的函数必须使用 wglGetProcAddress() 或标准窗口 GetProcAddress() 函数动态加载。 这就是创建 GLEW 或 GL3W 等 wrangler 库的对象。

加载 Vulkan Runtime 库并获取导出函数指示器

在本教程中,我们将逐步介绍如何自己获取 Vulkan 函数指示器。 我们从 Vulkan Runtime 库 (Vulkan Loader) 加载这些指示器,该运行时库应与支持 Vulkan 的显卡驱动程序一同安装。 面向 Vulkan 的动态库 (Vulkan Loader) 在 Windows* 和 Linux* 上分别命名为 vulkan-1.dll 和 libvulkan.so。

从现在起,我引用第一个教程的源代码,重点为 Tutorial01.cpp 文件。 因此在应用的初始化代码中,我们需要使用如下代码加载 Vulkan 库…查看全文


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

评论