2017-10-31 08:14:09 +00:00
|
|
|
#include <stdbool.h>
|
2019-04-05 12:08:03 +00:00
|
|
|
#include <stdint.h>
|
2019-05-20 22:09:06 +00:00
|
|
|
#include <stddef.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
|
|
|
|
2020-02-13 05:37:52 +00:00
|
|
|
#define MAX_HEADSET_BONES 32
|
|
|
|
|
2019-04-05 12:08:03 +00:00
|
|
|
struct ModelData;
|
|
|
|
struct Texture;
|
|
|
|
|
2017-11-25 21:01:56 +00:00
|
|
|
typedef enum {
|
2019-03-07 07:02:03 +00:00
|
|
|
DRIVER_DESKTOP,
|
2019-04-09 19:38:55 +00:00
|
|
|
DRIVER_LEAP_MOTION,
|
2018-09-09 17:58:20 +00:00
|
|
|
DRIVER_OCULUS,
|
2018-10-25 03:40:11 +00:00
|
|
|
DRIVER_OCULUS_MOBILE,
|
2017-11-25 21:01:56 +00:00
|
|
|
DRIVER_OPENVR,
|
2019-04-11 20:47:25 +00:00
|
|
|
DRIVER_OPENXR,
|
2018-10-25 03:40:11 +00:00
|
|
|
DRIVER_WEBVR
|
2017-11-25 21:01:56 +00:00
|
|
|
} HeadsetDriver;
|
|
|
|
|
2020-02-13 05:37:52 +00:00
|
|
|
typedef enum {
|
|
|
|
ORIGIN_HEAD,
|
|
|
|
ORIGIN_FLOOR
|
|
|
|
} HeadsetOrigin;
|
|
|
|
|
2019-05-08 03:04:59 +00:00
|
|
|
typedef enum {
|
|
|
|
DEVICE_HEAD,
|
|
|
|
DEVICE_HAND_LEFT,
|
|
|
|
DEVICE_HAND_RIGHT,
|
2020-02-15 03:10:37 +00:00
|
|
|
DEVICE_HAND_LEFT_POINT,
|
|
|
|
DEVICE_HAND_RIGHT_POINT,
|
2020-01-30 01:53:03 +00:00
|
|
|
DEVICE_EYE_LEFT,
|
|
|
|
DEVICE_EYE_RIGHT,
|
2020-01-23 03:00:51 +00:00
|
|
|
DEVICE_HAND_LEFT_FINGER_THUMB,
|
|
|
|
DEVICE_HAND_LEFT_FINGER_INDEX,
|
|
|
|
DEVICE_HAND_LEFT_FINGER_MIDDLE,
|
|
|
|
DEVICE_HAND_LEFT_FINGER_RING,
|
|
|
|
DEVICE_HAND_LEFT_FINGER_PINKY,
|
|
|
|
DEVICE_HAND_RIGHT_FINGER_THUMB,
|
|
|
|
DEVICE_HAND_RIGHT_FINGER_INDEX,
|
|
|
|
DEVICE_HAND_RIGHT_FINGER_MIDDLE,
|
|
|
|
DEVICE_HAND_RIGHT_FINGER_RING,
|
|
|
|
DEVICE_HAND_RIGHT_FINGER_PINKY,
|
2019-05-13 05:04:41 +00:00
|
|
|
MAX_DEVICES
|
2019-05-08 03:04:59 +00:00
|
|
|
} Device;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
BUTTON_TRIGGER,
|
|
|
|
BUTTON_THUMBSTICK,
|
2019-05-08 23:57:51 +00:00
|
|
|
BUTTON_TOUCHPAD,
|
2019-05-08 03:04:59 +00:00
|
|
|
BUTTON_GRIP,
|
|
|
|
BUTTON_MENU,
|
|
|
|
BUTTON_A,
|
|
|
|
BUTTON_B,
|
|
|
|
BUTTON_X,
|
|
|
|
BUTTON_Y,
|
2019-05-13 05:04:41 +00:00
|
|
|
BUTTON_PROXIMITY,
|
|
|
|
MAX_BUTTONS
|
2019-05-08 03:04:59 +00:00
|
|
|
} DeviceButton;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
AXIS_TRIGGER,
|
2019-05-13 05:04:41 +00:00
|
|
|
AXIS_THUMBSTICK,
|
|
|
|
AXIS_TOUCHPAD,
|
|
|
|
AXIS_GRIP,
|
2020-01-23 03:00:51 +00:00
|
|
|
AXIS_CURL,
|
|
|
|
AXIS_SPLAY,
|
2020-01-25 06:18:10 +00:00
|
|
|
AXIS_PINCH,
|
2019-05-13 05:04:41 +00:00
|
|
|
MAX_AXES
|
2019-05-08 03:04:59 +00:00
|
|
|
} DeviceAxis;
|
|
|
|
|
2020-01-28 05:02:37 +00:00
|
|
|
// Notes:
|
|
|
|
// - getDisplayFrequency may return 0.f if the information is unavailable.
|
|
|
|
// - For isDown, changed can be set to false if change information is unavailable or inconvenient.
|
|
|
|
// - getAxis may write 4 floats to the output value. The expected number is a constant (see axisCounts in l_headset).
|
|
|
|
// - In general, most input results should be kept constant between calls to update.
|
|
|
|
|
2019-03-20 00:21:16 +00:00
|
|
|
typedef struct HeadsetInterface {
|
|
|
|
struct HeadsetInterface* next;
|
2017-11-25 21:01:56 +00:00
|
|
|
HeadsetDriver driverType;
|
2019-05-21 03:35:07 +00:00
|
|
|
bool (*init)(float offset, uint32_t msaa);
|
2019-02-17 22:39:51 +00:00
|
|
|
void (*destroy)(void);
|
2019-04-19 04:03:38 +00:00
|
|
|
bool (*getName)(char* name, size_t length);
|
2019-02-17 22:39:51 +00:00
|
|
|
HeadsetOrigin (*getOriginType)(void);
|
2018-10-21 15:40:57 +00:00
|
|
|
void (*getDisplayDimensions)(uint32_t* width, uint32_t* height);
|
2020-01-25 07:06:30 +00:00
|
|
|
float (*getDisplayFrequency)(void);
|
2019-06-28 07:13:30 +00:00
|
|
|
const float* (*getDisplayMask)(uint32_t* count);
|
2019-04-30 23:46:36 +00:00
|
|
|
double (*getDisplayTime)(void);
|
2020-01-28 05:02:37 +00:00
|
|
|
uint32_t (*getViewCount)(void);
|
|
|
|
bool (*getViewPose)(uint32_t view, float* position, float* orientation);
|
|
|
|
bool (*getViewAngles)(uint32_t view, float* left, float* right, float* up, float* down);
|
2017-11-25 21:01:56 +00:00
|
|
|
void (*getClipDistance)(float* clipNear, float* clipFar);
|
|
|
|
void (*setClipDistance)(float clipNear, float clipFar);
|
2018-04-29 21:38:08 +00:00
|
|
|
void (*getBoundsDimensions)(float* width, float* depth);
|
2019-05-21 03:35:07 +00:00
|
|
|
const float* (*getBoundsGeometry)(uint32_t* count);
|
2019-05-08 03:04:59 +00:00
|
|
|
bool (*getPose)(Device device, float* position, float* orientation);
|
|
|
|
bool (*getVelocity)(Device device, float* velocity, float* angularVelocity);
|
2020-01-25 06:46:42 +00:00
|
|
|
bool (*isDown)(Device device, DeviceButton button, bool* down, bool* changed);
|
2019-05-08 03:04:59 +00:00
|
|
|
bool (*isTouched)(Device device, DeviceButton button, bool* touched);
|
|
|
|
bool (*getAxis)(Device device, DeviceAxis axis, float* value);
|
2020-02-13 05:37:52 +00:00
|
|
|
bool (*getSkeleton)(Device device, float* poses, uint32_t* poseCount);
|
2019-05-08 03:04:59 +00:00
|
|
|
bool (*vibrate)(Device device, float strength, float duration, float frequency);
|
|
|
|
struct ModelData* (*newModelData)(Device device);
|
2018-03-11 07:42:33 +00:00
|
|
|
void (*renderTo)(void (*callback)(void*), void* userdata);
|
2019-04-05 12:08:03 +00:00
|
|
|
struct Texture* (*getMirrorTexture)(void);
|
2017-11-25 21:01:56 +00:00
|
|
|
void (*update)(float dt);
|
2017-10-22 23:44:26 +00:00
|
|
|
} HeadsetInterface;
|
2017-10-20 20:32:46 +00:00
|
|
|
|
2018-04-28 23:59:53 +00:00
|
|
|
// Available drivers
|
2018-09-09 17:58:20 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetOculusDriver;
|
2017-10-22 23:44:26 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetOpenVRDriver;
|
2019-04-11 20:47:25 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetOpenXRDriver;
|
2017-11-23 22:19:20 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetWebVRDriver;
|
2019-03-07 07:02:03 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetDesktopDriver;
|
2018-10-25 03:40:11 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetOculusMobileDriver;
|
2019-04-09 19:38:55 +00:00
|
|
|
extern HeadsetInterface lovrHeadsetLeapMotionDriver;
|
2017-10-21 09:39:33 +00:00
|
|
|
|
2019-03-20 00:21:16 +00:00
|
|
|
// Active drivers
|
2018-04-28 23:59:53 +00:00
|
|
|
extern HeadsetInterface* lovrHeadsetDriver;
|
2019-03-20 00:21:16 +00:00
|
|
|
extern HeadsetInterface* lovrHeadsetTrackingDrivers;
|
|
|
|
|
|
|
|
#define FOREACH_TRACKING_DRIVER(i)\
|
|
|
|
for (HeadsetInterface* i = lovrHeadsetTrackingDrivers; i != NULL; i = i->next)
|
2016-12-01 07:03:58 +00:00
|
|
|
|
2019-08-01 00:51:49 +00:00
|
|
|
bool lovrHeadsetInit(HeadsetDriver* drivers, size_t count, float offset, uint32_t msaa);
|
2019-02-17 22:39:51 +00:00
|
|
|
void lovrHeadsetDestroy(void);
|