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

Quando o 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

O suporte à renderização do Vulkan é demonstrado no app de exemplo hello_ar_vulkan_c.

Ativar o modo de saída de 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 por meio de um AHardwareBuffer.

Configure a sessão para usar 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 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 compatíveis

O suporte à renderização do Vulkan está disponível apenas nos níveis 27 e mais recentes da API do Android. 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 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 (nível 29 da API).