Rebel Fork Framework
Urho3D::OpenXR Class Reference

#include <Urho3D/XR/OpenXR.h>

Inheritance diagram for Urho3D::OpenXR:
Urho3D::VirtualReality Urho3D::Object Urho3D::RefCounted

Classes

struct  ExtensionFeatures
 
struct  TemporaryStorage
 Temporary storage for internal structures. More...
 

Public Member Functions

 OpenXR (Context *)
 
void SetUserExtensions (const StringVector &extensions)
 Configure the user extensions. Should be called before InitializeSystem.
 
bool InitializeSystem (RenderBackend backend)
 Initialize the OpenXR subsystem. Renderer backend is not yet initialized at this point.
 
const OpenXRTweaksGetTweaks () const
 
const StringVector GetExtensions () const
 
bool InitializeSession (const VRSessionParameters &params) override
 
void ShutdownSession () override
 Shuts down the VR session.
 
bool IsConnected () const override
 Returns whether the engine is connected to VR session.
 
bool IsRunning () const override
 Returns whether the VR frame loop is running.
 
bool IsVisible () const override
 Returns whether the VR session is presented to the user.
 
bool IsFocused () const override
 Return whether the VR session accepts user input.
 
VRRuntime GetRuntime () const override
 Return the classification of VR runtime being used,.
 
const char * GetRuntimeName () const override
 Return a string name for the runtime, spaces are not allowed as this will be passed along to shaders.
 
void TriggerHaptic (VRHand hand, float durationSeconds, float cyclesPerSec, float amplitude) override
 Activates a haptic for a given hand.
 
Matrix3x4 GetHandTransform (VRHand hand) const override
 Returns the transform for a given hand in head relative space.
 
Matrix3x4 GetHandAimTransform (VRHand hand) const override
 Transform matrix of the hand aim base position.
 
Ray GetHandAimRay (VRHand hand) const override
 Returns the aiming ray for a given hand.
 
void GetHandVelocity (VRHand hand, Vector3 *linear, Vector3 *angular) const override
 Return linear and/or angular velocity of a hand.
 
Matrix3x4 GetEyeLocalTransform (VREye eye) const override
 Return the head-relative eye transform.
 
Matrix4 GetProjection (VREye eye, float nearDist, float farDist) const override
 Return the projection matrix for an eye.
 
Matrix3x4 GetHeadTransform () const override
 Return the head transform in stage space (or local if no stage).
 
void SetCurrentActionSet (SharedPtr< XRActionGroup > set) override
 
- Public Member Functions inherited from Urho3D::VirtualReality
 VirtualReality (Context *context)
 
virtual void ConnectToRig (const VRRigDesc &rig)
 Connects session to the rig.
 
bool IsRoomScale () const
 Returns true if this VR configuration is running at room scale.
 
const VRRigDescGetRig () const
 Returns currently connected rig.
 
float GetIPDCorrection () const
 IPD correction factor in millimeters.
 
float GetScaleCorrection () const
 Scale correction factor, premultiplied into all transforms.
 
void SetIPDCorrection (float value)
 
void SetScaleCorrection (float value)
 Scale correction can also be done on the VRRig node.
 
int GetRecommendedMultiSample () const
 Returns recommended MSAA level.
 
int GetMultiSample () const
 Returns the currently chosen MSAA level.
 
IntRect GetLeftEyeRect () const
 Viewport rectangle for left eye, required for multipass single-RT.
 
IntRect GetRightEyeRect () const
 Viewport rectangle for right eye, required for multipass single-RT.
 
XRBindingGetInputBinding (const ea::string &path) const
 Attempts to retrieve an input binding.
 
XRBindingGetInputBinding (const ea::string &path, VRHand hand) const
 Attempts to retrieve a hand specific input binding.
 
XRActionGroupGetCurrentActionSet () const
 Returns the currently bound action set, null if no action set.
 
virtual void SetCurrentActionSet (const ea::string &setName)
 Sets the current action set by name.
 
ea::string GetSystemName () const
 Returns the system name, ie. Windows Mixed Reality.
 
- Public Member Functions inherited from Urho3D::Object
 Object (Context *context)
 Construct.
 
 ~Object () override
 Destruct. Clean up self from event sender & receiver structures.
 
virtual StringHash GetType () const =0
 
virtual const ea::string & GetTypeName () const =0
 
virtual const TypeInfoGetTypeInfo () const =0
 Return type info.
 
virtual void OnEvent (Object *sender, StringHash eventType, VariantMap &eventData)
 Handle event.
 
virtual void SerializeInBlock (Archive &archive)
 Serialize content from/to archive. May throw ArchiveException.
 
bool IsInstanceOf (StringHash type) const
 Check current instance is type of specified type.
 
bool IsInstanceOf (const TypeInfo *typeInfo) const
 Check current instance is type of specified type.
 
template<typename T >
bool IsInstanceOf () const
 Check current instance is type of specified class.
 
