Class reference

OpenXRInterface

Inherits XRInterface

Our OpenXR interface.

Description

The OpenXR interface allows Redot to interact with OpenXR runtimes and make it possible to create XR experiences and games. Due to the needs of OpenXR this interface works slightly different than other plugin based XR interfaces. It needs to be initialized when Redot starts. You need to enable OpenXR, settings for this can be found in your games project settings under the XR heading. You do need to mark a viewport for use with XR in order for Redot to know which render result should be output to the headset.

Properties

float display_refresh_rate = 0.0

The display refresh rate for the current HMD. Only functional if this feature is supported by the OpenXR runtime and after the interface has been initialized.

bool foveation_dynamic = false

Enable dynamic foveation adjustment, the interface must be initialized before this is accessible. If enabled foveation will automatically adjusted between low and foveation_level. Note: Only works on the Compatibility renderer.

int foveation_level = 0

Set foveation level from 0 (off) to 3 (high), the interface must be initialized before this is accessible. Note: Only works on the Compatibility renderer.

float render_target_size_multiplier = 1.0

The render size multiplier for the current HMD. Must be set before the interface has been initialized.

float vrs_min_radius = 20.0

The minimum radius around the focal point where full quality is guaranteed if VRS is used as a percentage of screen size. Note: Mobile and Forward+ renderers only. Requires Viewport.vrs_mode to be set to Viewport.VRS_XR.

float vrs_strength = 1.0

The strength used to calculate the VRS density map. The greater this value, the more noticeable VRS is. This improves performance at the cost of quality. Note: Mobile and Forward+ renderers only. Requires Viewport.vrs_mode to be set to Viewport.VRS_XR.

Methods

Array get_action_sets() const

Returns a list of action sets registered with Redot (loaded from the action map at runtime).

Array get_available_display_refresh_rates() const

Returns display refresh rates supported by the current HMD. Only returned if this feature is supported by the OpenXR runtime and after the interface has been initialized.

int get_motion_range(int hand) const

If handtracking is enabled and motion range is supported, gets the currently configured motion range for hand.

int get_session_state()

Returns the current state of our OpenXR session.

bool is_action_set_active(String name) const

Returns true if the given action set is active.

bool is_eye_gaze_interaction_supported()

Returns the capabilities of the eye gaze interaction extension. Note: This only returns a valid value after OpenXR has been initialized.

bool is_foveation_supported() const

Returns true if OpenXR's foveation extension is supported, the interface must be initialized before this returns a valid value. Note: This feature is only available on the Compatibility renderer and currently only available on some stand alone headsets. For Vulkan set Viewport.vrs_mode to VRS_XR on desktop.

bool is_hand_interaction_supported() const

Returns true if OpenXR's hand interaction profile is supported and enabled. Note: This only returns a valid value after OpenXR has been initialized.

bool is_hand_tracking_supported()

Returns true if OpenXR's hand tracking is supported and enabled. Note: This only returns a valid value after OpenXR has been initialized.

void set_action_set_active(String name, bool active)

Sets the given action set as active or inactive.

void set_cpu_level(int level)

Sets the CPU performance level of the OpenXR device.

void set_gpu_level(int level)

Sets the GPU performance level of the OpenXR device.

void set_motion_range(int hand, int motion_range)

If handtracking is enabled and motion range is supported, sets the currently configured motion range for hand to motion_range.

Signals

cpu_level_changed(int sub_domain, int from_level, int to_level)

Informs the device CPU performance level has changed in the specified subdomain.

gpu_level_changed(int sub_domain, int from_level, int to_level)

Informs the device GPU performance level has changed in the specified subdomain.

instance_exiting()

Informs our OpenXR instance is exiting.

pose_recentered()

Informs the user queued a recenter of the player position.

refresh_rate_changed(float refresh_rate)

Informs the user the HMD refresh rate has changed. Note: Only emitted if XR runtime supports the refresh rate extension.

session_begun()

Informs our OpenXR session has been started.

session_focussed()

Informs our OpenXR session now has focus, for example output is sent to the HMD and we're receiving XR input.

session_loss_pending()

Informs our OpenXR session is in the process of being lost.

session_stopping()

Informs our OpenXR session is stopping.

session_synchronized()

Informs our OpenXR session has been synchronized.

session_visible()

Informs our OpenXR session is now visible, for example output is sent to the HMD but we don't receive XR input.

Constants

SESSION_STATE_UNKNOWN = 0

Enum: SessionState

The state of the session is unknown, we haven't tried setting up OpenXR yet.

SESSION_STATE_IDLE = 1

Enum: SessionState

