Vulkan 设置

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

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

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

正在下载

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

  1. 如果您还没有 Android Studio,请下载。这将包含最新的 Android SDK。
  2. 从 Android Studio 中安装 NDK 或手动下载 NDK
  3. 通过导航至 <ndk-root>/sources/third_party/shaderc/ 并执行以下命令来编译 Shaderc:
  4. 在 Mac 或 Linux 上:

        ../../../ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk \
          APP_STL:=c++_static APP_ABI=all NDK_TOOLCHAIN_VERSION:=clang libshaderc_combined \
          -j16
        

    在 Windows 上:

        ..\..\..\ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk ^
         APP_ABI=all APP_PLATFORM=android-24 APP_STL=c++_static ^
         -j8 clean libshaderc_combined
        

    要查看更多 Shaderc 文档,请参阅着色器编译器

导入

在本部分中,您需要下载 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_ROOT=/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 Repo 的下游代码。如果您需要最新的 Shaderc,请参阅着色器编译器