2017-02-19 22:59:53 +00:00
|
|
|
#include "loaders/model.h"
|
|
|
|
#include "loaders/texture.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"
|
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
|
|
|
|
2017-01-23 05:20:34 +00:00
|
|
|
typedef enum {
|
|
|
|
EYE_LEFT,
|
|
|
|
EYE_RIGHT
|
|
|
|
} HeadsetEye;
|
|
|
|
|
2017-08-04 05:21:49 +00:00
|
|
|
typedef enum {
|
|
|
|
ORIGIN_HEAD,
|
|
|
|
ORIGIN_FLOOR
|
|
|
|
} HeadsetOrigin;
|
|
|
|
|
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_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;
|
2017-01-26 10:26:15 +00:00
|
|
|
typedef void (*headsetRenderCallback)(HeadsetEye eye, void* userdata);
|
2016-12-01 04:32:14 +00:00
|
|
|
|
2017-10-20 20:32:46 +00:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
int (*isAvailable)();
|
|
|
|
void (*init)();
|
|
|
|
void (*destroy)();
|
|
|
|
void (*poll)();
|
|
|
|
int (*isPresent)();
|
|
|
|
HeadsetType (*getType)();
|
|
|
|
HeadsetOrigin (*getOriginType)();
|
|
|
|
int (*isMirrored)();
|
|
|
|
void (*setMirrored)(int mirror);
|
|
|
|
void (*getDisplayDimensions)(int* width, int* height);
|
|
|
|
void (*getClipDistance)(float* clipNear, float* clipFar);
|
|
|
|
void (*setClipDistance)(float clipNear, float clipFar);
|
|
|
|
float (*getBoundsWidth)();
|
|
|
|
float (*getBoundsDepth)();
|
|
|
|
void (*getBoundsGeometry)(float* geometry);
|
|
|
|
void (*getPosition)(float* x, float* y, float* z);
|
|
|
|
void (*getEyePosition)(HeadsetEye eye, float* x, float* y, float* z);
|
|
|
|
void (*getOrientation)(float* angle, float* x, float* y, float* z);
|
|
|
|
void (*getVelocity)(float* x, float* y, float* z);
|
|
|
|
void (*getAngularVelocity)(float* x, float* y, float* z);
|
|
|
|
vec_controller_t* (*getControllers)();
|
|
|
|
int (*controllerIsPresent)(Controller* controller);
|
|
|
|
ControllerHand (*controllerGetHand)(Controller* controller);
|
|
|
|
void (*controllerGetPosition)(Controller* controller, float* x, float* y, float* z);
|
|
|
|
void (*controllerGetOrientation)(Controller* controller, float* angle, float* x, float* y, float* z);
|
|
|
|
float (*controllerGetAxis)(Controller* controller, ControllerAxis axis);
|
|
|
|
int (*controllerIsDown)(Controller* controller, ControllerButton button);
|
|
|
|
int (*controllerIsTouched)(Controller* controller, ControllerButton button);
|
|
|
|
void (*controllerVibrate)(Controller* controller, float duration, float power);
|
|
|
|
ModelData* (*controllerNewModelData)(Controller* controller);
|
|
|
|
void (*renderTo)(headsetRenderCallback callback, void* userdata);
|
|
|
|
void (*update)(float dt);
|
2017-10-22 23:44:26 +00:00
|
|
|
} HeadsetInterface;
|
2017-10-20 20:32:46 +00:00
|
|
|
|
|
|
|
|
2017-10-21 09:39:33 +00:00
|
|
|
// headset implementations
|
2017-10-22 23:44:26 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetOpenVRDriver;
|
|
|
|
extern HeadsetInterface lovrHeadsetFakeDriver;
|
2017-10-21 09:39:33 +00:00
|
|
|
|
|
|
|
|
2016-08-11 04:17:14 +00:00
|
|
|
void lovrHeadsetInit();
|
2017-01-22 02:18:12 +00:00
|
|
|
void lovrHeadsetDestroy();
|
2016-12-01 07:03:58 +00:00
|
|
|
void lovrHeadsetPoll();
|
2017-02-19 23:49:39 +00:00
|
|
|
int lovrHeadsetIsPresent();
|
2017-08-13 04:35:01 +00:00
|
|
|
HeadsetType lovrHeadsetGetType();
|
2017-08-04 05:21:49 +00:00
|
|
|
HeadsetOrigin lovrHeadsetGetOriginType();
|
2017-03-12 03:12:03 +00:00
|
|
|
int lovrHeadsetIsMirrored();
|
|
|
|
void lovrHeadsetSetMirrored(int mirror);
|
2016-10-24 23:03:29 +00:00
|
|
|
void lovrHeadsetGetDisplayDimensions(int* width, int* height);
|
2017-10-12 19:54:01 +00:00
|
|
|
void lovrHeadsetGetClipDistance(float* clipNear, float* clipFar);
|
|
|
|
void lovrHeadsetSetClipDistance(float clipNear, float clipFar);
|
2016-11-24 04:54:04 +00:00
|
|
|
float lovrHeadsetGetBoundsWidth();
|
|
|
|
float lovrHeadsetGetBoundsDepth();
|
|
|
|
void lovrHeadsetGetBoundsGeometry(float* geometry);
|
2016-09-17 21:25:08 +00:00
|
|
|
void lovrHeadsetGetPosition(float* x, float* y, float* z);
|
2017-01-23 05:20:34 +00:00
|
|
|
void lovrHeadsetGetEyePosition(HeadsetEye eye, float* x, float* y, float* z);
|
2017-01-20 02:04:45 +00:00
|
|
|
void lovrHeadsetGetOrientation(float* angle, float* x, float* y, float* z);
|
2016-09-17 02:43:43 +00:00
|
|
|
void lovrHeadsetGetVelocity(float* x, float* y, float* z);
|
2016-10-01 21:12:55 +00:00
|
|
|
void lovrHeadsetGetAngularVelocity(float* x, float* y, float* z);
|
2016-12-01 07:03:58 +00:00
|
|
|
vec_controller_t* lovrHeadsetGetControllers();
|
2017-02-19 23:49:39 +00:00
|
|
|
int lovrHeadsetControllerIsPresent(Controller* controller);
|
2017-08-13 05:58:59 +00:00
|
|
|
ControllerHand lovrHeadsetControllerGetHand(Controller* controller);
|
2016-11-15 03:47:24 +00:00
|
|
|
void lovrHeadsetControllerGetPosition(Controller* controller, float* x, float* y, float* z);
|
2017-01-20 02:04:45 +00:00
|
|
|
void lovrHeadsetControllerGetOrientation(Controller* controller, float* angle, float* x, float* y, float* z);
|
2016-11-15 03:47:24 +00:00
|
|
|
float lovrHeadsetControllerGetAxis(Controller* controller, ControllerAxis axis);
|
2016-11-15 03:57:23 +00:00
|
|
|
int lovrHeadsetControllerIsDown(Controller* controller, ControllerButton button);
|
2017-08-13 05:58:59 +00:00
|
|
|
int lovrHeadsetControllerIsTouched(Controller* controller, ControllerButton button);
|
2017-04-23 01:20:12 +00:00
|
|
|
void lovrHeadsetControllerVibrate(Controller* controller, float duration, float power);
|
2017-02-19 22:59:53 +00:00
|
|
|
ModelData* lovrHeadsetControllerNewModelData(Controller* controller);
|
2016-09-14 00:02:23 +00:00
|
|
|
void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata);
|
2017-10-13 20:46:33 +00:00
|
|
|
void lovrHeadsetUpdate(float dt);
|
2016-12-01 07:03:58 +00:00
|
|
|
|
2017-10-20 20:32:46 +00:00
|
|
|
|
2016-12-01 07:03:58 +00:00
|
|
|
void lovrControllerDestroy(const Ref* ref);
|