The initial state after the OpenXR session is created or after the session is destroyed.

SESSION_STATE_READY = 2

Enum: SessionState

OpenXR is ready to begin our session. session_begun is emitted when we change to this state.

SESSION_STATE_SYNCHRONIZED = 3

Enum: SessionState

The application has synched its frame loop with the runtime but we're not rendering anything. session_synchronized is emitted when we change to this state.

SESSION_STATE_VISIBLE = 4

Enum: SessionState

The application has synched its frame loop with the runtime and we're rendering output to the user, however we receive no user input. session_visible is emitted when we change to this state. Note: This is the current state just before we get the focused state, whenever the user opens a system menu, switches to another application, or takes off their headset.

SESSION_STATE_FOCUSED = 5

Enum: SessionState

The application has synched its frame loop with the runtime, we're rendering output to the user and we're receiving XR input. session_focussed is emitted when we change to this state. Note: This is the state OpenXR will be in when the user can fully interact with your game.

SESSION_STATE_STOPPING = 6

Enum: SessionState

Our session is being stopped. session_stopping is emitted when we change to this state.

SESSION_STATE_LOSS_PENDING = 7

Enum: SessionState

The session is about to be lost. session_loss_pending is emitted when we change to this state.

SESSION_STATE_EXITING = 8

Enum: SessionState

The OpenXR instance is about to be destroyed and we're existing. instance_exiting is emitted when we change to this state.

HAND_LEFT = 0

Enum: Hand

Left hand.

HAND_RIGHT = 1

Enum: Hand

Right hand.

HAND_MAX = 2

Enum: Hand

Maximum value for the hand enum.

HAND_MOTION_RANGE_UNOBSTRUCTED = 0

Enum: HandMotionRange

Full hand range, if user closes their hands, we make a full fist.

HAND_MOTION_RANGE_CONFORM_TO_CONTROLLER = 1

Enum: HandMotionRange

Conform to controller, if user closes their hands, the tracked data conforms to the shape of the controller.

HAND_MOTION_RANGE_MAX = 2

Enum: HandMotionRange

Maximum value for the motion range enum.

HAND_TRACKED_SOURCE_UNKNOWN = 0

Enum: HandTrackedSource

The source of hand tracking data is unknown (the extension is likely unsupported).

HAND_TRACKED_SOURCE_UNOBSTRUCTED = 1

Enum: HandTrackedSource

The source of hand tracking is unobstructed, this means that an accurate method of hand tracking is used, e.g. optical hand tracking, data gloves, etc.

HAND_TRACKED_SOURCE_CONTROLLER = 2

Enum: HandTrackedSource

The source of hand tracking is a controller, bone positions are inferred from controller inputs.

HAND_TRACKED_SOURCE_MAX = 3

Enum: HandTrackedSource

Represents the size of the HandTrackedSource enum.

HAND_JOINT_PALM = 0

Enum: HandJoints

Palm joint.

HAND_JOINT_WRIST = 1

Enum: HandJoints

Wrist joint.

HAND_JOINT_THUMB_METACARPAL = 2

Enum: HandJoints

Thumb metacarpal joint.

HAND_JOINT_THUMB_PROXIMAL = 3

Enum: HandJoints

Thumb proximal joint.

HAND_JOINT_THUMB_DISTAL = 4

Enum: HandJoints

Thumb distal joint.

HAND_JOINT_THUMB_TIP = 5

Enum: HandJoints

Thumb tip joint.

HAND_JOINT_INDEX_METACARPAL = 6

Enum: HandJoints

Index finger metacarpal joint.

HAND_JOINT_INDEX_PROXIMAL = 7

Enum: HandJoints

Index finger phalanx proximal joint.

HAND_JOINT_INDEX_INTERMEDIATE = 8

Enum: HandJoints

Index finger phalanx intermediate joint.

HAND_JOINT_INDEX_DISTAL = 9

Enum: HandJoints

Index finger phalanx distal joint.

HAND_JOINT_INDEX_TIP = 10

Enum: HandJoints

Index finger tip joint.

HAND_JOINT_MIDDLE_METACARPAL = 11

Enum: HandJoints

Middle finger metacarpal joint.

HAND_JOINT_MIDDLE_PROXIMAL = 12

Enum: HandJoints

Middle finger phalanx proximal joint.

HAND_JOINT_MIDDLE_INTERMEDIATE = 13

Enum: HandJoints

Middle finger phalanx intermediate joint.

HAND_JOINT_MIDDLE_DISTAL = 14

Enum: HandJoints

Middle finger phalanx distal joint.

