ArTextureUpdateMode
が AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
に設定されている場合、ArSession_update()
が呼び出されると、ARCore は Android ハードウェア バッファを提供します。このハードウェア バッファは、Vulkan の VkImage
にバインドできます。
サンプル アプリケーションを表示する
Vulkan レンダリングのサポートは、hello_ar_vulkan_c サンプルアプリで示されています。
ハードウェア バッファ出力モードを有効にする
設定された ArTextureUpdateMode
によって、ARCore がカメラのテクスチャを更新する方法が決まります。AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
に設定すると、ARCore は AHardwareBuffer
を介してカメラ画像を提供します。
AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
を使用するようにセッションを構成します。
ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); ArConfig_setTextureUpdateMode(ar_session, ar_config, AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); ArConfig_destroy(ar_config);
ハードウェア バッファを取得する
AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
が有効になっている場合は、ArFrame_getHardwareBuffer()
を使用してハードウェア バッファを取得します。
void* native_hardware_buffer = NULL; ArFrame_getHardwareBuffer(ar_session, ar_frame, &native_hardware_buffer); if ((int64_t)native_hardware_buffer == 0) { // The hardware buffer isn't ready yet. return; }
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)以降で必要な拡張機能を備えている必要があります。