States separate synchronization, visibility, entry, stop, and session loss. See how to avoid crashes and GPU waste.
Direct answer
OpenXR defines eight lifecycle states for a session, from IDLE to EXITING. In SYNCHRONIZED, the application maintains the frame loop but can avoid heavy rendering; in VISIBLE, it continues rendering without receiving XR input; in FOCUSED, it also receives input. STOPPING calls for closing the loop and xrEndSession, while LOSS_PENDING calls for destroying the session and, if appropriate, recreating system and graphics resources.
Visible does not mean interactive
A system pop-up can keep the scene visible and remove focus. The application must pause actions and hide inactive input avatars without deleting the scene.
Synchronized allows you to save GPU
The frame loop continues, but shouldRender may indicate which layers do not need to be sent. Heavy work in this state competes for resources without visual benefit.
STOPPING is a protocol order
Ignoring the event and continuing rendering may block transitions. Exit the loop and end the session in the expected sequence.
Session loss calls for controlled reconstruction
Lost display connection makes handles unusable. System-dependent resources must be destroyed and recreated, without promising invisible resumption.
Nexus Reading
Model each state explicitly, record transitions, and test sleep, modal, headset removal, app switching, and hardware loss on every supported runtime.
FAQ
When does the application receive XR input?
In FOCUSED state; VISIBLE shows the scene, but does not make the actions eligible for input.
Should I stop the frame loop at SYNCHRONIZED?
No. It should remain in sync, avoiding heavy work when rendering is not necessary.
Can LOSS_PENDING be recovered?
The application can destroy the session, query a new system, and recreate resources if the context allows.
Essential guides to delve deeper into the decision
This editorial analysis was produced by Nexus from the official sources below, consulted on October 24, 2026. The text is original and interprets practical implications for companies.
- Khronos — XrSessionState: states, semantics, frame loop, focus, stop and recovery.
- Khronos — OpenXR Specification: normative contract for the runtime, sessions, events and rendering.
Date reported by main source: OpenXR 1.1.65 consulted on October 24, 2026; technical pattern analysis.

