Config.TextureUpdateMode
が TextureUpdateMode.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)以降に必要な拡張機能が必要です。