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 Aufrufen von ArSession_update() einen Android-Hardwarepuffer bereit. Dieser Hardwarepuffer kann an einen Vulkan VkImage gebunden werden.

Beispielanwendung ansehen

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

Ausgabemodus für Hardwarepuffer aktivieren

Das konfigurierte ArTextureUpdateMode bestimmt, wie ARCore die Kameratextur aktualisiert. Ist sie 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);

Hardwarezwischenspeicher 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

Unterstützung für Vulkan-Rendering ist nur ab Android API-Levels 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 erforderlich machen

Google Play verwendet die in deinem App-Manifest deklarierte <uses-feature>, um deine App nach Geräten zu filtern, die die Anforderungen an Hardware- und Softwarefunktionen nicht erfüllen. Geräte, auf denen Vulkan 1.0 verwendet wird, unterstützen die erforderliche Erweiterung möglicherweise nicht. Geräte, die mit Vulkan 1.1 kompatibel sind, müssen die erforderliche Erweiterung jedoch ab Android 10 (API-Level 29) haben.