lovr/src/headset/headset.h

107 lines
2.9 KiB
C
Raw Normal View History

2018-02-11 23:22:04 +00:00
#include "data/modelData.h"
2017-03-11 10:19:33 +00:00
#include "lib/vec/vec.h"
2016-12-01 07:03:58 +00:00
#include "util.h"
2017-10-31 08:14:09 +00:00
#include <stdbool.h>
2016-12-01 04:32:14 +00:00
2017-01-26 10:20:30 +00:00
#pragma once
2016-11-15 00:20:56 +00:00
typedef enum {
EYE_LEFT,
EYE_RIGHT
} HeadsetEye;
2017-08-04 05:21:49 +00:00
typedef enum {
ORIGIN_HEAD,
ORIGIN_FLOOR
} HeadsetOrigin;
typedef enum {
DRIVER_FAKE,
DRIVER_OPENVR,
DRIVER_WEBVR
} HeadsetDriver;
2017-08-13 04:35:01 +00:00
typedef enum {
HEADSET_UNKNOWN,
HEADSET_VIVE,
2017-10-12 00:14:51 +00:00
HEADSET_RIFT,
HEADSET_WINDOWS_MR,
2017-10-12 00:14:51 +00:00
HEADSET_FAKE
2017-08-13 04:35:01 +00:00
} HeadsetType;
2016-11-15 00:20:56 +00:00
typedef enum {
CONTROLLER_AXIS_TRIGGER,
2017-08-13 05:58:59 +00:00
CONTROLLER_AXIS_GRIP,
2016-11-15 00:20:56 +00:00
CONTROLLER_AXIS_TOUCHPAD_X,
2017-08-13 11:35:49 +00:00
CONTROLLER_AXIS_TOUCHPAD_Y
2016-11-15 00:20:56 +00:00
} ControllerAxis;
2016-11-15 03:57:23 +00:00
typedef enum {
2017-08-13 05:58:59 +00:00
CONTROLLER_BUTTON_UNKNOWN,
2016-11-15 03:57:23 +00:00
CONTROLLER_BUTTON_SYSTEM,
CONTROLLER_BUTTON_MENU,
2017-08-13 05:58:59 +00:00
CONTROLLER_BUTTON_TRIGGER,
2016-11-15 03:57:23 +00:00
CONTROLLER_BUTTON_GRIP,
2017-07-25 06:17:00 +00:00
CONTROLLER_BUTTON_TOUCHPAD,
2017-08-13 05:58:59 +00:00
CONTROLLER_BUTTON_JOYSTICK,
CONTROLLER_BUTTON_A,
CONTROLLER_BUTTON_B,
CONTROLLER_BUTTON_X,
CONTROLLER_BUTTON_Y
2016-11-15 03:57:23 +00:00
} ControllerButton;
2017-08-13 05:58:59 +00:00
typedef enum {
HAND_UNKNOWN,
HAND_LEFT,
HAND_RIGHT
} ControllerHand;
2016-10-03 01:09:33 +00:00
typedef struct {
2016-12-01 07:03:58 +00:00
Ref ref;
unsigned int id;
2016-10-03 01:09:33 +00:00
} Controller;
2016-12-01 07:03:58 +00:00
typedef vec_t(Controller*) vec_controller_t;
2016-12-01 04:32:14 +00:00
typedef struct {
HeadsetDriver driverType;
2018-03-05 04:43:42 +00:00
bool (*init)(float offset);
void (*destroy)();
HeadsetType (*getType)();
HeadsetOrigin (*getOriginType)();
bool (*isMounted)();
bool (*isMirrored)();
void (*setMirrored)(bool mirror);
void (*getDisplayDimensions)(int* width, int* height);
void (*getClipDistance)(float* clipNear, float* clipFar);
void (*setClipDistance)(float clipNear, float clipFar);
float (*getBoundsWidth)();
float (*getBoundsDepth)();
void (*getPose)(float* x, float* y, float* z, float* angle, float* ax, float* ay, float* az);
void (*getEyePose)(HeadsetEye eye, float* x, float* y, float* z, float* angle, float* ax, float* ay, float* az);
void (*getVelocity)(float* x, float* y, float* z);
void (*getAngularVelocity)(float* x, float* y, float* z);
vec_controller_t* (*getControllers)();
bool (*controllerIsConnected)(Controller* controller);
ControllerHand (*controllerGetHand)(Controller* controller);
void (*controllerGetPose)(Controller* controller, float* x, float* y, float* z, float* angle, float* ax, float* ay, float* az);
float (*controllerGetAxis)(Controller* controller, ControllerAxis axis);
bool (*controllerIsDown)(Controller* controller, ControllerButton button);
bool (*controllerIsTouched)(Controller* controller, ControllerButton button);
void (*controllerVibrate)(Controller* controller, float duration, float power);
ModelData* (*controllerNewModelData)(Controller* controller);
2018-03-11 07:42:33 +00:00
void (*renderTo)(void (*callback)(void*), void* userdata);
void (*update)(float dt);
2017-10-22 23:44:26 +00:00
} HeadsetInterface;
2018-04-28 23:59:53 +00:00
// Available drivers
2017-10-22 23:44:26 +00:00
extern HeadsetInterface lovrHeadsetOpenVRDriver;
2017-11-23 22:19:20 +00:00
extern HeadsetInterface lovrHeadsetWebVRDriver;
2017-10-22 23:44:26 +00:00
extern HeadsetInterface lovrHeadsetFakeDriver;
2018-04-28 23:59:53 +00:00
// Active driver
extern HeadsetInterface* lovrHeadsetDriver;
2018-03-05 04:43:42 +00:00
void lovrHeadsetInit(HeadsetDriver* drivers, int count, float offset);
2017-01-22 02:18:12 +00:00
void lovrHeadsetDestroy();