概述
本章节先简要介绍Vulkan概念,以及它所解决的问题。然后,我们介绍使用Vulkan来绘制一个三角形的步骤。最后,我们将会介绍Vulkan API的基本结构和使用方式。
Vulkan起源
以往大多数图形API设计为采用固定功能的渲染管线,应用程序需按照一定格式提交顶点数据,配置光照和着色选项。
随着显卡架构逐渐成熟,图形硬件开始提供越来越多的可编程功能,这些新功能都必须以某种方式与现有的 API 集成。这么做导致驱动程序越来越复杂,应用程序开发者要处理的兼容性问题也越来越多。随着移动浪潮的到来,人们对移动GPU的要求也越来越高,但以往的图形API不能够对图形硬件进行精准地控制来提升效率,对多线程的支持也非常有限,导致没有发挥出图形硬件真正的潜力。
Vulkan设计为一个全新的跨平台图形API,由于没有历史包袱,Vulkan完全按照现代图形架构设计,它提供了更加详细的API给开发者,大大减少了驱动程序的开销,允许多个线程并行创建和提交指令,使用标准化的着色器字节码,将图形和计算功能进行了统一。
画三角形的步骤
现在,我们介绍如何使用Vulkan绘制一个最简单的三角形 ,这里用到的所有概念会在下一章节进行详细说明,本章目的是为了让您对所有用到的组件有一个大致的了解。
步骤1:创建实例和选择物理设备
Vulkan应用程序从一开始就要创建VkInstance,然后才能使用其他Vulkan API。创建VkInstance后,就可以查询Vulkan支持的硬件,选择其中一个或多个VkPhysicalDevices进行操作。我们可以查询设备属性,从中选择一个适合我们的设备。
步骤2:逻辑设备和队列族
选择了合适的硬件设备后,我们需要创建一个逻辑设备VkDevice,创建参数可以选择使用哪些VkPhysicalDevice特性(比如多视口,64位浮点),还需要指定使用的队列族。Vulkan将诸如绘制指令、内存操作等指令提交到VkQueue来异步执行。队列由队列族分配,每个队列族支持一个特定的操作集合。例如,图形、计算和内存传输操作分属于不同的队列族。队列族只是选择物理设备时的一个参考,一个支持Vulkan计算的设备可能没有图形功能,但当今支持Vulkan的显卡设备通常都支持所有队列操作。