171 lines
3.0 KiB
C++
171 lines
3.0 KiB
C++
#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_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
|
|
|