Config.TextureUpdateMode
が TextureUpdateMode.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 と互換性のある拡張機能が必要な必要があります。