Рендеринг вашего AR-приложения с помощью Vulkan на Android SDK (Kotlin/Java)

Если для Config.TextureUpdateMode установлено значение TextureUpdateMode.EXPOSE_HARDWARE_BUFFER , ARCore предоставит аппаратный буфер Android при вызове Session.update() . Этот аппаратный буфер можно привязать к Vulkan VkImage .

Посмотреть образец заявления

Поддержка рендеринга Vulkan продемонстрирована в примере приложения hello_ar_vulkan_c .

Включить режим вывода аппаратного буфера

Настроенный Config.TextureUpdateMode определяет, как ARCore будет обновлять текстуру камеры. Если для него установлено значение TextureUpdateMode.EXPOSE_HARDWARE_BUFFER , ARCore будет предоставлять изображение с камеры через HardwareBuffer .

Настройте сеанс для использования TextureUpdateMode.EXPOSE_HARDWARE_BUFFER :

Джава

Config config = session.getConfig();
config.setTextureUpdateMode(Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER);
session.configure(config);

Котлин

session.configure(
  session.config.apply { textureUpdateMode = Config.TextureUpdateMode.EXPOSE_HARDWARE_BUFFER }
)

Получить аппаратный буфер

Когда включена TextureUpdateMode.EXPOSE_HARDWARE_BUFFER , используйте Frame.getHardwareBuffer() для получения аппаратного буфера:

Джава

try {
  HardwareBuffer buffer = frame.getHardwareBuffer();
  // Use the buffer object in your rendering.
} catch (NotYetAvailableException e) {
  // The hardware buffer is not ready yet.
}

Котлин

try {
  val buffer = frame.hardwareBuffer
  // Use the buffer object in your rendering.
} catch (e: NotYetAvailableException) {
  // The hardware buffer is not ready yet.
}

Используйте аппаратный буфер во время рендеринга 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).