HAND_JOINT_MIDDLE_TIP = 15

Enum: HandJoints

Middle finger tip joint.

HAND_JOINT_RING_METACARPAL = 16

Enum: HandJoints

Ring finger metacarpal joint.

HAND_JOINT_RING_PROXIMAL = 17

Enum: HandJoints

Ring finger phalanx proximal joint.

HAND_JOINT_RING_INTERMEDIATE = 18

Enum: HandJoints

Ring finger phalanx intermediate joint.

HAND_JOINT_RING_DISTAL = 19

Enum: HandJoints

Ring finger phalanx distal joint.

HAND_JOINT_RING_TIP = 20

Enum: HandJoints

Ring finger tip joint.

HAND_JOINT_LITTLE_METACARPAL = 21

Enum: HandJoints

Pinky finger metacarpal joint.

HAND_JOINT_LITTLE_PROXIMAL = 22

Enum: HandJoints

Pinky finger phalanx proximal joint.

HAND_JOINT_LITTLE_INTERMEDIATE = 23

Enum: HandJoints

Pinky finger phalanx intermediate joint.

HAND_JOINT_LITTLE_DISTAL = 24

Enum: HandJoints

Pinky finger phalanx distal joint.

HAND_JOINT_LITTLE_TIP = 25

Enum: HandJoints

Pinky finger tip joint.

HAND_JOINT_MAX = 26

Enum: HandJoints

Represents the size of the HandJoints enum.

PERF_SETTINGS_LEVEL_POWER_SAVINGS = 0

Enum: PerfSettingsLevel

The application has entered a non-XR section (head-locked / static screen), during which power savings are to be prioritized.

PERF_SETTINGS_LEVEL_SUSTAINED_LOW = 1

Enum: PerfSettingsLevel

The application has entered a low and stable complexity section, during which reducing power is more important than occasional late rendering frames.

PERF_SETTINGS_LEVEL_SUSTAINED_HIGH = 2

Enum: PerfSettingsLevel

The application has entered a high or dynamic complexity section, during which the XR Runtime strives for consistent XR compositing and frame rendering within a thermally sustainable range.

PERF_SETTINGS_LEVEL_BOOST = 3

Enum: PerfSettingsLevel

The application has entered a section with very high complexity, during which the XR Runtime is allowed to step up beyond the thermally sustainable range.

PERF_SETTINGS_SUB_DOMAIN_COMPOSITING = 0

Enum: PerfSettingsSubDomain

The compositing performance within the runtime has reached a new level.

PERF_SETTINGS_SUB_DOMAIN_RENDERING = 1

Enum: PerfSettingsSubDomain

The application rendering performance has reached a new level.

PERF_SETTINGS_SUB_DOMAIN_THERMAL = 2

Enum: PerfSettingsSubDomain

The temperature of the device has reached a new level.

PERF_SETTINGS_NOTIF_LEVEL_NORMAL = 0

Enum: PerfSettingsNotificationLevel

The sub-domain has reached a level where no further actions other than currently applied are necessary.

PERF_SETTINGS_NOTIF_LEVEL_WARNING = 1

Enum: PerfSettingsNotificationLevel

The sub-domain has reached an early warning level where the application should start proactive mitigation actions.

PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED = 2

Enum: PerfSettingsNotificationLevel

The sub-domain has reached a critical level where the application should start drastic mitigation actions.

HAND_JOINT_NONE = 0

Enum: HandJointFlags

No flags are set.

HAND_JOINT_ORIENTATION_VALID = 1

Enum: HandJointFlags

If set, the orientation data is valid, otherwise, the orientation data is unreliable and should not be used.

HAND_JOINT_ORIENTATION_TRACKED = 2

Enum: HandJointFlags

If set, the orientation data comes from tracking data, otherwise, the orientation data contains predicted data.

HAND_JOINT_POSITION_VALID = 4

Enum: HandJointFlags

If set, the positional data is valid, otherwise, the positional data is unreliable and should not be used.

HAND_JOINT_POSITION_TRACKED = 8

Enum: HandJointFlags

If set, the positional data comes from tracking data, otherwise, the positional data contains predicted data.

HAND_JOINT_LINEAR_VELOCITY_VALID = 16

Enum: HandJointFlags

If set, our linear velocity data is valid, otherwise, the linear velocity data is unreliable and should not be used.

HAND_JOINT_ANGULAR_VELOCITY_VALID = 32

Enum: HandJointFlags

If set, our angular velocity data is valid, otherwise, the angular velocity data is unreliable and should not be used.

Tutorials

Source revision 4f5b14abade2
Connection interrupted. Reload×

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.