XR_ANDROID_depth_texture
Строка имени
XR_ANDROID_depth_texture
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
703
Пересмотр
1
Статус ратификации
Не ратифицировано
Зависимости расширений и версий
Дата последнего изменения
2024-09-11
Статус IP
Известных претензий на интеллектуальную собственность нет.
Авторы
Сушант Кулкарни, Google
Кэрн Овертурф, Google
Спенсер Куин, Google
Левана Чен, Google
Обзор
Это расширение позволяет приложению запрашивать карты глубины реального окружения вокруг гарнитуры и определять поддерживаемые разрешения глубины при создании изображения.
Это расширение предназначено для предоставления доступа к исходным и сглаженным данным о глубине для окклюзии, проверки попаданий и других специфических задач, использующих точную геометрию сцены, например, для обнаружения поддельных лиц.
Примечание
Карты глубины генерируются средой выполнения и передаются приложению с помощью XrDepthSwapchainANDROID . Среда выполнения не должна изменять разрешение изображения глубины, возвращаемое через xrEnumerateDepthResolutionsANDROID, на протяжении всего времени работы приложения.
Разрешения
Это расширение предоставляет текстуру глубины с уменьшенным разрешением для снижения рисков, связанных с персональными данными (PII). Приложения Android должны иметь разрешение android.permission.SCENE_UNDERSTANDING_FINE в своем манифесте, поскольку это расширение предоставляет доступ к геометрии окружения. Разрешение android.permission.SCENE_UNDERSTANDING_FINE считается опасным. Приложение должно запрашивать это разрешение во время выполнения, чтобы использовать следующие функции:
(Уровень защиты: опасный)
Проверьте возможности системы.
Структура XrSystemDepthTrackingPropertiesANDROID определяется следующим образом:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Описание участников
-
type— это XrStructureType данной структуры. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
supportsDepthTracking— это тип данныхXrBool32указывающий, поддерживает ли текущая система отслеживание глубины.
Приложение может проверить, способна ли система отслеживать глубину, расширив структуру XrSystemProperties с помощью XrSystemDepthTrackingPropertiesANDROID при вызове функции xrGetSystemProperties .
Только если среда выполнения возвращает XR_FALSE для supportsDepthTracking , она должна вернуть XR_ERROR_FEATURE_UNSUPPORTED из xrCreateDepthSwapchainANDROID .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед использованием XrSystemDepthTrackingPropertiesANDROID. -
typeдолжен бытьXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур.
Разрешение глубины запроса
Функция xrEnumerateDepthResolutionsANDROID определена следующим образом:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
Описание параметров
-
session— это объект XrSession , который перечисляет поддерживаемые разрешения глубины. -
resolutionCapacityInput— это емкостьresolutions, или 0 для получения требуемой емкости. -
resolutionCountOutput— это указатель на количество записанныхresolutionsтипаuint64_tили указатель на требуемую емкость в случае, еслиresolutionCapacityInputнедостаточен. -
resolutions— это указатель на массив XrDepthCameraResolutionANDROID , но он может бытьNULLеслиresolutionCapacityInputравен0. - Подробное описание получения необходимого размера
resolutionsсм. в разделе « Параметры размера буфера» .
Параметр xrEnumerateDepthResolutionsANDROID перечисляет разрешения глубины, поддерживаемые текущей сессией. Разрешения глубины должны быть упорядочены от наивысшего к наинизшему значению, выбранному во время выполнения. Для оптимальной производительности и качества приложение должно использовать наивысшее поддерживаемое разрешение.
В течение всего времени работы сессии среды выполнения должны всегда возвращать идентичное содержимое буфера из этого перечисления.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед вызовом функции xrEnumerateDepthResolutionsANDROID. -
sessionдолжна быть действительным дескриптором XrSession. -
resolutionCountOutputдолжен быть указателем на значение типаuint32_t - Если
resolutionCapacityInputне равно0,resolutionsдолжно быть указателем на массив значенийresolutionCapacityInputXrDepthCameraResolutionANDROID.
Коды возврата
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_VALIDATION_FAILURE
Перечисление XrDepthCameraResolutionANDROID описывает поддерживаемые разрешения глубины при создании объекта XrDepthSwapchainANDROID .
typedef enum XrDepthCameraResolutionANDROID {
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID = 0,
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID = 1,
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID = 2,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
Описание переписчиков
-
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID— Разрешение изображений глубины и достоверности составляет 80x80. -
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID— Разрешение изображений глубины и достоверности составляет 160x160. -
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID— Разрешение изображений глубины и достоверности составляет 320x320.
Создать цепочку обмена глубинами
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
XrDepthSwapchainANDROID — это идентификатор цепочки обмена глубинами.
Функция xrCreateDepthSwapchainANDROID определена следующим образом:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Описание параметров
-
session— это объект XrSession , который создает цепочку обмена глубиной. -
createInfo— это указатель на структуру XrDepthSwapchainCreateInfoANDROID , содержащую параметры, используемые для создания цепочки обмена. -
swapchain— это указатель на дескриптор, в котором возвращается созданный объект XrDepthSwapchainANDROID .
Приложение может использовать функцию xrCreateDepthSwapchainANDROID для создания цепочки обмена глубинными данными, которая управляет как изображениями глубины, так и изображениями достоверности.
- Если система не поддерживает отслеживание глубины, среда выполнения должна вернуть значение
XR_ERROR_FEATURE_UNSUPPORTED. - Если вызывающему приложению не были предоставлены необходимые разрешения, среда выполнения должна вернуть
XR_ERROR_PERMISSION_INSUFFICIENT. - Если разрешение глубины, указанное в XrDepthSwapchainCreateInfoANDROID, не поддерживается, среда выполнения должна вернуть
XR_ERROR_VALIDATION_FAILURE. - Среда выполнения должна создавать изображения с указанием глубины только в том случае, если соответствующие биты установлены для параметра
createInfoпри создании цепочки обменов.
Возвращенный дескриптор цепочки обмена глубинами может быть впоследствии использован в вызовах API. Дескриптор XrDepthSwapchainANDROID должен быть в конечном итоге освобожден с помощью функции xrDestroyDepthSwapchainANDROID .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед вызовом функции xrCreateDepthSwapchainANDROID. -
sessionдолжна быть действительным дескриптором XrSession. -
createInfoдолжен быть указателем на допустимую структуру XrDepthSwapchainCreateInfoANDROID. -
swapchainдолжен быть указателем на дескриптор XrDepthSwapchainANDROID.
Коды возврата
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FEATURE_UNSUPPORTED -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_PERMISSION_INSUFFICIENT -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST
Структура XrDepthSwapchainCreateInfoANDROID определяется следующим образом:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
Описание участников
-
type— это XrStructureType данной структуры. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
resolution— это значение XrDepthCameraResolutionANDROID , с помощью которого создаются текстуры глубины и достоверности. -
createFlags— это один или несколько объектов XrDepthSwapchainCreateFlagsANDROID .
Структура XrDepthSwapchainCreateInfoANDROID предоставляет параметры создания объекта XrDepthSwapchainANDROID при передаче его в функцию xrCreateDepthSwapchainANDROID .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед использованием XrDepthSwapchainCreateInfoANDROID. -
typeдолжен бытьXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. -
resolutionдолжно быть допустимым значением XrDepthCameraResolutionANDROID. -
createFlagsдолжен представлять собой допустимую комбинацию значений XrDepthSwapchainCreateFlagBitsANDROID. -
createFlagsне должен быть0
Параметр XrDepthSwapchainCreateFlagsANDROID определяет параметры создания для XrDepthSwapchainANDROID .
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
Допустимые биты для XrDepthSwapchainCreateFlagsANDROID определяются параметром XrDepthSwapchainCreateFlagBitsANDROID , который задается следующим образом:
// Flag bits for XrDepthSwapchainCreateFlagsANDROID
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID = 0x00000001;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000002;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID = 0x00000004;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000008;
Описание флагов
-
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID— указывает, что цепочка обмена будет предоставлять плавные изображения глубины. -
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID— указывает, что цепочка обмена будет предоставлять плавные изображения достоверности глубины. -
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID— Указывает, что цепочка обмена будет предоставлять необработанные изображения глубины. -
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID— Указывает, что цепочка обмена будет предоставлять необработанные изображения достоверности глубины.
Функция xrDestroyDepthSwapchainANDROID определена следующим образом:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Описание параметров
-
swapchain— это идентификатор XrDepthSwapchainANDROID, ранее созданный функцией xrCreateDepthSwapchainANDROID .
Функция xrDestroyDepthSwapchainANDROID уничтожает цепочку обмена глубиной. После этого вызова среда выполнения может освободить всю связанную память и ресурсы.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед вызовом функции xrDestroyDepthSwapchainANDROID. -
swapchainдолжен быть действительным дескриптором XrDepthSwapchainANDROID.
Безопасность резьбы
- Доступ к
swapchainи любым дочерним элементам должен осуществляться посредством внешней синхронизации.
Коды возврата
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID
Доступ к текстурам глубины
Функция xrEnumerateDepthSwapchainImagesANDROID определена следующим образом:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
Описание параметров
-
depthSwapchain— это XrDepthSwapchainANDROID для получения изображений. -
depthImageCapacityInput— это емкость массиваdepthImages, или 0, указывающее на запрос на получение необходимой емкости. -
depthImageCountOutput— это указатель на количество записанныхdepthImagesили указатель на требуемую емкость в случае, еслиdepthImageCapacityInputнедостаточен. -
depthImages— это указатель на массив структур XrDepthSwapchainImageANDROID . Он может бытьNULLеслиdepthImageCapacityInputравен 0. - Подробное описание получения необходимого размера
depthImagesсм. в разделе « Параметры размера буфера» .
Функция xrEnumerateDepthSwapchainImagesANDROID заполняет массив структур XrDepthSwapchainImageANDROID . Ресурсы должны быть постоянными и действительными в течение всего времени существования структуры XrDepthSwapchainANDROID . Эта функция работает аналогично функции xrEnumerateSwapchainImages .
В течение всего времени существования цепочки обменов среда выполнения должна всегда возвращать идентичное содержимое буфера из этого перечисления.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед вызовом функции xrEnumerateDepthSwapchainImagesANDROID. -
depthSwapchainдолжен быть действительным дескриптором XrDepthSwapchainANDROID. -
depthImageCountOutputдолжен быть указателем на значение типаuint32_t - Если
depthImageCapacityInputне равно0,depthImagesдолжен быть указателем на массив структурdepthImageCapacityInputXrDepthSwapchainImageANDROID.
Коды возврата
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_VALIDATION_FAILURE
Структура XrDepthSwapchainImageANDROID определяется следующим образом:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
Описание участников
-
type— это XrStructureType данной структуры. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
rawDepthImageпринимает значениеNULLили указатель на необработанные изображения глубины для левого и правого видов, выделенные средой выполнения. Значения имеют единицы измерения в метрах. Специальные значения:0.0указывает на недопустимый или пустой пиксель глубины в необработанном изображении глубины,Infуказывает на известную глубину, которая фактически бесконечно удалена. -
rawDepthConfidenceImageимеетNULLили указатель на исходные изображения глубины для левого и правого ракурсов, выделенные средой выполнения. -
smoothDepthImageпринимает значениеNULLили указатель на сглаженные изображения глубины для левого и правого видов, выделенные средой выполнения. Значения имеют единицы измерения в метрах. Специальные значения:0.0указывает на недопустимый или пустой пиксель глубины в сглаженном изображении глубины,Infуказывает на известную глубину, которая фактически бесконечно удалена. -
smoothDepthConfidenceImageпринимает значениеNULLили указатель на изображения сглаженной глубины для левого и правого видов, выделенные средой выполнения.
Указатели буфера изображения будут действительны только в течение срока действия цепочки обмена. После уничтожения цепочки обмена эти указатели будут считаться недействительными.
XrDepthSwapchainImageANDROID представляет собой изображения глубины из читаемого объекта XrDepthSwapchainANDROID , выделенного, как описано в XrDepthSwapchainCreateInfoANDROID :: resolution и XrDepthSwapchainCreateInfoANDROID :: createFlags при вызове xrCreateDepthSwapchainANDROID . Для каждого изображения глубины:
- Значения изображений располагаются в памяти в порядке следования строк, без заполнения между строками.
- Первое значение находится в верхнем левом углу, а последнее — в нижнем правом.
- Размер памяти, на которую указывает указатель, определяется значением xrEnumerateDepthSwapchainImagesANDROID и задается функцией XrDepthSwapchainCreateInfoANDROID ::
resolutionпри вызове xrCreateDepthSwapchainANDROID . Например, если XrDepthSwapchainCreateInfoANDROID ::resolutionравноXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID, то размер изображений глубины будет равен2*160*160*sizeof(float). - Значение
rawDepthImageдолжно бытьNULLесли XrDepthSwapchainCreateInfoANDROID ::createFlagsне включалXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID. - Значение
rawDepthConfidenceImageдолжно бытьNULLесли XrDepthSwapchainCreateInfoANDROID ::createFlagsне включалXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID. - Значение
smoothDepthImageдолжно бытьNULLесли XrDepthSwapchainCreateInfoANDROID ::createFlagsне включалXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID. - Значение
smoothDepthImageдолжно бытьNULLесли XrDepthSwapchainCreateInfoANDROID ::createFlagsне включалXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед использованием XrDepthSwapchainImageANDROID. typeдолжен бытьXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDnextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур.
Функция xrAcquireDepthSwapchainImagesANDROID определена следующим образом:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
Описание параметров
-
depthSwapchain— это идентификатор XrDepthSwapchainANDROID для изображения глубины. -
acquireInfo— это объект XrDepthAcquireInfoANDROID, содержащий информацию о том, как получить изображение глубины. -
acquireResult— это возвращаемый объект XrDepthAcquireResultANDROID , содержащий информацию о полученном изображении глубины.
Приложения могут использовать функцию xrAcquireDepthSwapchainImagesANDROID для получения последнего доступного индекса изображения цепочки обмена, т.е. XrDepthAcquireResultANDROID :: acquiredIndex , в массив XrDepthSwapchainImageANDROID , перечисляемый функцией xrEnumerateDepthSwapchainImagesANDROID . Возвращаемый массив XrDepthAcquireResultANDROID также содержит другую информацию, такую как поле зрения и положение, необходимые для интерпретации данных о глубине. Безопасно считывать данные из полученного слота в массиве изображений до следующего вызова функции xrAcquireDepthSwapchainImagesANDROID .
Между любыми парами соответствующих вызовов xrBeginFrame и xrEndFrame в рамках одной сессии должно быть не более одного вызова функции xrAcquireDepthSwapchainImagesANDROID .
- Выполнение программы может завершиться с ошибкой, если ранее полученные образы цепочки обменов все еще используются программой.
- Если функция xrAcquireDepthSwapchainImagesANDROID вызывается до xrBeginFrame или после xrEndFrame , среда выполнения должна вернуть
XR_ERROR_CALL_ORDER_INVALID - Если функция xrAcquireDepthSwapchainImagesANDROID вызывается более одного раза за кадр, среда выполнения должна возвращать
XR_ERROR_LIMIT_REACHEDто есть в рамках текущей сессии после вызова xrBeginFrame , которому не был связан вызов xrEndFrame . - Если данные о глубине окружения еще недоступны, среда выполнения может вернуть ошибку
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID. В этом случае приложение должно повторно вызвать функцию xrAcquireDepthSwapchainImagesANDROID в более позднем кадре.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед вызовом функции xrAcquireDepthSwapchainImagesANDROID. -
depthSwapchainдолжен быть действительным дескриптором XrDepthSwapchainANDROID. -
acquireInfoдолжен быть указателем на допустимую структуру XrDepthAcquireInfoANDROID. -
acquireResultдолжен быть указателем на структуру XrDepthAcquireResultANDROID.
Коды возврата
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_CALL_ORDER_INVALID -
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_TIME_INVALID -
XR_ERROR_VALIDATION_FAILURE
Структура XrDepthAcquireInfoANDROID определяется следующим образом:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
Описание участников
-
type— это XrStructureType данной структуры. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
space— это XrSpace , определяющий систему координат, возвращаемую в XrDepthAcquireResultANDROID ::views. -
displayTime— это объектXrTimeуказывающий время, затраченное на вычисление позы для возвращаемой позы в XrDepthAcquireResultANDROID ::views. Приложения должны передавать прогнозируемое время отображения для текущего кадра.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед использованием XrDepthAcquireInfoANDROID. -
typeдолжен бытьXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. -
spaceдолжен быть допустимым дескриптором XrSpace.
Структура XrDepthAcquireResultANDROID определяется следующим образом:
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
Описание участников
-
type— это XrStructureType данной структуры. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
acquiredIndex— это индекс полученной текстуры в массиве XrDepthSwapchainImageANDROID , который перечисляется функцией xrEnumerateDepthSwapchainImagesANDROID . -
exposureTimestamp— это значениеXrTime, указывающее время, когда была получена карта глубины. -
views— это массив из двух объектов XrDepthViewANDROID , по одному для каждого глаза, где индекс 0 соответствует левому глазу, а индекс 1 — правому.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед использованием XrDepthAcquireResultANDROID. -
typeдолжен бытьXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. - Любой заданный элемент
viewsдолжен представлять собой допустимую структуру XrDepthViewANDROID.
Структура XrDepthViewANDROID определяется следующим образом:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
Описание участников
-
type— это XrStructureType данной структуры. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
fov— это параметр XrFovf , определяющий поле зрения, используемое для создания данного изображения. Изображение никогда не переворачивается ни по горизонтали, ни по вертикали. -
pose— это объект XrPosef, определяющий позу, из которой была отрисована карта глубины. Опорная система координат задается в XrDepthAcquireInfoANDROID .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_depth_textureнеобходимо включить перед использованием XrDepthViewANDROID. -
typeдолжен бытьXR_TYPE_DEPTH_VIEW_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур.
Пример кода для отслеживания глубины
Приведенный ниже пример кода демонстрирует, как получать изображения глубины и использовать значения глубины для сопоставления координат изображения глубины с пространством сцены.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace stageSpace; // space created for XR_REFERENCE_SPACE_TYPE_STAGE.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateDepthSwapchainANDROID xrCreateDepthSwapchainANDROID; // previously initialized
PFN_xrDestroyDepthSwapchainANDROID xrDestroyDepthSwapchainANDROID; // previously initialized
PFN_xrEnumerateDepthSwapchainImagesANDROID xrEnumerateDepthSwapchainImagesANDROID; // previously initialized
PFN_xrEnumerateDepthResolutionsANDROID xrEnumerateDepthResolutionsANDROID; // previously initialized
PFN_xrAcquireDepthSwapchainImagesANDROID xrAcquireDepthSwapchainImagesANDROID; // previously initialized
float tanf(float);
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemDepthTrackingPropertiesANDROID depthTrackingProperties{XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID};
properties.next = &depthTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!depthTrackingProperties.supportsDepthTracking) {
// depth tracking is not supported.
return;
}
// Query the supported depth resolution.
XrDepthCameraResolutionANDROID supportedDepthResolution;
uint32_t supportedResolutionCount = 0;
CHK_XR(xrEnumerateDepthResolutionsANDROID(
session, 1, &supportedResolutionCount, &supportedDepthResolution));
// Define metadata to access the raw and smooth depth along with confidences.
XrDepthSwapchainCreateInfoANDROID swapchainCreateInfo = {
.type = XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID,
.next = nullptr,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
.createFlags =
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID,
};
XrDepthSwapchainANDROID depthSwapchain;
CHK_XR(xrCreateDepthSwapchainANDROID(
session, &swapchainCreateInfo, &depthSwapchain));
// Enumerate depth images.
uint32_t imageCountOutput = 0;
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, 0, &imageCountOutput, nullptr));
std::vector<XrDepthSwapchainImageANDROID> depthImages(imageCountOutput);
for (int i = 0; i < imageCountOutput; i++) {
depthImages[i].type = XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID;
}
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, imageCountOutput, &imageCountOutput, depthImages.data()));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrDepthAcquireInfoANDROID acquireInfo = {
.type = XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID,
.space = stageSpace,
.displayTime = time
};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthSwapchainImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code below shows how to find the stageSpace position of
// the point corresponding to a particular value in the depth image.
// For this sample code, assume we are using a right handed coordinate system
// with +X to the right, +Y up and -Z forward.
XrDepthSwapchainImageANDROID *image =
&depthImages[acquireResult.acquiredIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = 80; // value in [0, imageResolution)
int imageX = 80; // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value is obtained with the following expression:
// depthR = image->rawDepthImage[imageResolution*imageResolution+i*imageResolution+j]
float depthL = image->rawDepthImage[imageY*imageResolution + imageX];
XrDepthViewANDROID viewL = acquireResult.views[0];
float tanL = tanf(viewL.fov.angleLeft);
float tanR = tanf(viewL.fov.angleRight);
float tanU = tanf(viewL.fov.angleUp);
float tanD = tanf(viewL.fov.angleDown);
float s = (imageX + 0.5f) / (float)imageResolution;
float t = (imageY + 0.5f) / (float)imageResolution;
// Calculate the depth camera space position of the point
// corresponding to this depth value.
XrVector3f posInCameraSpace;
posInCameraSpace.z = -depthL;
posInCameraSpace.x = (tanL + (tanR - tanL)*s)*depthL;
posInCameraSpace.y = (tanD + (tanU - tanD)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
Новые типы объектов
Новые команды
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
Новые сооружения
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
Расширение XrSystemProperties :
Новые перечисления
Новые битовые маски
Новые константы перечислений
-
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAME -
XR_ANDROID_depth_texture_SPEC_VERSION Расширение XrObjectType :
-
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
-
Расширение XrResult :
-
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
-
Расширение XrStructureType :
-
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID -
XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID -
XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID -
XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID -
XR_TYPE_DEPTH_VIEW_ANDROID -
XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
-
Проблемы
История версий
Редакция 1, 9 сентября 2024 г. (Левана Чен)
- Первоначальное описание расширения