本文档将通过下载、编译和运行几个示例应用的方式,介绍如何开始使用 Vulkan 图形库。
首先,请确保您已准备好合适的硬件和平台版本。您应使用支持 Vulkan 且搭载 Android API 级别 24 或更高级别的设备。
如需确认您的 Android 版本,请转到设置菜单,然后依次选择关于 > Android 版本。确认您已设置合适的硬件和平台版本后,您便可以下载所需的软件。
下载
首先,您必须下载多个工具和其他软件。请注意,在 Windows 主机上,建议您不要为工具和源代码使用深层文件路径层次结构;这样做是为了绕开部分 Windows 操作系统版本对文件路径的限制。
如果您还没有 Android Studio,请下载。这将包含最新的 Android SDK。
从 Android Studio 中安装 NDK 或手动下载 NDK。
导入
在本部分中,您需要下载 LunarG Vulkan© 代码库,为 API 示例生成 Android Studio 项目,然后将这些项目导入 IDE:
打开终端并将源代码下载到您的开发目录:
cd dev-directory
git clone --recursive https://github.com/LunarG/VulkanSamples.git
按照以下说明(选自在 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
设置环境变量以指定 Android NDK 和 SDK 的路径:
export ANDROID_SDK_ROOT=/path/to/sdk-directory
export ANDROID_NDK_HOME=/path/to/ndk-directory
示例的当前 targetSdk 版本为 26,因此您可能需要使用 SDK 管理器更新工具。
注意:ANDROID_NDK_ROOT 变量现已弃用,并将在未来的 Android Studio 版本中移除。Android Studio 现在会在同一个位置安装所有版本的 NDK;如需了解详情,请参阅安装 NDK 和 CMake。
打开 Android Studio。依次选择 File > Open,然后再选择 VulkanSamples/API-Samples/android/build.gradle。
“Project”窗格会显示如图 1 所示的窗口。
图 1. 导入示例后,用于显示所导入示例的 Project 窗格。
编译
Android Studio
依次选择 File > Project Structure。选择 SDK Location 并确保已设置 SDK 和 NDK 位置。
在 Android Studio 的“Project”面板中选择您的项目。
从 Build菜单中,选择 Make Module ;或选择 Build APK,以生成 APK。
解决所有依赖关系问题,然后编译。如图 2 所示,您可以选择要编译的各个项目,方法是从配置下拉菜单中选择相应的项目。
图 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,请参阅着色器编译器。