《Vulkan Tutorial》 学习笔记汇总
#准备
Ch 00 Introduction:简单的介绍 Vulkan API 的背景和设计目标。
Ch 01 Overview:介绍 Vulkan 和它的优点,以及绘制一个三角形所需要的步骤和其中设计的部分概念,同时也介绍了 Vulkan API 的约束。
Ch 02 Development environment:介绍如何配置一个 Vulkan 的开发环境,在本章的结束可以运行一个空窗口的应用,其中查询并打印设备支持的拓展数量。
#Drawing a triangle
#Setup
Ch 03 Base Code:绘制一个三角形的基本代码结构,定义了 HelloTriangleApplication
类的基本结构,包含了 initVulkan
/ mainLoop
/ cleanup
等函数。
Ch 04 Instance:创建一个 Vulkan 的 Instance,Instance 是应用与 Vulkan 库的连接,在创建过程中会有相应的操作告知 Driver 你的应用的一些细节。
Ch 05 Validation Layers:Validation Layer 是 Vulkan 的一个调试工具,它会在运行时检查 API 调用的正确性,帮助开发者发现潜在的错误。
Ch 06 Physical devices and queue families: 选择符合要求的物理设备和 Queue Family,物理设备是 Vulkan 的一个重要概念,它表示了一个支持 Vulkan 的 GPU 设备,Queue Family 则是物理设备的一个属性,表示了该设备支持的命令队列类型。
Ch 07 Logical device and queues:创建 Logical Device(VkDevice
)与 Physical Devices (VkPhysicalDevice
)交互,在创建 Logical Devices 时还需要指定需要从 Physical Devices 的 Queue Family 中创建多少 Queue。
#Presentation
Ch 08 Window Surface:创建 Surface 用于建立 Vulkan 和 Window 系统之间的连接,Surface 是对于系统中的窗口或显示设备的抽象,应用通过与 Surface 的交互来实现与系统窗口的访问。
Ch 09 Swap Chain:在 Vulkan 中必须显式的创建 Swap Chain。SwapChain 是与 Surface 绑定的数据结构,其包含了多个 Image,应用渲染时会将渲染的结果放置到这些 Image 中,当调用 Present 时,SwapChain 会将这些 Image 通过其与 Surface 绑定,传递给 Surface,Surface 再将这些 Image 显示到平台的窗口或屏幕上。
Ch 10 Image Views:为了使用在 Swap Chain 最后获取的 VkImage,需要首先创建 VkImageView 对象。该对象作为外部对这个 Image 的 View,即该对象描述了该如何访问 Image,以及需要访问 Image 的哪一部分。
#Graphics pipeline basics
Ch 11 Graphics Pipeline Introduction:Vulkan 中需要自己设定图形渲染管线,在一些旧的图形 API 如 OpenGL 中,时可以通过一些函数修改渲染管线的,如通过 glBlendFunc
修改管线中对于混合的操作。但在 Vulkan 中管线几乎是完全不变的,因此每当需要修改管线设置,就必须重新创建管线
Ch 12 Shader Modules:VkShaderModule 类用以封装和管理已编译好的着色器代码,本节将说明如何创建 Shader Module,以及如何将其传递给渲染管线的特定阶段。
Ch 13 Fixed Functions:在这一节中,会设定创建 Pipeline 中除了 Shader Modules 剩下的固定函数的一些操作,如 Viewport Size / Color Blending 模式,这些在 Vulklan 中都需要在创建渲染管线时设定
Ch 14 Render Passes
Ch 15 Conclusion
#Drawing
#Reference
Understanding Vulkan® Objects - AMD GPUOpen:Vulkan 中各关系的示意图
GitHub - David-DiGioia/vulkan-diagrams: Diagrams showing relationships between Vulkan objects and how they’re used.:另一个看上去更详细的关于 Vulkan 中 Object 的关系示意图