Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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, щоб запобігти збоям або неочікуваній поведінці. Деякі віртуальні методи будуть викликані в потоці рендерингу, і будь-які дані, до яких вони отримують доступ, не повинні безпосередньо записуватися в головному потоці. Це зроблено для запобігання двом потенційним проблемам:
Зміни, призначені для наступного кадру, вступають в силу в поточному кадрі. Під час використання моделі потоків "Separate" (окремий) головний потік негайно почне працювати над наступним кадром, тоді як потік рендерингу може все ще рендерити поточний кадр. Якщо головний потік змінить щось, що використовується безпосередньо потоком рендерингу, зміна може бути використана на один кадр раніше, ніж передбачалося.
Одночасне читання та запис тих самих даних з різних потоків може призвести до того, що потік рендерингу використовуватиме дані в недійсному стані.
У більшості випадків рішенням є використання RenderingServer.call_on_render_thread() для планування запису Callable до будь-яких даних, що використовуються в потоці рендерингу. Під час використання моделі потоків "Separate" ці Callable будуть виконуватися після того, як рендерер завершить поточний кадр і перед тим, як він почне рендеринг наступного кадру. Якщо цей режим не використовується, вони будуть виконуватися негайно, тому в цих випадках рекомендується завжди використовувати RenderingServer.call_on_render_thread(), що дозволить вашому коду виконувати правильні дії незалежно від моделі потоку.
Будь-які віртуальні методи, що виконуються в потоці рендерингу, будуть зазначені нижче.
Методи
Описи методів
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, екземпляр якої ми створюємо. Це буде нуль, якщо редактор запитує цей список для позначення підтримуваних функцій. Словник повинен містити назву розширення, зіставлену з 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(interaction_profile_metadata: OpenXRInteractionProfileMetadata) 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. Це означає 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 struct.
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 Surface, створених 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_layer_and_get_next_pointer(next_pointer: void*) virtual 🔗
Додає додаткові структури даних до XrCompositionLayerProjection.
Цей метод буде викликано лише в тому випадку, якщо розширення попередньо зареєструвалося за допомогою OpenXRAPIExtension.register_projection_layer_extension().
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.