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

Quando o Config.TextureUpdateMode está 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.

Confira o aplicativo de exemplo

O suporte à renderização do Vulkan é demonstrado 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 ele está 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 }
)

Receber o buffer de hardware

Quando TextureUpdateMode.EXPOSE_HARDWARE_BUFFER estiver ativado, use Frame.getHardwareBuffer() para receber 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 (link em inglês) para conferir um exemplo de como renderizar um aplicativo de RA usando o Vulkan.

Dispositivos compatíveis

O suporte à renderização do Vulkan só está disponível nos níveis 27 da API do Android e acima. 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 <uses-feature> declarado no manifesto do app para filtrar os a partir de dispositivos que não atendem aos requisitos de recursos de hardware e software. Os dispositivos que usam o Vulkan 1.0 talvez não sejam compatíveis com a extensão necessária, mas os dispositivos compatível com Vulkan 1.1 precisa ter a extensão necessária a partir do Android 10 (nível 29 da API).