Vulkan 设置

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

开始之前,请确保已经准备好合适的硬件和平台版本。您应使用至少运行 Android N Developer Preview 2 版本的以下设备之一:

  • Nexus 6P。
  • Nexus 5X。
  • Nexus Player。

您可以转到 Settings 菜单并选择 About <设备> > Android Version 确认您的 Android 版本。确认设置好合适的硬件和平台版本后,您可以下载所需的软件。

下载

开始之前,您必须下载多个工具和其他软件。

  1. 如果您尚未安装 Android Studio,请下载
  2. 下载 NDK r12-beta。
  3. 下载并安装 Android N-Preview SDK
  4. (可选)通过导航到 &lt;ndk-root&gt;/sources/third_party/shaderc/ 并运行以下命令的方式在 NDK r12-beta 中构建 shaderc:
    ../../../ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk \
     APP_STL:=c++_shared APP_ABI=all libshaderc_combined
    
    您可以将 APP_STL 指定为 gnustl_staticgnustl_sharedc++_staticc++_shared
  5. 打开终端窗口,并使用 git 从 Android Vulkan 示例所在的存储区克隆示例。
    $ git clone https://github.com/googlesamples/vulkan-basic-samples.git
    
  6. 导航到 LunarGSamples/ 目录,这是您在上一步中检出的本地存储区。
  7. 输入以下命令以更新 gslang 源:
    $ ./update_external_sources.sh -s -g
    

测试安装

要确认 Vulkan 已正确设置,您可以使用部分用于测试目的的 Vulkan API 示例组对其进行测试。 按照以下步骤操作,构建并执行这些示例:

  1. (可选)输入以下命令以构建源:
    $ cd API-samples
    $ cmake -DANDROID=ON -DANDROID_ABI=[armeabi-v7a|arm64-v8a| x86|x86_64|all(default)]
    
  2. 将示例导入到 Android Studio 中。为此,请选择 File > Import project (Eclipse, ADT, Gradle),然后选择 LunarGSamples/API-Samples/android 目录。

    您可能会看到指示组件或 SDK 版本缺失的错误。请忽略此错误消息,然后按照安装提示操作。

    几分钟后,Project 窗格应显示如图 1 所示的窗口。

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

    图 1. 显示已导入示例的 Project 窗格。

编译您的项目

要编译您的项目,请按以下步骤操作:

  1. 在 Android Studio 的 Project 面板中选择项目。
  2. Build 菜单中,选择 Make Module <模块名称> ;或者选择 Build APK 以生成 APK。
  3. 解决任何依赖关系问题,然后编译。如图 2 所示,您可以从配置下拉菜单中选择要编译的各个项目。
  4. 选择

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

注:其他教程示例说明了使用已集成到 Android Studio 中的离线编译功能编译的着色器。 为简便起见,每个教程都是独立的,并根据标准的 Android Studio 构建程序构建。

运行您的项目

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

要调试 APK,请选择 Run > Debug <项目名称>。 对于每个项目,都有一个 Java 版本和原生(C 或 C++)版本。 运行原生版本的应用。 例如,对于 drawcube,请运行 drawcube-native。

大多数示例都具有简单的功能,而大多数都会在运行后自动停止。 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();