OpenXRExtensionWrapper
Позволяет реализовывать расширения OpenXR с помощью ReckfellExtension.
Позволяет реализовывать расширения OpenXR с помощью ReckfellExtension.
OpenXRExtensionWrapper позволяет реализовывать расширения OpenXR с помощью ReckfellExtension. Расширение должно быть зарегистрировано с помощью OpenXRExtensionWrapper.RegisterExtensionWrapper.
Когда OpenXRInterface инициализируется как основной интерфейс, и для любого Viewport параметр Viewport.UseXR установлен в true, OpenXR будет участвовать в процессе рендеринга Reckfell. Если ProjectSettings.rendering/driver/threads/thread_model установлен в "Separate", рендерер Reckfell будет работать в собственном потоке, и необходимо проявлять особую осторожность во всех OpenXRExtensionWrapper, чтобы предотвратить сбои или неожиданное поведение. Некоторые виртуальные методы будут вызываться в потоке рендеринга, и любые данные, к которым они обращаются, не должны записываться напрямую в основной поток. Это необходимо для предотвращения двух потенциальных проблем:
- Изменения, предназначенные для следующего кадра, вступают в силу в текущем кадре. При использовании модели «Раздельные потоки» основной поток немедленно начнет работу над следующим кадром, в то время как поток рендеринга может все еще рендерить текущий кадр. Если основной поток напрямую изменяет что-либо, используемое потоком рендеринга, это изменение может быть использовано на один кадр раньше, чем предполагалось.
- Чтение и запись одних и тех же данных одновременно из разных потоков может привести к тому, что поток рендеринга будет использовать данные в недопустимом состоянии.
В большинстве случаев решение состоит в использовании
RenderingServer.CallOnRenderThreadдля планирования вызововCallableдля записи любых данных, используемых в потоке рендеринга. При использовании модели «Раздельные потоки» эти вызовыCallableбудут выполняться после завершения рендеринга текущего кадра и до начала рендеринга следующего кадра. При использовании другого режима они будут выполняться немедленно, поэтому рекомендуется всегда использоватьRenderingServer.CallOnRenderThreadв таких случаях, что позволит вашему коду выполнять правильные действия независимо от модели потоков. Ниже будут указаны все виртуальные методы, выполняющиеся в потоке рендеринга.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
OpenXRExtensionWrapperКонструктор
public OpenXRExtensionWrapper();Методы33
GetOpenxrApiOpenXRApiExtension
public OpenXRApiExtension GetOpenxrApi();Возвращает созданный OpenXRApiExtension, который можно использовать для доступа к API OpenXR.
OpenXRApiExtensionRegisterExtensionWrappervoid
public void RegisterExtensionWrapper();Регистрирует расширение. Это должно происходить на уровне инициализации основного модуля. Примечание: Эту функцию нельзя вызвать после инициализации OpenXR.
_GetCameraOffsetsReckfell.Collections.Array<Transform3D>
public virtual Reckfell.Collections.Array<Transform3D> _GetCameraOffsets(StringName trackerName);Возвращает набор перестановок для каждого вида, выполненного для данной камеры, если эта камера обрабатывается этим расширением. tracker_name - отсылает к видеокамере, для которой мы ищем это.
| Имя | Тип | По умолчанию |
|---|---|---|
trackerName | StringName | — |
Reckfell.Collections.Array<Transform3D>_GetCameraProjectionsReckfell.Collections.Array<Projection>
public virtual Reckfell.Collections.Array<Projection> _GetCameraProjections(StringName trackerName, double aspect, double zNear, double zFar);Возвращает набор выступов для каждого вида, выполненного для данной камеры, если эта камера обрабатывается этим расширением. tracker_name - отсылает к видеокамере, для которой мы ищем это.
| Имя | Тип | По умолчанию |
|---|---|---|
trackerName | StringName | — |
aspect | double | — |
zNear | double | — |
zFar | double | — |
Reckfell.Collections.Array<Projection>_GetCompositionLayerulong
public virtual ulong _GetCompositionLayer(int index);Возвращает указатель на структуру XrCompositionLayerBaseHeader, которая предоставляет заданный слой композиции.
Этот метод будет вызван только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRApiExtension.RegisterCompositionLayerProvider.
Примечание: Этот виртуальный метод будет вызван в потоке рендеринга. Кроме того, возвращаемые им данные будут использованы вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска OpenXRExtensionWrapper._OnPreRender.
########composation_blayer_count
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
ulong_GetCompositionLayerCountint
public virtual int _GetCompositionLayerCount();Возвращает количество слоев композиции, предоставляемых этим расширением через OpenXRExtensionWrapper._GetCompositionLayer.
Этот метод будет вызван только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRApiExtension.RegisterCompositionLayerProvider.
Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска OpenXRExtensionWrapper._OnPreRender.
int_GetCompositionLayerOrderint
public virtual int _GetCompositionLayerOrder(int index);Возвращает целое число, которое будет использоваться для сортировки заданного слоя композиции, предоставленного с помощью OpenXRExtensionWrapper._GetCompositionLayer. Меньшие числа переместят слой в начало списка, а большие — в конец. Слой проекции по умолчанию имеет порядок 0, поэтому слои, предоставляемые этим методом, вероятно, должны быть выше или ниже (но не точно) 0.
Этот метод будет вызываться только в том случае, если расширение ранее зарегистрировалось с помощью OpenXRApiExtension.RegisterCompositionLayerProvider.
Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга. Кроме того, возвращаемые им данные будут использоваться вскоре после вызова этого метода, поэтому они должны оставаться действительными до следующего запуска OpenXRExtensionWrapper._OnPreRender.
#####get Запрошено_
| Имя | Тип | По умолчанию |
|---|---|---|
index | int | — |
int_GetRequestedExtensionsReckfell.Collections.Dictionary
public virtual Reckfell.Collections.Dictionary _GetRequestedExtensions(ulong xRVersion);Возвращает Reckfell.Collections.Dictionary расширений OpenXR, связанных с этим расширением. xr_version указывает версию OpenXR, которую мы создаём. Это значение будет равно нулю, если редактор запросит этот список для обозначения поддерживаемых функций. Reckfell.Collections.Dictionary должен содержать имя расширения, сопоставленное с bool *, преобразованным в целое число:
- Если
bool *являетсяnullptr, это расширение является обязательным. - Если
bool *указывает на логическое значение, логическое значение будет обновлено доtrue, если расширение включено.
#####get_ugugposed trecker_ имена
| Имя | Тип | По умолчанию |
|---|---|---|
xRVersion | ulong | — |
Reckfell.Collections.Dictionary_GetSuggestedTrackerNamesstring[]
public virtual string[] _GetSuggestedTrackerNames();Возвращает string[] имен позиционных трекеров, которые используются внутри оболочки расширения.
#####get_viewport_composation_layer_production properties
string[]_GetViewportCompositionLayerExtensionPropertiesReckfell.Collections.Array<Reckfell.Collections.Dictionary>
public virtual Reckfell.Collections.Array<Reckfell.Collections.Dictionary> _GetViewportCompositionLayerExtensionProperties();Получает массив объектов типа Reckfell.Collections.Dictionary, представляющих свойства, подобно методу ReckfellObject.GetPropertyList, которые будут добавлены к узлам OpenXRCompositionLayer.
Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.
#####get_viewport_compossion_layer_release superty_ defaults
Reckfell.Collections.Array<Reckfell.Collections.Dictionary>_GetViewportCompositionLayerExtensionPropertyDefaultsReckfell.Collections.Dictionary
public virtual Reckfell.Collections.Dictionary _GetViewportCompositionLayerExtensionPropertyDefaults();Получает Reckfell.Collections.Dictionary, содержащий значения по умолчанию для свойств, возвращаемых OpenXRExtensionWrapper._GetViewportCompositionLayerExtensionProperties.
Reckfell.Collections.Dictionary_OnBeforeInstanceCreatedvoid
public virtual void _OnBeforeInstanceCreated();Вызывается до создания экземпляра OpenXR. Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван до участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые будут использоваться потоком рендеринга.
_OnInstanceCreatedvoid
public virtual void _OnInstanceCreated(ulong instance);Вызывается сразу после создания экземпляра OpenXR. Примечание: Этот виртуальный метод будет вызываться в основном потоке, однако он будет вызван до участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые будут использоваться потоком рендеринга.
| Имя | Тип | По умолчанию |
|---|---|---|
instance | ulong | — |
_OnInstanceDestroyedvoid
public virtual void _OnInstanceDestroyed();Вызывается непосредственно перед уничтожением экземпляра OpenXR. Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван после завершения участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые использовались потоком рендеринга.
_OnMainSwapchainsCreatedvoid
public virtual void _OnMainSwapchainsCreated();Вызывается сразу после (повторного) создания основных цепочек обмена. Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.
_OnPostDrawViewportvoid
public virtual void _OnPostDrawViewport(Rid viewport);Вызывается сразу после отрисовки указанного видового окна. Примечание: Команды отрисовки могут быть только поставлены в очередь на этом этапе, но не выполнены. Примечание: Этот виртуальный метод будет вызван в потоке отрисовки.
| Имя | Тип | По умолчанию |
|---|---|---|
viewport | Rid | — |
_OnPreDrawViewportvoid
public virtual void _OnPreDrawViewport(Rid viewport);Вызывается непосредственно перед отрисовкой указанного области просмотра. Примечание: Этот виртуальный метод будет вызван в потоке отрисовки.
| Имя | Тип | По умолчанию |
|---|---|---|
viewport | Rid | — |
_OnPreRendervoid
public virtual void _OnPreRender();Вызывается непосредственно перед началом рендеринга XR-окнов. Примечание: Этот виртуальный метод будет вызываться в потоке рендеринга.
_OnProcessvoid
public virtual void _OnProcess();Вызывается как часть обработки процесса OpenXR. Это происходит прямо перед общими и физическими этапами обработки основного цикла. Во время этого этапа данные контроллера запрашиваются и становятся доступными для игровой логики.
_OnRegisterMetadatavoid
public virtual void _OnRegisterMetadata(OpenXRInteractionProfileMetadata interactionProfileMetadata);Позволяет расширениям регистрировать дополнительные метаданные контроллера. Эта функция вызывается даже тогда, когда API OpenXR не создан, так как метаданные должны быть доступны редактору. Расширения также должны предоставлять метаданные независимо от того, поддерживаются ли они в хост-системе. Данные контроллера используются для настройки карт действий для пользователей, которые могут иметь доступ к соответствующему оборудованию.
| Имя | Тип | По умолчанию |
|---|---|---|
interactionProfileMetadata | OpenXRInteractionProfileMetadata | — |
_OnSessionCreatedvoid
public virtual void _OnSessionCreated(ulong session);Вызывается сразу после создания сессии OpenXR. Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван до участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые будут использоваться потоком рендеринга.
Уничтожена
| Имя | Тип | По умолчанию |
|---|---|---|
session | ulong | — |
_OnSessionDestroyedvoid
public virtual void _OnSessionDestroyed();Вызывается непосредственно перед уничтожением сессии OpenXR. Примечание: Этот виртуальный метод будет вызван в основном потоке, однако он будет вызван после завершения участия OpenXR в рендеринге, поэтому безопасно записывать данные, которые использовались потоком рендеринга.
_OnStateExitingvoid
public virtual void _OnStateExiting();Вызывается, когда состояние сеанса OpenXR изменяется на выход.
_OnStateFocusedvoid
public virtual void _OnStateFocused();Вызывается, когда состояние сеанса OpenXR меняется на сфокусированное. Это состояние является активным, когда игра запущена.
_OnStateIdlevoid
public virtual void _OnStateIdle();Вызывается, когда состояние сеанса OpenXR изменяется на состояние ожидания.
_OnStateLossPendingvoid
public virtual void _OnStateLossPending();Вызывается, когда состояние сеанса OpenXR изменяется на «ожидание потери».
_OnStateReadyvoid
public virtual void _OnStateReady();Вызывается, когда состояние сеанса OpenXR меняется на ready. Это означает, что OpenXR готов настроить сеанс.
_OnStateStoppingvoid
public virtual void _OnStateStopping();Вызывается, когда состояние сеанса OpenXR изменяется на остановку.
_OnStateSynchronizedvoid
public virtual void _OnStateSynchronized();Вызывается, когда состояние сеанса OpenXR меняется на синхронизированное. OpenXR также возвращается в это состояние, когда приложение теряет фокус.
_OnStateVisiblevoid
public virtual void _OnStateVisible();Вызывается, когда состояние сеанса OpenXR меняется на видимое. Это означает, что OpenXR теперь готов принимать кадры.
_OnSyncActionsvoid
public virtual void _OnSyncActions();Вызывается, когда OpenXR выполнил свое действие синхронизации.
_PrepareViewConfigurationvoid
public virtual void _PrepareViewConfiguration(int viewCount);Вызывается перед методом _set_view_configuration_and_get_next_pointer, чтобы позволить расширению зарезервировать данные для заданного количества представлений.
| Имя | Тип | По умолчанию |
|---|---|---|
viewCount | int | — |
_PrintViewConfigurationInfovoid
public virtual void _PrintViewConfigurationInfo(int view);Эта функция вызывается для того, чтобы расширение могло выводить дополнительную информацию о своей конфигурации представления, если таковая имеется. Она будет вызываться только в том случае, если включен подробный вывод.
| Имя | Тип | По умолчанию |
|---|---|---|
view | int | — |