Vulkan 设置

本文档将通过下载、编译和运行几个示例应用的方式,介绍如何开始使用 Vulkan 图形库。

首先,请确保您已准备好合适的硬件和平台版本。您应使用支持 Vulkan 且搭载 Android API 级别 24 或更高级别的设备。

如需确认您的 Android 版本,请转到设置菜单,然后依次选择关于 <设备> > Android 版本。确认您已设置合适的硬件和平台版本后,您便可以下载所需的软件。

下载

首先,您必须下载多个工具和其他软件。请注意,在 Windows 主机上,建议您不要为工具和源代码使用深层文件路径层次结构;这样做是为了绕开部分 Windows 操作系统版本对文件路径的限制。

  1. 如果您还没有 Android Studio,请下载。这将包含最新的 Android SDK。
  2. 从 Android Studio 中安装 NDK 或手动下载 NDK

导入

在本部分中,您需要下载 LunarG Vulkan© 代码库,为 API 示例生成 Android Studio 项目,然后将这些项目导入 IDE:

  1. 打开终端并将源代码下载到您的开发目录:

    cd dev-directory
    git clone --recursive https://github.com/LunarG/VulkanSamples.git
    
  2. 按照以下说明(选自在 Android 上构建)生成适用于 Android 的示例项目:

    cd VulkanSamples/API-Samples
    cmake -DANDROID=ON -DABI_NAME=abi
    cd android
    python3 compile_shaders.py
    

    支持的 ABI 包括以下内容:

    • armeabi-v7a
    • arm64-v8a
    • x86
    • x86_64
  3. 设置环境变量以指定 Android NDK 和 SDK 的路径:

    export ANDROID_SDK_ROOT=/path/to/sdk-directory
    export ANDROID_NDK_HOME=/path/to/ndk-directory
    

    示例的当前 targetSdk 版本为 26,因此您可能需要使用 SDK 管理器更新工具

  4. 打开 Android Studio。依次选择 File > Open,然后再选择 VulkanSamples/API-Samples/android/build.gradle

“Project”窗格会显示如图 1 所示的窗口。

将示例导入 Android Studio 后的 Project 窗格

图 1. 导入示例后,用于显示所导入示例的 Project 窗格。

编译

您可以在 Android Studio 中或通过命令行编译项目。

Android Studio

  1. 依次选择 File > Project Structure。选择 SDK Location 并确保已设置 SDK 和 NDK 位置。
  2. 在 Android Studio 的“Project”面板中选择您的项目。
  3. Build菜单中,选择 Make Module <模块名称>;或选择 Build APK,以生成 APK。
  4. 解决所有依赖关系问题,然后编译。如图 2 所示,您可以选择要编译的各个项目,方法是从配置下拉菜单中选择相应的项目。
  5. 从配置下拉菜单中选择 drawcube 项目

    图 2. 选择要编译的单个项目。

命令行

使用以下命令从命令行构建项目(确保您仍位于 VulkanSamples/API-Samples/android 目录中):

./gradlew build

执行

若要运行您的项目,请依次选择 Run > Run <项目名称> 来选择要运行的 APK。

若要调试 APK,请依次选择 Run > Debug <项目名称>。例如,对于 drawcube,请运行 15-draw_cube

大多数示例都具有简单的功能来示范如何使用一个特定的 API,并且大多数都会在运行后自动停止。drawcube 示例是看上去非常有趣的示例之一,它在运行时应该会显示图 3 中的图像

. 成功运行会显示一个多色的立方体

图 3. 成功编译的程序运行并生成一个显示画面。

使用动态加载程序

这些示例会使用在 vulkan_wrapper.h/cpp 中定义的动态加载程序帮助程序函数来检索使用 dlopen()dlsym() 的 Vulkan API 指针,而不是将指针与 vulkan.so 静态地相链接。

使用此加载程序可让代码链接到 API 级别 23 及更早版本的平台。这些更早版本不包含 vulkan.so 共享库,但可在支持 Vulkan API 的设备上运行。

下面的代码段显示了如何使用动态加载程序。

#include "vulkan_wrapper.h" // Include Vulkan_wrapper and dynamically load symbols.
...
// Before any Vulkan API usage,
InitVulkan();

其他资源

  • Vulkan 规范

    Khronos Group 遵循 Vulkan 规范。请访问 Vulkan 首页,查看完整规范、培训和教程。

  • Shaderc

    NDK 中的 Shaderc 代码是 Shaderc 代码库的下游代码。如果您需要最新的 Shaderc,请参阅着色器编译器