Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Интерфейс XR SDK PreInit

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

Обзор

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

Открытие

Процессу сборки проекта Unity требуется имя библиотеки поставщика, прежде чем он сможет вызывать XRSDKPreInit() при запуске ядра. Для этого реализуйте интерфейс IXRLoaderPreInit.GetPreInitLibraryName в вашем XRLoader:

public string GetPreInitLibraryName(BuildTarget buildTarget, BuildTargetGroup buildTargetGroup) { return "XRSDKMyProviderLibraryName"; }

При запуске Unity запускает приведенный выше код для загрузки библиотеки. Затем Unity открывает эту библиотеку, ищет экспорт XRSDKPreInit и вызывает его. В этот момент XRSDKPreInit должен зарегистрировать UnityXRPreInitProvider.

Регистрация в XRSDKPreInit

Вот простой пример, в котором регистрируются все обратные вызовы, которые можно использовать для ранней инициализации движка:

XRSDKPreInit(IUnityInterfaces * interfaces) { IUnityXRPreInit* preInit = (IUnityXRPreInit*)interfaces->GetInterface(GetUnityInterfaceGUID()); UnityXRPreInitProvider provider = { 0 }; provider.userData = nullptr; provider.GetPreInitFlags = GetPreInitFlags; provider.GetGraphicsAdapterId = GetGraphicsAdapterId; provider.GetVulkanInstanceExtensions = GetVulkanInstanceExtensions; provider.GetVulkanDeviceExtensions = GetVulkanDeviceExtensions; preInit->RegisterPreInitProvider(&provider); }

Установите любые обратные вызовы, которые вам не нужны, на nullptr.


Обратные вызовы

Получитьпреинитфлаги

GetPreInitFlags возвращает 64-битное битовое поле флагов. В настоящее время доступны следующие флаги:

  • kUnityXRPreInitFlagsEGLUsePBuffer — на платформах EGL (Android, автономные устройства Oculus и т. д.) EGL следует инициализировать с помощью PBuffers.
  • kUnityXRPreInitFlagsEGLUseNoErrorContext — на платформах EGL EGL следует инициализировать с контекстом NO_ERROR.

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

ПолучитьGraphicsAdapterId

GetGraphicsAdapterId задает графический адаптер, который графическое устройство среды выполнения Unity использует для инициализации графического API. Например, если пользователь подключает гарнитуру к графическому процессору, отличному от основного устройства отображения пользователя, Unity может потребоваться инициализировать графический API, который явно нацелен на дополнительный графический процессор.

GetVulkanDeviceExtensions и GetVulkanInstanceExtensions

GetVulkanDeviceExtensions и GetVulkanInstanceExtensions используются, если провайдеру требуется Unity для инициализации Vulkan с определенными расширениями для устройства и экземпляра. Это часто используется для совместного использования поверхности композитора. Оба они возвращают строку расширений, разделенных пробелами.


Известные проблемы

  • В настоящее время GetPreInitLibraryName вызывается только для первого XRLoader в prefab Тип актива, который позволяет хранить GameObject вместе с компонентами и свойствами. Префаб действует как шаблон, из которого вы можете создавать новые экземпляры объектов на сцене. Подробнее
    См. в Словарь
    , поэтому только первый поставщик в списке может предоставить запись PreInit. точек во время выполнения.
  • PreInit требует, чтобы собственная библиотека открывала точку входа во время ранней инициализации ядра.
  • PreInit в настоящее время не применяется к редактору.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3