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 を使用するデバイスは、必要な拡張機能をサポートしていない可能性がありますが、 Android 10(API レベル 29)以降、Vulkan 1.1 と互換性のある拡張機能が必要な必要があります