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