Vulkan 入门

本文档概述了如何通过下载、编译和运行 Khronos© 示例应用来开始使用 Vulkan 图形库。

前提条件

开始之前,请确保您已准备好正确的硬件和平台版本。您应使用支持 Vulkan 且运行 Android 7.0 (Nougat)(API 级别 24 或更高版本)的设备或模拟器

您可以通过前往“设置”菜单,然后选择“关于手机”>“Android 版本”来确认您的 Android 版本。确认已设置正确的硬件和平台版本后,即可下载必要的软件。

下载

开始之前,您必须下载多个工具和其他软件。请注意,在 Windows 主机上,建议您避免工具和源代码的深层文件路径层次结构;这是为了解决某些 Windows 操作系统版本上的文件路径限制。

  1. 如果您还没有 Android Studio,请下载它。这其中包括最新的 Android SDK。
  2. 在 Android Studio 中安装 NDK 和 CMake,或单独下载并安装它们。
  3. 构建并运行 Hello JNI 示例,以确保 Android Studio 正常运行。
  4. 为您的主机平台安装 python3 和 build.md 中列出的其他组件。

导入

在本节中,您将下载 Khronos© Vulkan© 示例仓库,生成 Android Gradle 项目,然后使用 Android Studio IDE 打开它。

  1. 设置以下环境变量
    export ANDROID_HOME=/path/to/sdk-directory
    export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/{your-ndk-version-dir}
    
  2. 将 CMake 添加到 $PATH,用于生成 Android 构建脚本
    export PATH=$PATH:$ANDROID_HOME/cmake/{your-cmake-version}/bin
    
  3. 打开终端并将源代码下载到您的开发目录
    cd dev-directory
    git clone --recursive https://github.com/KhronosGroup/Vulkan-Samples.git
    
  4. 按照以下说明(来自 Build.md)生成 Android 示例项目
    cd Vulkan-Samples
    ./scripts/generate.py android
    
  5. 打开 Android Studio。选择 File > Open(文件 > 打开),然后选择 Vulkan-Samples/build/android_gradle/build.gradle。Android Studio 加载项目后,您应该会看到类似以下内容
    Importing sample project to 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 的“构建”窗口中看到构建成功的消息。如果出现错误,请修复并重新编译。

Compiling sample project with Studio.

图 2. 成功的示例构建。

执行

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

Connecting test device to Studio.

图 3. 将测试设备连接到 Android Studio。

要运行项目,请执行以下操作

  1. 使用菜单 Run > Run vulkan_sample(运行 > 运行 vulkan_sample),或点击工具栏上的运行按钮 ,然后等待示例安装并启动到您连接的设备上。
  2. 在您连接的 Android 设备上,授权所需的访问请求。
    • 启用允许管理所有文件,然后轻触箭头“返回”按钮以返回到示例主启动屏幕。
    • 允许磁盘访问
      allowing disk access.

      图 4. 启用磁盘访问。

  3. 您应该会看到示例主菜单屏幕,类似以下内容
    sample main menu.

    图 5. 示例主菜单。

  4. 浏览示例列表,并选择几个运行。如果您是 Vulkan 开发新手,可以从“API”示例开始。例如,轻触“Hello Triangle”应该会显示一个渲染三角形,类似以下内容
    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_mainNativeSampleActivity 和应用代码之间的桥梁,您可以将其作为跟踪示例代码的起点。如果您只想关注 Vulkan 特定的源代码,可以探索 Vulkan_Samples\samples 下的代码,其中包含以下内容

  • “api”类别示例。
  • “性能”类别示例。
  • “扩展”类别示例。
  • “工具”示例。

Vulkan_Samples\shaders 是所有着色器的主目录。

您可以开始浏览“API”类别示例,以熟悉基本的 Vulkan 用法和示例框架。然后,您可以继续学习“性能”和“扩展”类别示例。对于着色器代码,您可以使用 Android Studio 中的“项目”视图。

Triangle shader.

图 7. 使用 Studio 探索着色器。

其他资源

Vulkan API 已经经历了几个版本,因此它正在成熟。Vulkan 标准委员会和 Vulkan 社区已经创建了一套丰富的 Vulkan 资料,展示了 API 的使用和最佳实践。以下列表包含一些用于 Vulkan 应用开发的资源