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.

Consulta 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 la forma en que 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 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);

Cómo obtener 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 el procesamiento de Vulkan solo está disponible en los niveles de API 27 y arriba. Además, el dispositivo debe admitir la extensión VK_ANDROID_external_memory_android_hardware_buffer.

Exige 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 compatible con Vulkan 1.1 debe tener la extensión requerida a partir de Android 10 (nivel de API 29).