AR-App mit Vulkan auf dem Android-NDK (C) rendern

Wenn ArTextureUpdateMode auf AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER gesetzt ist, stellt ARCore einen Android-Hardware-Puffer bereit, wenn ArSession_update() aufgerufen wird. Dieser Hardwarepuffer kann an ein Vulkan-VkImage gebunden werden.

Beispielanwendung ansehen

Die Vulkan-Rendering-Unterstützung wird in der Beispiel-App „hello_ar_vulkan_c“ veranschaulicht.

Hardware-Pufferausgabemodus aktivieren

Die konfigurierte ArTextureUpdateMode bestimmt, wie die Kameratextur von ARCore aktualisiert wird. Ist die Richtlinie auf AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER gesetzt, stellt ARCore das Kamerabild über ein AHardwareBuffer bereit.

Konfigurieren Sie die Sitzung für die Verwendung von 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);

Hardware-Puffer abrufen

Wenn AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER aktiviert ist, verwenden Sie ArFrame_getHardwareBuffer(), um den Hardwarepuffer abzurufen:

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;
}

Hardware-Zwischenspeicher beim Vulkan-Rendering verwenden

Unter vulkan_handler.cc finden Sie ein Beispiel für das Rendern einer AR-Anwendung mit Vulkan.

Unterstützte Geräte

Der Vulkan-Rendering-Support ist nur für Android-API-Levels ab 27 verfügbar. Außerdem muss das Gerät die Erweiterung VK_ANDROID_external_memory_android_hardware_buffer unterstützen.

Vulkan im Manifest Ihrer App anfordern

Google Play verwendet die in Ihrem App-Manifest deklarierte <uses-feature>, um Ihre App von Geräten zu filtern, die die Anforderungen an Hardware- und Softwarefunktionen nicht erfüllen. Geräte mit Vulkan 1.0 unterstützen die erforderliche Erweiterung möglicherweise nicht, sondern nur Geräte kompatibel mit Vulkan 1.1 muss ab Android 10 (API-Level 29) die erforderliche Erweiterung haben.