OpenXRFutureExtension
Backend registry и обработка OpenXR futures.
Зарегистрированный движком Object для backend OpenXR async запросов. Потребитель получает future от capability; RegisterFuture нужен реализациям расширений после получения настоящего XrFutureEXT. onSuccess декодирует native результат, а не начинает операцию.
Не создавайте wrapper как способ получить singleton: constructor меняет внутренний глобальный указатель. Не освобождайте зарегистрированный движком объект. IsActive — доступность XR_EXT_future/functions, не готовность конкретного запроса. Ошибка poll оставляет Running; проверяйте ошибки и жизненный цикл сессии.
При Finished callback получает сам OpenXRFutureResult; это отличается от проблемного Completed, где native передаёт payload. Изолированный XR-off тест проверил только registry metadata; отмена, реальные handles и обработка runtime не выполнялись.
На Windows headless XR-off выполнены 11 ограниченных проверок. Реальные async операции, cancellation, session teardown, native allocation и шлем не проверены. Исходники движка, Runtime и SDK не менялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
OpenXRFutureExtensionКонструктор
public OpenXRFutureExtension();Создаёт собственный native wrapper Object, а не возвращает зарегистрированный singleton. Constructor заменяет внутренний singleton pointer; в приложении не создавайте его ради получения поддержки. Используйте зарегистрированный движком объект и не освобождайте его. Изолированный диагностический экземпляр принадлежит тесту и требует Free, не только Dispose.
Методы3
CancelFuturevoid
public void CancelFuture(ulong future);Отменяет именно зарегистрированный native handle; не произвольное число. Нужны живая OpenXR instance и рабочая функция cancel. После попытки локальный future получает Cancelled и удаляется из registry, даже если native cancel сообщил ошибку. Это не гарантирует отмену уже начатых побочных эффектов; в XR-off этот путь не выполнялся.
| Имя | Тип | По умолчанию |
|---|---|---|
future | ulong | — |
futureЖивой XrFutureEXT уже начатой операции, не выдуманный ulong; метод не проверяет семантическую корректность handle.
IsActivebool
public bool IsActive();True при активном XR_EXT_future и разрешённых функциях poll/cancel. Не запускает сессию и не подтверждает возможность конкретной async операции. Проверяйте на зарегистрированном wrapper после старта OpenXR; новый диагностический wrapper в XR-off вернул false.
boolTrue при активном XR_EXT_future и разрешённых функциях poll/cancel. Не запускает сессию и не подтверждает возможность конкретной async операции. Проверяйте на зарегистрированном wrapper после старта OpenXR; новый диагностический wrapper в XR-off вернул false.
RegisterFutureOpenXRFutureResult
public OpenXRFutureResult RegisterFuture(ulong future, Callable onSuccess = default);Backend API регистрации handle, уже полученного от настоящего OpenXR async запроса. Не начинает операцию и не валидирует handle: изолированная XR-off проверка смогла зарегистрировать 0 как Running. Не передавайте выдуманные/повторные handles. onSuccess получает OpenXRFutureResult, вызывает native Complete нужной операции и SetResultValue. Потребитель обычно получает future от capability, а не вызывает этот метод.
| Имя | Тип | По умолчанию |
|---|---|---|
future | ulong | — |
onSuccess | Callable | default |
futureЖивой XrFutureEXT уже начатой операции, не выдуманный ulong; метод не проверяет семантическую корректность handle.
onSuccessBackend decoder callback с одним аргументом OpenXRFutureResult; вызывается после Finished, до Completed. Выполните native Complete и SetResultValue; при отмене не вызывается.
OpenXRFutureResultBackend API регистрации handle, уже полученного от настоящего OpenXR async запроса. Не начинает операцию и не валидирует handle: изолированная XR-off проверка смогла зарегистрировать 0 как Running. Не передавайте выдуманные/повторные handles. onSuccess получает OpenXRFutureResult, вызывает native Complete нужной операции и SetResultValue. Потребитель обычно получает future от capability, а не вызывает этот метод.