Android NDK で Vulkan を使用して AR アプリをレンダリングする(C)

ArTextureUpdateModeAR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER に設定されている場合、ARCore は ArSession_update() が呼び出されたときに 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)以降に必要な拡張機能が必要です。