OpenXRFutureResult
Статус и Variant результат OpenXR async операции.
RefCounted результат, возвращаемый capability. Публичного constructor нет. Running/Finished/Cancelled описывают обработку, а не успех операции; Finished устанавливается до decoder callback, который заполняет GetResultValue. Проверяйте тип и значение результата.
В SDK 1.0.0 Completed типизирован как OpenXRFutureResult, тогда как native испускает Variant payload. Ручная bool emission на установленном Runtime дала bool обычному Variant listener и null C# event. Это воспроизведение контракта сигнала, не реальное async завершение. Сохраняйте исходный future и проверяйте GetStatus/GetResultValue; не разыменовывайте event argument.
SetResultValue не завершает запрос. Отмена меняет локальный статус; native ошибка отмены не доказывает остановку операции. Потребитель не должен регистрировать выдуманные handles или считать тайм-аут отсутствием поддержки.
На Windows headless XR-off выполнены 11 ограниченных проверок. Реальные async операции, cancellation, session teardown, native allocation и шлем не проверены. Исходники движка, Runtime и SDK не менялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Методы5
CancelFuturevoid
public void CancelFuture();Запрашивает отмену Running future через зарегистрированный OpenXRFutureExtension. Нужны живая сессия, активное расширение и зарегистрированный handle; не вызывайте для Finished/Cancelled. Локальный статус становится Cancelled и Completed получает Nil; даже native ошибка отмены сейчас только предупреждается, поэтому локальный статус не доказывает отмену работы устройством.
GetFutureulong
public ulong GetFuture();Возвращает native XrFutureEXT как ulong, не итог операции, не RID и не UUID. Предназначен для backend завершения конкретной OpenXR операции; после завершения/отмены не считайте handle пригодным для нового запроса. Getter сам не проверяет его живость и не опрашивает runtime.
ulongВозвращает native XrFutureEXT как ulong, не итог операции, не RID и не UUID. Предназначен для backend завершения конкретной OpenXR операции; после завершения/отмены не считайте handle пригодным для нового запроса. Getter сам не проверяет его живость и не опрашивает runtime.
GetResultValueVariant
public Variant GetResultValue();Читает сохранённый Variant результат, изначально Nil. Тип и смысл задаёт конкретная операция: например bool или RID. GetStatus=Finished не означает успех; проверяйте VariantType, значение и состояние связанного объекта. До decoder callback результат может быть ещё Nil; Cancelled сигнал также не является полезным результатом.
VariantЧитает сохранённый Variant результат, изначально Nil. Тип и смысл задаёт конкретная операция: например bool или RID. GetStatus=Finished не означает успех; проверяйте VariantType, значение и состояние связанного объекта. До decoder callback результат может быть ещё Nil; Cancelled сигнал также не является полезным результатом.
GetStatusOpenXRFutureResult.ResultStatus
public OpenXRFutureResult.ResultStatus GetStatus();Возвращает Running, Finished или Cancelled. Registry помечает Finished до вызова decoder callback, а затем испускает Completed. Это локальный lifecycle, не результат persistence/discovery. Ошибка poll может оставить Running; отсутствие обновлений/тайм-аут не подтверждают отсутствие поддержки.
OpenXRFutureResult.ResultStatusВозвращает Running, Finished или Cancelled. Registry помечает Finished до вызова decoder callback, а затем испускает Completed. Это локальный lifecycle, не результат persistence/discovery. Ошибка poll может оставить Running; отсутствие обновлений/тайм-аут не подтверждают отсутствие поддержки.
SetResultValuevoid
public void SetResultValue(Variant resultValue);Сохраняет Variant в слоте результата; не меняет статус, не завершает запрос и не испускает Completed. Нужен backend decoder callback после native Complete конкретной операции. Не используйте со стороны потребителя, чтобы искусственно объявить запрос успешным; возвращаемое значение Callable само сюда не записывается.
| Имя | Тип | По умолчанию |
|---|---|---|
resultValue | Variant | — |
resultValueСохраняет Variant в слоте результата; не меняет статус, не завершает запрос и не испускает Completed. Нужен backend decoder callback после native Complete конкретной операции. Не используйте со стороны потребителя, чтобы искусственно объявить запрос успешным; возвращаемое значение Callable само сюда не записывается.
Сигналы и события1
CompletedСобытие
public event OpenXRFutureResult.CompletedEventHandler Completed;Сигнал после обработки завершения или отмены. В SDK аргумент объявлен OpenXRFutureResult, но native передаёт result_value или Nil. На Runtime 1.0.0 ручной bool-сигнал дал bool в Variant listener и null в типизированном C# event. Не разыменовывайте аргумент как future и не используйте типизированный event для чтения bool/RID результата. Проверяйте сохранённый future через GetStatus/GetResultValue. Реальное async завершение не выполнялось.
| Имя | Тип | По умолчанию |
|---|---|---|
result | OpenXRFutureResult | — |
resultSDK объявляет OpenXRFutureResult, но native payload — result Variant/Nil; при bool typed event получил null. Не используйте аргумент как future.
OpenXRFutureResult.ResultStatus
| Значение | Описание |
|---|---|
Cancelled = 2 | Асинхронная функция отменена. |
Finished = 1 | Асинхронная функция завершена. |
Running = 0 | Асинхронная функция работает. |