Renderizar seu app de RA usando Vulkan no SDK do Android (Kotlin/Java)

Quando Config.TextureUpdateMode é definido como TextureUpdateMode.EXPOSE_HARDWARE_BUFFER, o ARCore fornece um buffer de hardware do Android quando Session.update() é chamado. Esse buffer de hardware pode ser vinculado a um VkImage do Vulkan.

Conferir o aplicativo de exemplo

A compatibilidade com a renderização do Vulkan é demonstrada no app de exemplo hello_ar_vulkan_c.

Ativar o modo de saída do buffer de hardware

O Config.TextureUpdateMode configurado determina como o ARCore vai atualizar a textura da câmera. Quando definido como TextureUpdateMode.EXPOSE_HARDWARE_BUFFER, o ARCore fornece a imagem da câmera usando um HardwareBuffer.

Configure a sessão para usar o TextureUpdateMode.EXPOSE_HARDWARE_BUFFER:

Java

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

Kotlin

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

Conseguir o buffer de hardware

Quando a TextureUpdateMode.EXPOSE_HARDWARE_BUFFER estiver ativada, use Frame.getHardwareBuffer() para acessar o buffer de hardware:

Java

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

Kotlin

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

Usar o buffer de hardware durante a renderização do Vulkan

Consulte vulkan_handler.cc para conferir um exemplo de como renderizar um app de RA usando o Vulkan.

Dispositivos com suporte

O suporte à renderização do Vulkan está disponível apenas na API do Android de nível 27 e mais recentes. Além disso, o dispositivo precisa oferecer suporte à extensão VK_ANDROID_external_memory_android_hardware_buffer.

Exigir o Vulkan no manifesto do app

O Google Play usa o <uses-feature> declarado no manifesto para filtrar o app de dispositivos que não atendem aos requisitos de recursos de hardware e software. Dispositivos que usam o Vulkan 1.0 podem não oferecer suporte à extensão necessária, mas dispositivos compatíveis com o Vulkan 1.1 precisam ter a extensão necessária a partir do Android 10 (API de nível 29).