template<typename T >
T * Cast ()
 Cast the object to specified most derived class.
 
template<typename T >
const T * Cast () const
 Cast the object to specified most derived class.
 
void SubscribeToEventManual (StringHash eventType, EventHandler *handler)
 Subscribe to an event that can be sent by any sender.
 
void SubscribeToEventManual (Object *sender, StringHash eventType, EventHandler *handler)
 Subscribe to a specific sender's event.
 
template<class T >
void SubscribeToEvent (StringHash eventType, T handler)
 Subscribe to an event that can be sent by any sender.
 
template<class T >
void SubscribeToEvent (Object *sender, StringHash eventType, T handler)
 Subscribe to a specific sender's event.
 
void UnsubscribeFromEvent (StringHash eventType)
 Unsubscribe from an event.
 
void UnsubscribeFromEvent (Object *sender, StringHash eventType)
 Unsubscribe from a specific sender's event.
 
void UnsubscribeFromEvents (Object *sender)
 Unsubscribe from a specific sender's events.
 
void UnsubscribeFromAllEvents ()
 Unsubscribe from all events.
 
void UnsubscribeFromAllEventsExcept (const ea::vector< StringHash > &exceptions)
 Unsubscribe from all events except those listed.
 
void UnsubscribeFromAllEventsExcept (const ea::vector< Object * > &exceptions)
 Unsubscribe from all events except those with listed senders.
 
void SendEvent (StringHash eventType)
 Send event to all subscribers.
 
void SendEvent (StringHash eventType, VariantMap &eventData)
 Send event with parameters to all subscribers.
 
VariantMapGetEventDataMap () const
 Return a preallocated map for event data. Used for optimization to avoid constant re-allocation of event data maps.
 
template<typename... Args>
void SendEvent (StringHash eventType, const Args &... args)
 Send event with variadic parameter pairs to all subscribers. The parameters are (paramID, paramValue) pairs.
 
ContextGetContext () const
 Return execution context.
 
const VariantGetGlobalVar (StringHash key) const
 
const VariantMapGetGlobalVars () const
 
void SetGlobalVar (StringHash key, const Variant &value)
 
ObjectGetSubsystem (StringHash type) const
 Return subsystem by type.
 
ObjectGetEventSender () const
 Return active event sender. Null outside event handling.
 
EventHandlerGetEventHandler () const
 Return active event handler. Null outside event handling.
 
bool HasSubscribedToEvent (StringHash eventType) const
 Return whether has subscribed to an event without specific sender.
 
bool HasSubscribedToEvent (Object *sender, StringHash eventType) const
 Return whether has subscribed to a specific sender's event.
 
bool HasEventHandlers () const
 Return whether has subscribed to any event.
 
template<class T >
T * GetSubsystem () const
 Template version of returning a subsystem.
 
const ea::string & GetCategory () const
 
void SendEvent (StringHash eventType, const VariantMap &eventData)
 Send event with parameters to all subscribers.
 
void SetBlockEvents (bool block)
 Block object from sending and receiving events.
 
bool GetBlockEvents () const
 Return sending and receiving events blocking status.
 
- Public Member Functions inherited from Urho3D::RefCounted
 RefCounted ()
 Construct. Allocate the reference count structure and set an initial self weak reference.
 
virtual ~RefCounted ()
 Destruct. Mark as expired and also delete the reference count structure if no outside weak references exist.
 
 RefCounted (const RefCounted &rhs)=delete
 Prevent copy construction.
 
RefCountedoperator= (const RefCounted &rhs)=delete
 Prevent assignment.
 
int AddRef ()
 
int ReleaseRef ()
 
int Refs () const
 
int WeakRefs () const
 
RefCountRefCountPtr () const
 Return pointer to the reference count structure.
 
bool HasScriptObject () const
 Return true if script runtime object wrapping this native object exists.
 
bool IsScriptStrongRef () const
 Return true if script reference is strong.
 

Protected Member Functions

void InitializeActiveExtensions (RenderBackend backend)
 
bool InitializeTweaks (RenderBackend backend)
 
void UpdateHands ()
 
void UpdateControllerModels ()
 
void UpdateControllerModel (VRHand hand, Node *instanceNode)
 
bool OpenSession ()
 
void BindActions (XMLFile *xmlFile)
 
void UpdateBindingBound ()
 
void PollEvents ()
 
bool UpdateSessionState (XrSessionState state)
 
void BeginFrame ()
 
void AcquireSwapChainImages ()
 
void LocateViewsAndSpaces ()
 
void SynchronizeActions ()
 
void ReleaseSwapChainImages ()
 
void LinkImagesToFrameInfo (XrFrameEndInfo &endInfo)
 
void EndFrame (XrFrameEndInfo &endInfo)
 
void HandleBeginFrame ()
 
void HandleEndRendering ()
 
- Protected Member Functions inherited from Urho3D::VirtualReality
void CreateDefaultRig ()
 
void ValidateCurrentRig ()
 
