Renderiza tu app de RA con Vulkan en el NDK de Android (C)

Cuando ArTextureUpdateMode se establece en AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER, ARCore proporcionará un búfer 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.

Cómo habilitar el modo de salida de 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 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);

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 la API nivel 27 y superiores de Android. Además, el dispositivo debe admitir la extensión VK_ANDROID_external_memory_android_hardware_buffer.

Cómo solicitar Vulkan en el manifiesto de tu app

Google Play usa <uses-feature> declarado en el manifiesto de tu app para aplicarle filtrado y excluir dispositivos que no cumplan con sus requisitos de las funciones de software y hardware. Los dispositivos que usan Vulkan 1.0 podrían no admitir 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).