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 を使用するデバイスは必要な拡張機能をサポートしていない可能性がありますが、Vulkan 1.1 と互換性のあるデバイスには Android 10(API レベル 29)以降に必要な拡張機能が必要です。