OpenXRExtensionWrapper

Наследует: Object

Наследуется от: OpenXRAndroidThreadSettingsExtension, OpenXRExtensionWrapperExtension, OpenXRFrameSynthesisExtension, OpenXRFutureExtension, OpenXRRenderModelExtension, OpenXRSpatialAnchorCapability, OpenXRSpatialEntityExtension, OpenXRSpatialMarkerTrackingCapability, OpenXRSpatialPlaneTrackingCapability

Позволяет реализовывать расширения OpenXR с помощью GDExtension.

Описание

OpenXRExtensionWrapper позволяет реализовывать расширения OpenXR с помощью GDExtension. Расширение должно быть зарегистрировано с помощью register_extension_wrapper().

Когда OpenXRInterface инициализируется как основной интерфейс, и для любого Viewport параметр Viewport.use_xr установлен в true, OpenXR будет участвовать в процессе рендеринга Godot. Если ProjectSettings.rendering/driver/threads/thread_model установлен в "Separate", рендерер Godot будет работать в собственном потоке, и необходимо проявлять особую осторожность во всех OpenXRExtensionWrapper, чтобы предотвратить сбои или неожиданное поведение. Некоторые виртуальные методы будут вызываться в потоке рендеринга, и любые данные, к которым они обращаются, не должны записываться напрямую в основной поток. Это необходимо для предотвращения двух потенциальных проблем:

  1. Изменения, предназначенные для следующего кадра, вступают в силу в текущем кадре. При использовании модели «Раздельные потоки» основной поток немедленно начнет работу над следующим кадром, в то время как поток рендеринга может все еще рендерить текущий кадр. Если основной поток напрямую изменяет что-либо, используемое потоком рендеринга, это изменение может быть использовано на один кадр раньше, чем предполагалось.

  2. Чтение и запись одних и тех же данных одновременно из разных потоков может привести к тому, что поток рендеринга будет использовать данные в недопустимом состоянии.

В большинстве случаев решение состоит в использовании RenderingServer.call_on_render_thread() для планирования вызовов Callable для записи любых данных, используемых в потоке рендеринга. При использовании модели «Раздельные потоки» эти вызовы Callable будут выполняться после завершения рендеринга текущего кадра и до начала рендеринга следующего кадра. При использовании другого режима они будут выполняться немедленно, поэтому рекомендуется всегда использовать RenderingServer.call_on_render_thread() в таких случаях, что позволит вашему коду выполнять правильные действия независимо от модели потоков.

Ниже будут указаны все виртуальные методы, выполняющиеся в потоке рендеринга.

Методы

int

_get_composition_layer(index: int) virtual

int

_get_composition_layer_count() virtual

int

_get_composition_layer_order(index: int) virtual

Dictionary

_get_requested_extensions(xr_version: int) virtual

PackedStringArray

_get_suggested_tracker_names() virtual

Array[Dictionary]

_get_viewport_composition_layer_extension_properties() virtual

Dictionary

_get_viewport_composition_layer_extension_property_defaults() virtual

void

_on_before_instance_created() virtual

bool

_on_event_polled(event: const void*) virtual

void

_on_instance_created(instance: int) virtual

void

_on_instance_destroyed() virtual

void

_on_main_swapchains_created() virtual

void

_on_post_draw_viewport(viewport: RID) virtual

void

_on_pre_draw_viewport(viewport: RID) virtual

void

_on_pre_render() virtual

void

_on_process() virtual

void

_on_register_metadata() virtual

void

_on_session_created(session: int) virtual

void

_on_session_destroyed() virtual

void

_on_state_exiting() virtual

void

_on_state_focused() virtual

void

_on_state_idle() virtual

void

_on_state_loss_pending() virtual

void

_on_state_ready() virtual

void

_on_state_stopping() virtual

void

_on_state_synchronized() virtual

void

_on_state_visible() virtual

void

_on_sync_actions() virtual

void

_on_viewport_composition_layer_destroyed(layer: const void*) virtual

void

_prepare_view_configuration(view_count: int) virtual

void

_print_view_configuration_info(view: int) virtual const

int

_set_android_surface_swapchain_create_info_and_get_next_pointer(property_values: Dictionary, next_pointer: void*) virtual

int

_set_frame_end_info_and_get_next_pointer(next_pointer: void*) virtual

int

_set_frame_wait_info_and_get_next_pointer(next_pointer: void*) virtual

int

_set_hand_joint_locations_and_get_next_pointer(hand_index: int, next_pointer: void*) virtual

int

_set_instance_create_info_and_get_next_pointer(xr_version: int, next_pointer: void*) virtual

int

_set_projection_views_and_get_next_pointer(view_index: int, next_pointer: void*) virtual

int

_set_reference_space_create_info_and_get_next_pointer(reference_space_type: int, next_pointer: void*) virtual

int

_set_session_create_and_get_next_pointer(next_pointer: void*) virtual

int

_set_swapchain_create_info_and_get_next_pointer(next_pointer: void*) virtual

int

_set_system_properties_and_get_next_pointer(next_pointer: void*) virtual

int

