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

Config.TextureUpdateModeTextureUpdateMode.EXPOSE_HARDWARE_BUFFER に設定されている場合、Session.update() が呼び出されると、ARCore は 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 と互換性のある拡張機能が必要な必要があります