Android NDK (C)에서 Vulkan을 사용하여 AR 앱 렌더링

ArTextureUpdateModeAR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER로 설정된 경우 ArSession_update()가 호출되면 ARCore에서 Android 하드웨어 버퍼를 제공합니다. 이 하드웨어 버퍼는 Vulkan VkImage에 바인딩될 수 있습니다.

샘플 애플리케이션 보기

Vulkan 렌더링 지원은 hello_ar_vulkan_c 샘플 앱에서 보여줍니다.

하드웨어 버퍼 출력 모드 사용 설정

구성된 ArTextureUpdateMode는 ARCore에서 카메라 텍스처를 업데이트하는 방법을 결정합니다. AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER로 설정되면 ARCore에서 AHardwareBuffer를 통해 카메라 이미지를 제공합니다.

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

하드웨어 버퍼 가져오기

AR_TEXTURE_UPDATE_MODE_EXPOSE_HARDWARE_BUFFER가 사용 설정되면 ArFrame_getHardwareBuffer()를 사용하여 하드웨어 버퍼를 가져옵니다.

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

Vulkan 렌더링 중에 하드웨어 버퍼 사용

Vulkan을 사용하여 AR 애플리케이션을 렌더링하는 방법의 예는 vulkan_handler.cc를 참고하세요.

지원되는 기기

Vulkan 렌더링 지원은 Android API 수준 27 및 참조하세요. 또한 기기가 VK_ANDROID_external_memory_android_hardware_buffer 확장 프로그램을 지원해야 합니다.

앱 매니페스트에 Vulkan 필요

Google Play는 앱 매니페스트에 선언된 <uses-feature>를 사용하여 하드웨어 및 소프트웨어 기능 요구사항을 충족하지 않는 기기에서 앱을 필터링합니다. Vulkan 1.0을 사용하는 기기는 필요한 확장 프로그램을 지원하지 않을 수 있지만 Vulkan 1.1과 호환되는 기기는 Android 10(API 수준 29)부터 필요한 확장 프로그램이 있어야 합니다.