在 Android SDK (Kotlin/Java) 上使用 Vulkan 渲染 AR 应用

Config.TextureUpdateMode 设置为 TextureUpdateMode.EXPOSE_HARDWARE_BUFFER 时,ARCore 会在调用 Session.update() 时提供 Android 硬件缓冲区。此硬件缓冲区可以绑定到 Vulkan VkImage

查看示例应用

hello_ar_vulkan_c 示例应用演示了对 Vulkan 渲染的支持。

启用硬件缓冲区输出模式

配置的 Config.TextureUpdateMode 决定了 ARCore 更新相机纹理的方式。当它设置为 TextureUpdateMode.EXPOSE_HARDWARE_BUFFER 时,ARCore 将通过 HardwareBuffer 提供摄像头图像。

将会话配置为使用 TextureUpdateMode.EXPOSE_HARDWARE_BUFFER

Java

Config config = session.getConfig();
config.setTextureUpdateMode(Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER);
session.configure(config);

Kotlin

session.configure(
  session.config.apply { textureUpdateMode = Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER }
)

获取硬件缓冲区

启用 TextureUpdateMode.EXPOSE_HARDWARE_BUFFER 后,使用 Frame.getHardwareBuffer() 获取硬件缓冲区:

Java

try {
  HardwareBuffer buffer = frame.getHardwareBuffer();
  // Use the buffer object in your rendering.
} catch (NotYetAvailableException e) {
  // The hardware buffer is not ready yet.
}

Kotlin

try {
  val buffer = frame.hardwareBuffer
  // Use the buffer object in your rendering.
} catch (e: NotYetAvailableException) {
  // The hardware buffer is not ready yet.
}

在 Vulkan 渲染期间使用硬件缓冲区

如需查看有关如何使用 Vulkan 渲染 AR 应用的示例,请参阅 vulkan_handler.cc

支持的设备

Vulkan 渲染支持仅适用于 Android API 级别 27 及更高级别。此外,设备必须支持 VK_ANDROID_external_memory_android_hardware_buffer 扩展。

应用清单中要求使用 Vulkan

Google Play 会利用应用清单中声明的 <uses-feature>,从不符合应用硬件和软件功能要求的设备上过滤该应用。从 Android 10(API 级别 29)开始,使用 Vulkan 1.0 的设备可能无法支持所需的扩展,但与 Vulkan 1.1 兼容的设备必须具备所需的扩展。