#ifndef IXR_H #define IXR_H #include "tier1/interface.h" #include "tier2/iappsystem.h" #include "materialsystem/imaterialsystem.h" #include "trig.h" struct XRRenderSurface_t { uint32_t m_uWidth; uint32_t m_uHeight; Vector m_vPosition; Quat m_vRotation; float m_fFov; }; enum EXRControllerType_t { k_EXR_HandController, k_EXR_Hand, }; enum EXRControllerSide_t { k_EXRController_Left, k_EXRController_Right, }; /* defined by openxr + steam frame */ enum EXRInputType_t { k_EXRInput_FromString, k_EXRInput_Trackpad, k_EXRInput_Thumbstick, k_EXRInput_Joystick, k_EXRInput_Trigger, k_EXRInput_Throttle , k_EXRInput_Trackball, k_EXRInput_Pedal, k_EXRInput_System, k_EXRInput_Dpad_Up, k_EXRInput_Dpad_Down, k_EXRInput_Dpad_Left, k_EXRInput_Dpad_Right, k_EXRInput_Diamond_Up, k_EXRInput_Diamond_Down, k_EXRInput_Diamond_Left, k_EXRInput_Diamond_Right, k_EXRInput_A, k_EXRInput_B, k_EXRInput_X, k_EXRInput_Y, k_EXRInput_Start, k_EXRInput_Home, k_EXRInput_End, k_EXRInput_Select, k_EXRInput_Volume_Up, k_EXRInput_Volume_Down, k_EXRInput_Mute_Mic, k_EXRInput_Play_Pause, k_EXRInput_Menu, k_EXRInput_View, k_EXRInput_Back, k_EXRInput_ThumbRest, k_EXRInput_Shoulder, k_EXRInput_Squeeze, k_EXRInput_Wheel, k_EXRInput_ThumbRestingSurfaces, k_EXRInput_Grip, k_EXRInput_Aim, }; enum EXRInputActionType_t { k_EXRInputAction_Touch, k_EXRInputAction_Click, k_EXRInputAction_Force, k_EXRInputAction_Value, k_EXRInputAction_X, k_EXRInputAction_Y, k_EXRInputAction_Twist, k_EXRInputAction_Pose, k_EXRInputAction_Proximity, }; enum EXRValueType_t { k_EXRValue_Bool, k_EXRValue_Float, k_EXRValue_Vector2, k_EXRValue_Pose, }; union EXRInputValue_t { EXRValueType_t type; struct { EXRValueType_t type; bool value; } b; struct { EXRValueType_t type; float value; } f32; struct { EXRValueType_t type; float x; float y; } f32x2; struct { EXRInputType_t type; Vector pos; Quat rot; } pose; }; class IXRController; class IXRHeadset; typedef void ( *XRInputCallbackFn )( IXRController *pController, EXRInputType_t eType, const char *szType, EXRInputActionType_t action, EXRInputValue_t value ); abstract_class IXRController { public: virtual EXRControllerType_t GetControllerType() = 0; virtual EXRControllerSide_t GetControllerSide() = 0; virtual IXRHeadset *GetHeadset() = 0; virtual void SetInputCallback( XRInputCallbackFn fn ) = 0; }; abstract_class IXRHeadset { public: virtual uint32_t GetSurfaceCount() = 0; virtual XRRenderSurface_t GetSurface( uint32_t i ) = 0; virtual void SetSurfaceImage( uint32_t i, IImage *pImage ) = 0; virtual uint32_t GetControllerCount() = 0; virtual IXRController *GetController( uint32_t i ) = 0; }; abstract_class IXRManager: public IAppSystem2 { public: virtual void Frame() = 0; virtual void PreRender() = 0; virtual void PostRender() = 0; virtual void CopySwapchain() = 0; virtual uint32_t GetHeadsetCount() = 0; virtual IXRHeadset *GetHeadset( uint32_t i ) = 0; }; #define XR_INTERFACE_VERSION "XR001" #define OPEN_XR_INTERFACE_VERSION "Open" XR_INTERFACE_VERSION #endif