Отрисуйте свое AR-приложение с помощью Vulkan на Android NDK (C)

Если для ArTextureUpdateMode установлено значение AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER , ARCore предоставит аппаратный буфер Android при вызове ArSession_update() . Этот аппаратный буфер можно привязать к 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_handler.cc для примера того, как визуализировать приложение AR с помощью Vulkan.

Поддерживаемые устройства

Поддержка рендеринга 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).