Vulkan教程,Vulkan是一款革命性的高性能3D图形和计算API,可用于现代GPU管线架构,能满足社区的最新需求。该API提供了一套全新的方法来克服传统API的复杂性和缺陷。Vulkan是一个显式API,保证用户在渲染时保持稳定平滑的帧速率,不会造成延迟或者故障。
著名的OpenGL API问世已经差不多四分之一个世纪,而且它还在不断发展。本质上来说,OpenGL是一个纯粹的状态机,其中包含了若干个开关量,可以设置为开/关的状态(on/off)。这些状态数据被用来构建设备中的依赖映射关系,对资源进行管理,并通过最优的方法进行控制以达到性能的最大化。
这种状态机可以隐式地自动化资源管理,但是它对应用程序逻辑的解读不够智能化,而应用程序正是资源管理背后的驱动力所在。其产生的结果可能是用户无法预测的,比如实现中断,导致着色器代码被重新编译,但是应用程序并不需要系统这么做。此外,OpenGL API也会受到其他因素的限制,例如不可预测的程序行为、多线程的扩展性、渲染的故障等。
Khronos于2016发布了革命性的新架构Vulkan API,它充分利用了现代图形处理器单元的优势,来实现高性能图形和计算应用程序的开发。Khronos是一个会员制的社区和专注于发布开放标准和免费API的组织。更多信息请参阅网站:https://www.khronos.org。
Vulkan的原始概念是由AMD基于它们的私有Mantle API设计和实现的。这个API已经在几款不同的游戏中体现了自己的先进特性,它有着革命性的实现方案,完全满足了工业界的竞争性需求。AMD开源了自己的Mantle API并且贡献给Khronos组织。在多家硬件和软件供应商的协同帮助下,Khronos发布了Vulkan标准。
Vulkan并不是目前唯一的新一代3D图形API,它还有多家不同的竞争者,例如Microsoft的Direct-X 12和Apple的Metal。不过,Direct-X只能用于不同的Windows系统,而Metal只能用在Mac系统(OS X和iOS)。因此,Vulkan得以脱颖而出。它的跨平台特性可以支持所有现存的OS平台,其中已经包括了Windows(XP、Vista、7、8、10)、Linux、Tizen、SteamOS和Android。如图所示。

相关知识
- C语言 C语言是应用最为广泛的一种高级程序设计语言,它不仅是计算机专业学生的必修课,也是许多非计算机专业学生所青睐的技术学科。C语言功能丰富,表达能力强,使用灵活方便,程序效率高,是结构化程序设计语言。C语言具有很强的实用性,既可用来编写应用软件,也适合于编写系统软件。
重要术语
在开始深入学习基础知识之前,我们首先了解一些Vulkan中的重要术语:
- 物理设备(
physical device
)与设备(device):一台计算机系统中可能包含了不止一个支持Vulkan的物理硬件设备。我们所说的物理设备表示一个独立的设备,而设备指的是该物理设备在应用程序中的逻辑表示。 - 队列(
queue
):队列表示执行引擎与应用程序之间的接口。一个物理设备总是包含了一个或者多个队列(图形、计算、DMA/传输,等等)。队列的职责是收集准备执行的工作(指令缓存)并且分发到物理设备执行。 - 内存类型(
memory type
):Vulkan暴露了多种内存类型。广义上来说,总共有两种类型的内存:宿主内存和设备内存。在本章后面的内容里,我们会讨论这些内容。 - 指令(
command
):每个指令中都可以执行一些用户行为。指令从广义上可以划分为动作、状态设置,以及同步。 - 动作指令(
action command
):包括绘制图元、清除表面、复制缓存、查询/时间戳操作,以及子通道的开始/结束操作。这些指令可以修改帧缓存附件、读取或者写入内存(缓存或者图像),以及写入查询池。 - 状态设置指令(
set state command
):这些指令可以用来绑定流水线、描述字集合以及缓存,或者设置一个动态状态,以及渲染通道/子通道的状态。 - 同步指令(
synchronization command
):同步指令用于处理两个或者更多动作指令同时发生的情况,此时指令之间可能会争夺资源或者依赖于某些内存。该指令用来设置同步事件或者等待事件、插入流水线屏障对象,以及渲染通道/子通道的依赖。 - 指令缓存(
command buffer
):指令缓存是一组指令的集合,它可以记录多个指令并统一发送到队列中。
文章目录
- Vulkan教程
- Vulkan与OpenGL的对比
- Vulkan 基本原理
- Vulkan 功能组件
- Vulkan 编程模型
- 第一个Vulkan程序
- Vulkan 使用LunarG SDK
- Vulkan 使用CMake构建工程
- Vulkan 扩展简介
- 创建Vulkan实例
- Vulkan 物理设备和逻辑设备
- Vulkan 队列和队列族
- Vulkan 设备和队列的整合
- Vulkan 调试方法
- Vulkan LunarG验证层及其特性
- Vulkan 程序中实现调试
- Vulkan 使用指令缓存
- Vulkan 指令池和指令缓存API
- Vulkan 记录指令缓存
- Vulkan 实现指令缓存
- 管理Vulkan内存
- Vulkan 什么是图像资源
- Vulkan 创建图像视图
- Vulkan 内存分配和图像资源的绑定
- Vulkan 交换链简介
- Vulkan 渲染器
评论前必须登录!
注册