Cuando ArTextureUpdateMode
se establece en AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
, ARCore proporcionará un buffer de hardware de Android cuando se llame a ArSession_update()
. Este búfer de hardware se puede vincular a un VkImage
de Vulkan.
Ve la aplicación de ejemplo
La compatibilidad con la renderización de Vulkan se demuestra en la app de ejemplo hello_ar_vulkan_c.
Habilita el modo de salida del búfer de hardware
El ArTextureUpdateMode
configurado determina cómo ARCore actualizará la textura de la cámara. Cuando se establece en AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
, ARCore proporcionará la imagen de la cámara a través de un AHardwareBuffer
.
Configura la sesión para que use 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);
Obtén el búfer de hardware
Cuando AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER
esté habilitado, usa ArFrame_getHardwareBuffer()
para obtener el búfer 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; }
Cómo usar el búfer de hardware durante la renderización de Vulkan
Consulta vulkan_handler.cc
para ver un ejemplo de cómo renderizar una aplicación de RA con Vulkan.
Dispositivos compatibles
La compatibilidad con la renderización de Vulkan solo está disponible en los niveles de API de Android 27 y versiones posteriores. Además, el dispositivo debe admitir la extensión VK_ANDROID_external_memory_android_hardware_buffer
.
Cómo exigir Vulkan en el manifiesto de tu app
Google Play usa <uses-feature>
declarado en el manifiesto de la app para filtrar las
app de dispositivos que no cumplen con los requisitos de las funciones de hardware y software.
Es posible que los dispositivos que usan Vulkan 1.0 no admitan la extensión requerida, pero los dispositivos compatibles con Vulkan 1.1 deben tener la extensión requerida a partir de Android 10 (nivel de API 29).