Files
funnygame/public/ixr.h
2026-06-15 03:49:11 +03:00

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