Vulkan简介

Vulkan是Khronos组织开发的一套高级图形API。其他的图形API(例如OpenGL和Direct3D)要求驱动实现从高层API到适配硬件的必要转换。当时的目的是保证开发者不必去管理关于图形硬件的更复杂的细节。

随着这些老旧的图形API不断地发展,它们逐渐把越来越多的底层硬件功能直接暴露给开发者。开发者要求硬件底层访问权,权衡手持设备的便捷性和安全性,这造成了高开销低性能。

Vulkan被设计用来避免高级功能API中的高开销。这也带来一个结果,Vulkan开发者在创建一个Vulkan应用时需要考虑更多的细节。但这也使开发者能更高效地管理应用资源和GPU硬件。因为开发者会对应用资源的使用模式有更多的了解,也不必再像其他API那样被迫费力地做出假设。

另外,Vulkan不仅面向高级终端系统,也面向低级终端移动设备,旨在成为比其他图形API更加跨平台的API。

关于教程目的

本教程的目的是指导你逐步完成创建简单Vulkan应用的过程。并学习Vulkan的基础知识。本教程和LunarG开发的示例程序代码是同步的。随着你学习本教程,你会看到这些示例程序的实际代码,这些代码会说明开发一个简单Vulkan应用所需的每一步。最后,你会获得一个完整Vulkan程序。你可以以此为起点学习更多关于Vulkan的东西。

如果想知道本示例程序的概况,请访问 LunarG Samples Progression Index.

如何使用示例教程

本教程和示例代码同步学习是最高效的。我们建议你搭建好开发环境以便下载编译 LunarG Vulkan Samples GitHub repository。请根据代码库根目录下README文件中的说明来安装编译示例必需的工具和开发包。这些示例存放在代码库API-Samples目录下。一旦能编译并运行这些示例后,你就可以开始本教程了。

在你查看示例代码时,如果能轻松访问到vulkan.h头文件会很有帮助。这个文件可以在Vulkan SDK的include文件夹中找到,也可能在Vulkan-Headers代码库里,或者在你系统的其他安装目录。

Vulkan规范文档是Vulkan信息的宝贵来源。你可以在 Vulkan SDK Download site 或 Khronos Vulkan Registry 找到它。尽管在你学习示例的过程中不必严格要求遵循这些规范,但你可能会发现这些规范对于深度理解Vulkan很有帮助。

示例代码策略

这些示例通过仅展示相关主题的代码,实现了专注于一个特定的主题。与前面涵盖主题相关的代码通常会被封装到函数里供主程序调用,这样“旧”主题的代码就不会掺杂到当前主题相关的代码里。你随时可以跳转到这些函数里,来更新你对之前主题的理解。

示例程序中专注于特定主题的部分和涵盖“旧”主题的函数之间用注释来区分开,如下所示:

init_instance(info, sample_title);
init_enumerate_device(info);
init_window_size(info, 500, 500);
init_connection(info);
init_window(info);
init_swapchain_extension(info);
init_device(info);
...
/* VULKAN_KEY_START */

... code of interest

/* VULKAN_KEY_END */
...
destroy_device(info);
destroy_window(info);
destroy_instance(info);