void UpdateCurrentRig ()
 

Protected Attributes

StringVector supportedExtensions_
 
StringVector userExtensions_
 
StringVector activeExtensions_
 
struct Urho3D::OpenXR::ExtensionFeatures features_
 
SharedPtr< XMLFilemanifest_
 
XrInstancePtr instance_
 
XrDebugUtilsMessengerEXTPtr debugMessenger_
 
XrSystemId system_ {}
 
OpenXRTweaks tweaks_
 
XrSessionPtr session_
 
XrSpacePtr headSpace_
 
XrSpacePtr viewSpace_
 
OpenXRSwapChainPtr swapChain_
 
OpenXRSwapChainPtr depthChain_
 
EnumArray< XrView, VREye > views_ {{XR_TYPE_VIEW}}
 
EnumArray< SharedPtr< OpenXRControllerModel >, VRHand > controllerModels_
 
XrSpaceLocation headLocation_ {XR_TYPE_SPACE_LOCATION}
 Location tracking of the head.
 
XrSpaceVelocity headVelocity_ {XR_TYPE_SPACE_VELOCITY}
 Velocity tracking information of the head.
 
XrEnvironmentBlendMode blendMode_ {XR_ENVIRONMENT_BLEND_MODE_OPAQUE}
 
XrTime predictedTime_ {}
 Predicted time for display of the next frame.
 
XrSessionState sessionState_ {}
 Current session state.
 
EnumArray< SharedPtr< OpenXRBinding >, VRHand > handGrips_
 Cached grip pose bindings to avoid constant queries.
 
EnumArray< SharedPtr< OpenXRBinding >, VRHand > handAims_
 Cached aim pose bindings to avoid constant queries.
 
EnumArray< SharedPtr< OpenXRBinding >, VRHand > handHaptics_
 Cached haptic outputs to avoid constant queries.
 
struct Urho3D::OpenXR::TemporaryStorage temp_
 
- Protected Attributes inherited from Urho3D::VirtualReality
ea::string systemName_
 Name of the system being run, ie. Windows Mixed Reality.
 
int recommendedMultiSample_ {1}
 MSAA level recommended by API.
 
IntVector2 recommendedEyeTextureSize_
 Texture size recommended by API.
 
int multiSample_ {}
 Effective MSAA level to use.
 
IntVector2 eyeTextureSize_
 Effective texture size.
 
float ipdCorrection_ = 0.0f
 External IPD adjustment.
 
float scaleCorrection_ = 1.0f
 Scaling factor correct by.
 
bool autoClearMasks_ = true
 
bool isRoomScale_ = false
 Indicates we have room scale tracking.
 
SharedPtr< ScenedefaultScene_
 Default scene for rendering.
 
SharedPtr< VRRigdefaultRig_
 Default rig to use.
 
VRRigDesc rig_
 Link to currently used rig.
 
SharedPtr< Texture2DcurrentBackBufferColor_
 Back buffer textures active in current frame.
 
SharedPtr< Texture2DcurrentBackBufferDepth_
 
SharedPtr< XRActionGroupactiveActionSet_
 Currently bound action-set.
 
ea::map< ea::string, SharedPtr< XRActionGroup > > actionSets_
 Table of action sets registered.
 
- Protected Attributes inherited from Urho3D::Object
WeakPtr< Contextcontext_
 Execution context.
 

Private Member Functions

 URHO3D_OBJECT (OpenXR, VirtualReality)
 

Additional Inherited Members

- Static Public Member Functions inherited from Urho3D::Object
static const TypeInfoGetTypeInfoStatic ()
 Return type info static.
 

Detailed Description

Register as a subsystem, Initialize sometime after GFX has been initialized but before Audio is initialized ... otherwise it won't get the right audio target. Or reinit audio querying for the default device.

Currently setup around a VR experience. Minor changes will be required for additive / HoloLens. Mobile AR would be best done with another class that's pared down to the specifics that apply instead of trying to make this class into a monster.

Expectations for the VR-Rig:

Scene

  • "VRRig" NETWORKED, this is effectively the tracking volume center floor
    • "Head" NETWORKED
    • "Left_Hand" NETWORKED, will have enabled status set based on controller availability
    • "Right_Hand" NETWORKED, will have enabled status set based on controller availability

To-Do:

  • Trackers
  • Multiple Action-Sets
  • Hand Skeleton

Member Function Documentation

◆ InitializeSession()

bool Urho3D::OpenXR::InitializeSession ( const VRSessionParameters params)
overridevirtual

Implement VirtualReality.

Implements Urho3D::VirtualReality.

Member Data Documentation

◆ blendMode_

XrEnvironmentBlendMode Urho3D::OpenXR::blendMode_ {XR_ENVIRONMENT_BLEND_MODE_OPAQUE}
protected

Blending mode the compositor will be told to use. Assumed that when not opaque the correct mode will be be received from querying.


The documentation for this class was generated from the following files: