Android SDK(Kotlin/Java)で Vulkan を使用して AR アプリをレンダリングする

Config.TextureUpdateModeTextureUpdateMode.EXPOSE_HARDWARE_BUFFER に設定されている場合、ARCore は Session.update() が呼び出されたときに Android ハードウェア バッファを提供します。このハードウェア バッファは Vulkan VkImage にバインドできます。

サンプル アプリケーションを表示する

Vulkan レンダリングのサポートについては、hello_ar_vulkan_c サンプルアプリをご覧ください。

ハードウェア バッファ出力モードを有効にする

設定された 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> を使用して、 アプリがハードウェアやソフトウェアの機能要件を満たしていないデバイスから制限されることがあります。 Vulkan 1.0 を使用するデバイスは、必要な拡張機能をサポートしていない可能性がありますが、 Android 10(API レベル 29)以降、Vulkan 1.1 と互換性のある拡張機能が必要な必要があります