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

Wenn ArTextureUpdateMode auf AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER gesetzt ist, stellt ARCore beim Aufruf von ArSession_update() einen Android-Hardware-Zwischenspeicher bereit. Dieser Hardwarepuffer kann an ein Vulkan-VkImage gebunden werden.

Beispielanwendung ansehen

Die Unterstützung für Vulkan-Rendering wird in der Beispiel-App hello_ar_vulkan_c demonstriert.

Ausgabemodus für Hardwarepuffer 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);

Hardwarepuffer 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 findest du ein Beispiel für das Rendern einer AR-Anwendung mit Vulkan.

Unterstützte Geräte

Vulkan-Rendering ist nur für Android API-Level 27 und oben. Außerdem muss das Gerät die Erweiterung VK_ANDROID_external_memory_android_hardware_buffer unterstützen.

Vulkan im Manifest Ihrer App verlangen

Google Play verwendet die in deinem App-Manifest deklarierten <uses-feature>, um deine Inhalte zu filtern App von Geräten herunterladen, 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.