_set_view_configuration_and_get_next_pointer(view: int, next_pointer: void*) virtual

int

_set_view_locate_info_and_get_next_pointer(next_pointer: void*) virtual

int

_set_viewport_composition_layer_and_get_next_pointer(layer: const void*, property_values: Dictionary, next_pointer: void*) virtual

OpenXRAPIExtension

get_openxr_api()

void

register_extension_wrapper()


Описания метода

int _get_composition_layer(index: int) virtual 🔗

Возвращает указатель на структуру XrCompositionLayerBaseHeader, которая предоставляет заданный слой композиции.

Этот метод будет вызван только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRAPIExtension.register_composition_layer_provider().

Примечание: Этот виртуальный метод будет вызван в потоке рендеринга. Кроме того, возвращаемые им данные будут использованы вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


int _get_composition_layer_count() virtual 🔗

Возвращает количество слоев композиции, предоставляемых этим расширением через _get_composition_layer().

Этот метод будет вызван только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRAPIExtension.register_composition_layer_provider().

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


int _get_composition_layer_order(index: int) virtual 🔗

Возвращает целое число, которое будет использоваться для сортировки заданного слоя композиции, предоставленного с помощью _get_composition_layer(). Меньшие числа переместят слой в начало списка, а большие — в конец. Слой проекции по умолчанию имеет порядок 0, поэтому слои, предоставляемые этим методом, вероятно, должны быть выше или ниже (но не точно) 0.

Этот метод будет вызываться только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRAPIExtension.register_composition_layer_provider().

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


Dictionary _get_requested_extensions(xr_version: int) virtual 🔗

Возвращает Dictionary расширений OpenXR, связанных с этим расширением. xr_version указывает версию OpenXR, которую мы создаём. Это значение будет равно нулю, если редактор запросит этот список для обозначения поддерживаемых функций. Dictionary должен содержать имя расширения, сопоставленное с bool *, преобразованным в целое число:

  • Если bool * является nullptr, это расширение является обязательным.

  • Если bool * указывает на логическое значение, логическое значение будет обновлено до true, если расширение включено.


PackedStringArray _get_suggested_tracker_names() virtual 🔗

Возвращает PackedStringArray имен позиционных трекеров, которые используются внутри оболочки расширения.


Array[Dictionary] _get_viewport_composition_layer_extension_properties() virtual 🔗

Получает массив объектов типа Dictionary, представляющих свойства, подобно методу Object._get_property_list(), которые будут добавлены к узлам OpenXRCompositionLayer.

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.


Dictionary _get_viewport_composition_layer_extension_property_defaults() virtual 🔗

Получает Dictionary, содержащий значения по умолчанию для свойств, возвращаемых _get_viewport_composition_layer_extension_properties().


void _on_before_instance_created() virtual 🔗

Вызывается до создания экземпляра OpenXR.

Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван до участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые будут использоваться потоком рендеринга.


bool _on_event_polled(event: const void*) virtual 🔗

Вызывается, когда есть событие OpenXR для обработки. При реализации верните true, если событие было обработано, в противном случае верните false.


void _on_instance_created(instance: int) virtual 🔗

Вызывается сразу после создания экземпляра OpenXR.

Примечание: Этот виртуальный метод будет вызываться в основном потоке, однако он будет вызван до участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые будут использоваться потоком рендеринга.


void _on_instance_destroyed() virtual 🔗

Вызывается непосредственно перед уничтожением экземпляра OpenXR.

Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван после завершения участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые использовались потоком рендеринга.


void _on_main_swapchains_created() virtual 🔗

Вызывается сразу после (повторного) создания основных цепочек обмена.

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.


void _on_post_draw_viewport(viewport: RID) virtual 🔗

Вызывается сразу после отрисовки указанного видового окна.

Примечание: Команды отрисовки могут быть только поставлены в очередь на этом этапе, но не выполнены.

Примечание: Этот виртуальный метод будет вызван в потоке отрисовки.


void _on_pre_draw_viewport(viewport: RID) virtual 🔗

Вызывается непосредственно перед отрисовкой указанного области просмотра.

Примечание: Этот виртуальный метод будет вызван в потоке отрисовки.


void _on_pre_render() virtual 🔗

Вызывается непосредственно перед началом рендеринга XR-окнов.

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.


void _on_process() virtual 🔗

Вызывается как часть обработки процесса OpenXR. Это происходит прямо перед общими и физическими этапами обработки основного цикла. Во время этого этапа данные контроллера запрашиваются и становятся доступными для игровой логики.


void _on_register_metadata() virtual 🔗

Позволяет расширениям регистрировать дополнительные метаданные контроллера. Эта функция вызывается даже тогда, когда API OpenXR не создан, так как метаданные должны быть доступны редактору.

Расширения также должны предоставлять метаданные независимо от того, поддерживаются ли они в хост-системе. Данные контроллера используются для настройки карт действий для пользователей, которые могут иметь доступ к соответствующему оборудованию.


void _on_session_created(session: int) virtual 🔗

Вызывается сразу после создания сессии OpenXR.

Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван до участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые будут использоваться потоком рендеринга.


