Skip to content

门泊吴船亦已谋

Vulkan 画三角形「十五」 总结

现在我们已经成功地渲染并在屏幕上展示了一个三角形,更重要的是,我们把 Vulkan 中的大部分知识都过了一遍,现在让我们来回顾一下它的每个步骤

  • 创建 Vulkan 实例

    通过实例,我们可以把应用程序跟 Vulkan 库连接起来,也能记录应用程序的信息以供未来可能的优化

  • 创建表面

    表面是不同平台的窗体系统的抽象,我们可以使用表面将渲染好的图像展示到窗体系统中

  • 选取物理设备

    检查显卡支持并选择合适的显卡。简单说应当优先选择独显,但是本系列文章中,我们为了避免麻烦,选择了比较常见的集显

  • 创建逻辑设备

    是物理设备的抽象,用于跟物理设备进行交互。在创建逻辑设备之后可以

  • 创建交换链

    交换链依赖于表面,负责管理图像的展示。可以配置缓冲模式比如垂直同步或三重缓冲等。在渲染时需要向交换链请求一个空闲的图像,渲染完成后通知交换链把该图像展示到表面上

  • 创建图像视图

    我们不能直接对图像进行操作,需要为每一个图像创建图像视图来限定访问图像的指定部分

  • 创建渲染路径

    一条渲染路径由多个子路径组成,每个子路径需要指定帧缓冲区附着的相关信息,比如使用了多少个附着,各个附着的图像布局、图像格式等具体信息

  • 编写并编译着色器

    使用 GLSL 语言编写顶点着色器和片元着色器,并使用 glslc 命令行工具编译为 Vulkan 中可用的 SPIR-V 字节码

  • 创建图形流水线

    指定图形流水线中需要进行的阶段,对于可编程阶段加载着色器代码,对于固定功能阶段指定必要的参数。需要绑定渲染路径,以指定流水线用于输出的附着类型

  • 创建帧缓冲区

    帧缓冲区可由多个附着组成,这个附着其实就是图像视图。帧缓冲区在渲染的时候被绑定到渲染路径上,并用于图形流水线的渲染

  • 创建命令缓冲区

    命令缓冲区由一系列的命令组成,被一次性提交给队列执行,命令可以控制内存传递、渲染等。比如我们的命令缓冲区就依次记录了这些命令来渲染三角形:开启渲染路径、绑定渲染流水线、渲染、结束渲染路径

  • 渲染与展示

    在主循环中需要从交换链中请求一个空闲的图像,然后提交对应的命令缓冲区到图形队列,从而把三角形渲染在该图像中,最后把该图像提交到展示队列,显示到屏幕上