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