void _on_session_destroyed() virtual 🔗

Вызывается непосредственно перед уничтожением сессии OpenXR.

Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван после завершения участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые использовались потоком рендеринга.


void _on_state_exiting() virtual 🔗

Вызывается, когда состояние сеанса OpenXR изменяется на выход.


void _on_state_focused() virtual 🔗

Вызывается, когда состояние сеанса OpenXR меняется на сфокусированное. Это состояние является активным, когда игра запущена.


void _on_state_idle() virtual 🔗

Вызывается, когда состояние сеанса OpenXR изменяется на состояние ожидания.


void _on_state_loss_pending() virtual 🔗

Вызывается, когда состояние сеанса OpenXR изменяется на «ожидание потери».


void _on_state_ready() virtual 🔗

Вызывается, когда состояние сеанса OpenXR меняется на ready. Это означает, что OpenXR готов настроить сеанс.


void _on_state_stopping() virtual 🔗

Вызывается, когда состояние сеанса OpenXR изменяется на остановку.


void _on_state_synchronized() virtual 🔗

Вызывается, когда состояние сеанса OpenXR меняется на синхронизированное. OpenXR также возвращается в это состояние, когда приложение теряет фокус.


void _on_state_visible() virtual 🔗

Вызывается, когда состояние сеанса OpenXR меняется на видимое. Это означает, что OpenXR теперь готов принимать кадры.


void _on_sync_actions() virtual 🔗

Вызывается, когда OpenXR выполнил свое действие синхронизации.


void _on_viewport_composition_layer_destroyed(layer: const void*) virtual 🔗

Вызывается, когда слой композиции, созданный через OpenXRCompositionLayer, уничтожается.

layer — это указатель на структуру XrCompositionLayerBaseHeader.


void _prepare_view_configuration(view_count: int) virtual 🔗

Вызывается перед методом _set_view_configuration_and_get_next_pointer(), чтобы позволить расширению зарезервировать данные для заданного количества представлений.


void _print_view_configuration_info(view: int) virtual const 🔗

Эта функция вызывается для того, чтобы расширение могло выводить дополнительную информацию о своей конфигурации представления, если таковая имеется. Она будет вызываться только в том случае, если включен подробный вывод.


int _set_android_surface_swapchain_create_info_and_get_next_pointer(property_values: Dictionary, next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных в цепочки обмена поверхностями Android, созданные с помощью OpenXRCompositionLayer.

property_values содержит значения свойств, возвращаемых _get_viewport_composition_layer_extension_properties().

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.


int _set_frame_end_info_and_get_next_pointer(next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных в XrFrameEndInfo.

Этот метод будет вызываться только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRAPIExtension.register_frame_info_extension().

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


int _set_frame_wait_info_and_get_next_pointer(next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных в XrFrameWaitInfo.

Этот метод будет вызываться только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRAPIExtension.register_frame_info_extension().

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.


int _set_hand_joint_locations_and_get_next_pointer(hand_index: int, next_pointer: void*) virtual 🔗

При создании каждого трекера рук необходимо добавлять дополнительные структуры данных.


int _set_instance_create_info_and_get_next_pointer(xr_version: int, next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных при создании экземпляра OpenXR. xr_version указывает версию OpenXR, которую мы создаём.


int _set_projection_views_and_get_next_pointer(view_index: int, next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных в проекционное представление заданного view_index.

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


int _set_reference_space_create_info_and_get_next_pointer(reference_space_type: int, next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных в XrReferenceSpaceCreateInfo.


int _set_session_create_and_get_next_pointer(next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных при создании сессии OpenXR.


int _set_swapchain_create_info_and_get_next_pointer(next_pointer: void*) virtual 🔗

При создании цепочек обмена OpenXR добавьте дополнительные структуры данных.


int _set_system_properties_and_get_next_pointer(next_pointer: void*) virtual 🔗

При запросе информации о возможностях системы OpenXR следует добавлять дополнительные структуры данных.


int _set_view_configuration_and_get_next_pointer(view: int, next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных при запросе конфигурации представления OpenXR.


int _set_view_locate_info_and_get_next_pointer(next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных в XrViewLocateInfo.

Этот метод будет вызываться только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRAPIExtension.register_frame_info_extension().

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


int _set_viewport_composition_layer_and_get_next_pointer(layer: const void*, property_values: Dictionary, next_pointer: void*) virtual 🔗

Добавьте дополнительные структуры данных к слоям композиции, созданным с помощью OpenXRCompositionLayer.

property_values содержит значения свойств, возвращаемых _get_viewport_composition_layer_extension_properties().

layer — указатель на структуру XrCompositionLayerBaseHeader.

Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска _on_pre_render().


OpenXRAPIExtension get_openxr_api() 🔗

Возвращает созданный OpenXRAPIExtension, который можно использовать для доступа к API OpenXR.


void register_extension_wrapper() 🔗

Регистрирует расширение. Это должно происходить на уровне инициализации основного модуля.

Примечание: Эту функцию нельзя вызвать после инициализации OpenXR.