本文档概述了如何通过下载、编译和运行 Khronos© 示例应用来开始使用 Vulkan 图形库。
前提条件
开始之前,请确保您已准备好正确的硬件和平台版本。您应使用支持 Vulkan 且运行 Android 7.0 (Nougat)(API 级别 24 或更高版本)的设备或模拟器。
您可以通过前往“设置”菜单,然后选择“关于手机”>“Android 版本”来确认您的 Android 版本。确认已设置正确的硬件和平台版本后,即可下载必要的软件。
下载
开始之前,您必须下载多个工具和其他软件。请注意,在 Windows 主机上,建议您避免工具和源代码的深层文件路径层次结构;这是为了解决某些 Windows 操作系统版本上的文件路径限制。
- 如果您还没有 Android Studio,请下载它。这其中包括最新的 Android SDK。
- 在 Android Studio 中安装 NDK 和 CMake,或单独下载并安装它们。
- 构建并运行 Hello JNI 示例,以确保 Android Studio 正常运行。
- 为您的主机平台安装 python3 和 build.md 中列出的其他组件。
导入
在本节中,您将下载 Khronos© Vulkan© 示例仓库,生成 Android Gradle 项目,然后使用 Android Studio IDE 打开它。
- 设置以下环境变量
export ANDROID_HOME=/path/to/sdk-directory export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/{your-ndk-version-dir}
- 将 CMake 添加到 $PATH,用于生成 Android 构建脚本
export PATH=$PATH:$ANDROID_HOME/cmake/{your-cmake-version}/bin
- 打开终端并将源代码下载到您的开发目录
cd dev-directory git clone --recursive https://github.com/KhronosGroup/Vulkan-Samples.git
- 按照以下说明(来自 Build.md)生成 Android 示例项目
cd Vulkan-Samples ./scripts/generate.py android
- 打开 Android Studio。选择 File > Open(文件 > 打开),然后选择
Vulkan-Samples/build/android_gradle/build.gradle
。Android Studio 加载项目后,您应该会看到类似以下内容图 1. Android Studio 中的示例项目。
编译
此仓库中的所有示例都组织在一个 Android 项目中。要编译项目,请执行以下操作之一
- 要只编译源代码,请使用菜单 Build > Make Project(构建 > 构建项目),或按快捷键 Ctrl-F9。
- 要生成示例 APK,请选择菜单 Build > Build Bundle(s)/APK(s) > Build APK(s)(构建 > 构建 Bundle(s)/APK(s) > 构建 APK(s))。
您应该会在 Android Studio 的“构建”窗口中看到构建成功的消息。如果出现错误,请修复并重新编译。

执行
运行示例项目之前,请确保 Android Studio 能识别您连接的 Vulkan 设备或 Android 模拟器。您应该会看到类似以下内容

要运行项目,请执行以下操作
- 使用菜单 Run > Run vulkan_sample(运行 > 运行 vulkan_sample),或点击工具栏上的运行按钮
,然后等待示例安装并启动到您连接的设备上。
- 在您连接的 Android 设备上,授权所需的访问请求。
- 启用允许管理所有文件,然后轻触箭头“返回”按钮以返回到示例主启动屏幕。
- 允许磁盘访问
图 4. 启用磁盘访问。
- 您应该会看到示例主菜单屏幕,类似以下内容
图 5. 示例主菜单。 - 浏览示例列表,并选择几个运行。如果您是 Vulkan 开发新手,可以从“API”示例开始。例如,轻触“Hello Triangle”应该会显示一个渲染三角形,类似以下内容
图 6. Hello Triange 示例。
您的开发系统现已设置为可在测试设备上运行示例。
Vulkan 示例是为多个操作系统(包括桌面和移动操作系统)开发的。性能、扩展和工具下的一些示例可能不稳定,并在您的设备上崩溃。这可能是由于各种原因造成的,例如
- 特定的 Vulkan 功能并非为 Android 设计。
- 您的 Android 操作系统版本不受支持。
- 您的硬件平台的 GPU 能力。
探索
Vulkan 示例的 Java 部分源自 NativeActivity 类。它将典型的应用生命周期事件(例如应用创建、启动、停止和销毁)传递给 C/C++ 代码。在示例的 C/C++ 部分,有一个示例框架实现了运行时子示例切换功能。在非常高的层次上,Android 系统事件/消息通过以下路径到达示例应用的 Vulkan 代码
NativeSampleActivity
Java 部分NativeSampleActivity
C/C++ 部分android_native_glue
代码android_main
- 示例框架
- 单个子示例代码
android_main
是 NativeSampleActivity
和应用代码之间的桥梁,您可以将其作为跟踪示例代码的起点。如果您只想关注 Vulkan 特定的源代码,可以探索 Vulkan_Samples\samples
下的代码,其中包含以下内容
- “api”类别示例。
- “性能”类别示例。
- “扩展”类别示例。
- “工具”示例。
Vulkan_Samples\shaders
是所有着色器的主目录。
您可以开始浏览“API”类别示例,以熟悉基本的 Vulkan 用法和示例框架。然后,您可以继续学习“性能”和“扩展”类别示例。对于着色器代码,您可以使用 Android Studio 中的“项目”视图。

其他资源
Vulkan API 已经经历了几个版本,因此它正在成熟。Vulkan 标准委员会和 Vulkan 社区已经创建了一套丰富的 Vulkan 资料,展示了 API 的使用和最佳实践。以下列表包含一些用于 Vulkan 应用开发的资源
Vulkan 规范。 Khronos Group 维护 Vulkan 规范。请参阅 Vulkan 主页,获取完整的规范、培训、指南和教程。
验证层。 验证层对于应用开发至关重要。有关详细信息,请参阅Android 上的 Vulkan 验证层文档。
Shaderc。 NDK 中的 Shaderc 代码是 Shaderc 仓库的下游。有关使用文档和获取最新版本的说明,请参阅着色器编译器。