Renderizar seu app de RA usando Vulkan no Android NDK (C)

Quando o ArTextureUpdateMode está definido como AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER, o ARCore fornece um buffer de hardware do Android quando ArSession_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 ArTextureUpdateMode configurado determina como o ARCore vai atualizar a textura da câmera. Quando ele está definido como AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER, o ARCore fornece a imagem da câmera usando um AHardwareBuffer.

Configure a sessão para usar o 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);

Receber o buffer de hardware

Quando AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER estiver ativado, use ArFrame_getHardwareBuffer() para receber o buffer de hardware:

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;
}

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).