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

Quando ArTextureUpdateMode é 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.

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 ArTextureUpdateMode configurado determina como o ARCore vai atualizar a textura da câmera. Quando 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);

Conseguir o buffer de hardware

Quando a AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER estiver ativada, use ArFrame_getHardwareBuffer() para acessar 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 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).