本文档概述了如何通过下载、编译和运行 Khronos© 示例应用程序来开始使用 Vulkan 图形库。
先决条件
在开始之前,请确保您已准备好正确的硬件和平台版本。您应该使用支持 Vulkan 的设备或 模拟器,运行 Android 7.0(牛轧糖),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。选择 **文件 > 打开**,然后选择
Vulkan-Samples/build/android_gradle/build.gradle
。Android Studio 加载项目后,您应该看到类似以下内容图 1. Android Studio 中的示例项目。
编译
此存储库中的所有示例都组织在一个 Android 项目中。要编译该项目,请执行以下操作之一
- 要仅编译源代码,请使用菜单 **构建 > 生成项目**,或键入 **Ctrl-F9** 快捷键。
- 要生成示例 APK,请在菜单中选择 **构建 > 生成 Bundle/APK > 生成 APK**。
您应该在 Android Studio 的 **构建** 窗口中看到构建成功消息。如果出现错误,请修复它们并重新编译。
执行
在运行示例项目之前,请确保 Android Studio 识别您的连接的 Vulkan 设备或 Android 模拟器。您应该看到类似以下内容
要运行该项目,请执行以下操作
- 使用菜单 **运行 > 运行 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” 类别的示例。
- “performance” 类别的示例。
- “extensions” 类别的示例。
- “tooling” 示例。
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 仓库 的下游。有关使用文档和获取最新版本的说明,请参阅 着色器编译器。