本文档概述了如何通过下载、编译和运行 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(s)/APK(s) > 构建 APK(s)**。
您应该在 Android Studio 的 **构建** 窗口中看到构建成功的消息。如果出现错误,请修复它们并重新编译。
执行
在运行示例项目之前,请确保 Android Studio 识别您连接的 Vulkan 设备或 Android 模拟器。您应该会看到类似以下内容:
要运行项目,请执行以下操作:
- 使用菜单 **运行 > 运行 vulkan_sample**,或单击工具栏上的运行按钮 ,然后等待示例安装并在连接的设备上启动。
- 在您连接的 Android 设备上,授权所需的访问请求。
- 启用 **允许访问以管理所有文件**,然后点击箭头 **返回按钮** 返回示例主启动屏幕。
- 允许磁盘访问
图 4. 启用磁盘访问。
- 您应该会看到示例主菜单屏幕,类似于以下内容:
图 5. 示例主菜单。 - 浏览示例列表,并选择一些示例运行。如果您是 Vulkan 开发新手,可以从“API”示例开始。例如,点击“Hello Triangle”应该会显示一个类似于以下内容的渲染三角形:
图 6. Hello Triangle 示例。
您的开发系统现已设置为在测试设备上运行示例。
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 代码库 的下游。有关用法文档和获取最新版本的说明,请参阅 着色器编译器。