lovr/src/headset/headset.h

99 lines
4.0 KiB
C
Raw Normal View History

2016-12-01 04:32:14 +00:00
#include <vendor/vec/vec.h>
2016-12-01 07:03:58 +00:00
#include "util.h"
2016-12-01 04:32:14 +00:00
2016-08-11 04:17:14 +00:00
#ifndef LOVR_HEADSET_TYPES
2016-09-17 04:37:30 +00:00
#define LOVR_HEADSET_TYPES
2016-11-15 00:20:56 +00:00
2016-08-11 04:17:14 +00:00
typedef void (*headsetRenderCallback)(int eyeIndex, void* userdata);
2016-09-16 06:57:01 +00:00
typedef enum {
EYE_LEFT,
EYE_RIGHT
} HeadsetEye;
2016-11-15 00:20:56 +00:00
typedef enum {
CONTROLLER_AXIS_TRIGGER,
CONTROLLER_AXIS_TOUCHPAD_X,
CONTROLLER_AXIS_TOUCHPAD_Y
} ControllerAxis;
2016-11-15 03:57:23 +00:00
typedef enum {
CONTROLLER_BUTTON_SYSTEM,
CONTROLLER_BUTTON_MENU,
CONTROLLER_BUTTON_GRIP,
CONTROLLER_BUTTON_TOUCHPAD
} ControllerButton;
2016-11-26 07:32:48 +00:00
typedef enum {
CONTROLLER_MODEL_NONE = 0,
2016-11-26 07:54:45 +00:00
CONTROLLER_MODEL_OPENVR
2016-11-26 07:32:48 +00:00
} ControllerModelFormat;
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
2016-09-17 04:37:30 +00:00
typedef struct {
2017-01-22 02:18:12 +00:00
void (*destroy)(void* headset);
2016-10-03 18:40:20 +00:00
char (*isPresent)(void* headset);
2016-12-01 07:03:58 +00:00
void (*poll)(void* headset);
2016-10-01 21:12:55 +00:00
const char* (*getType)(void* headset);
2016-10-24 23:03:29 +00:00
void (*getDisplayDimensions)(void* headset, int* width, int* height);
2016-09-27 06:48:09 +00:00
void (*getClipDistance)(void* headset, float* near, float* far);
2016-10-01 21:12:55 +00:00
void (*setClipDistance)(void* headset, float near, float far);
float (*getBoundsWidth)(void* headset);
float (*getBoundsDepth)(void* headset);
void (*getBoundsGeometry)(void* headset, float* geometry);
2016-10-01 22:11:45 +00:00
char (*isBoundsVisible)(void* headset);
void (*setBoundsVisible)(void* headset, char visible);
2016-09-17 21:25:08 +00:00
void (*getPosition)(void* headset, float* x, float* y, float* z);
void (*getEyePosition)(void* headset, HeadsetEye eye, float* x, float* y, float* z);
2017-01-20 02:04:45 +00:00
void (*getOrientation)(void* headset, float* angle, float* x, float* y, float* z);
2016-09-17 04:37:30 +00:00
void (*getVelocity)(void* headset, float* x, float* y, float* z);
2016-10-01 21:12:55 +00:00
void (*getAngularVelocity)(void* headset, float* x, float* y, float* z);
2016-12-01 07:03:58 +00:00
vec_controller_t* (*getControllers)(void* headset);
2016-11-15 03:47:24 +00:00
char (*controllerIsPresent)(void* headset, Controller* controller);
void (*controllerGetPosition)(void* headset, Controller* controller, float* x, float* y, float* z);
2017-01-20 02:04:45 +00:00
void (*controllerGetOrientation)(void* headset, Controller* controller, float* angle, float* x, float* y, float* z);
2016-11-15 03:47:24 +00:00
float (*controllerGetAxis)(void* headset, Controller* controller, ControllerAxis axis);
2016-11-15 03:57:23 +00:00
int (*controllerIsDown)(void* headset, Controller* controller, ControllerButton button);
2016-11-15 03:33:42 +00:00
void (*controllerVibrate)(void* headset, Controller* controller, float duration);
2016-11-26 07:32:48 +00:00
void* (*controllerGetModel)(void* headset, Controller* controller, ControllerModelFormat* format);
2016-09-17 04:37:30 +00:00
void (*renderTo)(void* headset, headsetRenderCallback callback, void* userdata);
} Headset;
2016-11-15 00:20:56 +00:00
2016-08-11 04:17:14 +00:00
#endif
void lovrHeadsetInit();
2017-01-22 02:18:12 +00:00
void lovrHeadsetDestroy();
2016-12-01 07:03:58 +00:00
void lovrHeadsetPoll();
2016-10-03 18:40:20 +00:00
char lovrHeadsetIsPresent();
2016-10-01 21:12:55 +00:00
const char* lovrHeadsetGetType();
2016-10-24 23:03:29 +00:00
void lovrHeadsetGetDisplayDimensions(int* width, int* height);
2016-09-27 06:48:09 +00:00
void lovrHeadsetGetClipDistance(float* near, float* far);
2016-10-01 21:12:55 +00:00
void lovrHeadsetSetClipDistance(float near, float far);
float lovrHeadsetGetBoundsWidth();
float lovrHeadsetGetBoundsDepth();
void lovrHeadsetGetBoundsGeometry(float* geometry);
2016-10-01 22:11:45 +00:00
char lovrHeadsetIsBoundsVisible();
2016-12-01 04:32:14 +00:00
void lovrHeadsetSetBoundsVisible(char visible);
2016-09-17 21:25:08 +00:00
void lovrHeadsetGetPosition(float* x, float* y, float* z);
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();
2016-11-15 03:47:24 +00:00
char lovrHeadsetControllerIsPresent(Controller* controller);
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);
2016-11-15 03:33:42 +00:00
void lovrHeadsetControllerVibrate(Controller* controller, float duration);
2016-11-26 07:32:48 +00:00
void* lovrHeadsetControllerGetModel(Controller* controller, ControllerModelFormat* format);
2016-09-14 00:02:23 +00:00
void lovrHeadsetRenderTo(headsetRenderCallback callback, void* userdata);
2016-12-01 07:03:58 +00:00
void lovrControllerDestroy(const Ref* ref);