зеркало из https://github.com/mozilla/gecko-dev.git
285 строки
9.8 KiB
C
285 строки
9.8 KiB
C
|
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
|
||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||
|
|
||
|
/* This file contains just the needed struct definitions for
|
||
|
* interacting with the Oculus VR C API, without needing to #include
|
||
|
* OVR_CAPI.h directly. Note that it uses the same type names as the
|
||
|
* CAPI, and cannot be #included at the same time as OVR_CAPI.h. It
|
||
|
* does not include the entire C API, just want's needed.
|
||
|
*/
|
||
|
|
||
|
#ifndef mozilla_ovr_capi_dynamic050_h_
|
||
|
#define mozilla_ovr_capi_dynamic050_h_
|
||
|
|
||
|
#define OVR_CAPI_050_LIMITED_MOZILLA 1
|
||
|
|
||
|
#if defined(_WIN32)
|
||
|
#define OVR_PFN __cdecl
|
||
|
#else
|
||
|
#define OVR_PFN
|
||
|
#endif
|
||
|
|
||
|
#if !defined(OVR_ALIGNAS)
|
||
|
#if defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 408) && (defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L))
|
||
|
#define OVR_ALIGNAS(n) alignas(n)
|
||
|
#elif defined(__clang__) && !defined(__APPLE__) && (((__clang_major__ * 100) + __clang_minor__) >= 300) && (__cplusplus >= 201103L)
|
||
|
#define OVR_ALIGNAS(n) alignas(n)
|
||
|
#elif defined(__clang__) && defined(__APPLE__) && (((__clang_major__ * 100) + __clang_minor__) >= 401) && (__cplusplus >= 201103L)
|
||
|
#define OVR_ALIGNAS(n) alignas(n)
|
||
|
#elif defined(_MSC_VER) && (_MSC_VER >= 1900)
|
||
|
#define OVR_ALIGNAS(n) alignas(n)
|
||
|
#elif defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 408)
|
||
|
#define OVR_ALIGNAS(n) alignas(n)
|
||
|
#elif defined(__GNUC__) || defined(__clang__)
|
||
|
#define OVR_ALIGNAS(n) __attribute__((aligned(n)))
|
||
|
#elif defined(_MSC_VER) || defined(__INTEL_COMPILER)
|
||
|
#define OVR_ALIGNAS(n) __declspec(align(n))
|
||
|
#else
|
||
|
#error Need to define OVR_ALIGNAS
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
namespace ovr050 {
|
||
|
|
||
|
typedef char ovrBool;
|
||
|
typedef struct { int x, y; } ovrVector2i;
|
||
|
typedef struct { int w, h; } ovrSizei;
|
||
|
typedef struct { ovrVector2i Pos; ovrSizei Size; } ovrRecti;
|
||
|
typedef struct { float x, y, z, w; } ovrQuatf;
|
||
|
typedef struct { float x, y; } ovrVector2f;
|
||
|
typedef struct { float x, y, z; } ovrVector3f;
|
||
|
typedef struct { float M[4][4]; } ovrMatrix4f;
|
||
|
|
||
|
typedef struct {
|
||
|
ovrQuatf Orientation;
|
||
|
ovrVector3f Position;
|
||
|
} ovrPosef;
|
||
|
|
||
|
typedef struct OVR_ALIGNAS(8) {
|
||
|
ovrPosef ThePose;
|
||
|
ovrVector3f AngularVelocity;
|
||
|
ovrVector3f LinearVelocity;
|
||
|
ovrVector3f AngularAcceleration;
|
||
|
ovrVector3f LinearAcceleration;
|
||
|
float Pad;
|
||
|
double TimeInSeconds;
|
||
|
} ovrPoseStatef;
|
||
|
|
||
|
typedef struct {
|
||
|
float UpTan;
|
||
|
float DownTan;
|
||
|
float LeftTan;
|
||
|
float RightTan;
|
||
|
} ovrFovPort;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrHmd_None = 0,
|
||
|
ovrHmd_DK1 = 3,
|
||
|
ovrHmd_DKHD = 4,
|
||
|
ovrHmd_DK2 = 6,
|
||
|
ovrHmd_BlackStar = 7,
|
||
|
ovrHmd_CB = 8,
|
||
|
ovrHmd_Other = 9,
|
||
|
ovrHmd_EnumSize = 0x7fffffff
|
||
|
} ovrHmdType;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrHmdCap_Present = 0x0001,
|
||
|
ovrHmdCap_Available = 0x0002,
|
||
|
ovrHmdCap_Captured = 0x0004,
|
||
|
ovrHmdCap_ExtendDesktop = 0x0008,
|
||
|
ovrHmdCap_DebugDevice = 0x0010,
|
||
|
ovrHmdCap_DisplayOff = 0x0040,
|
||
|
ovrHmdCap_LowPersistence = 0x0080,
|
||
|
ovrHmdCap_DynamicPrediction = 0x0200,
|
||
|
ovrHmdCap_NoVSync = 0x1000,
|
||
|
ovrHmdCap_NoMirrorToWindow = 0x2000
|
||
|
} ovrHmdCapBits;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
ovrTrackingCap_Orientation = 0x0010,
|
||
|
ovrTrackingCap_MagYawCorrection = 0x0020,
|
||
|
ovrTrackingCap_Position = 0x0040,
|
||
|
ovrTrackingCap_Idle = 0x0100,
|
||
|
ovrTrackingCap_EnumSize = 0x7fffffff
|
||
|
} ovrTrackingCaps;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrDistortionCap_Chromatic = 0x01,
|
||
|
ovrDistortionCap_TimeWarp = 0x02,
|
||
|
ovrDistortionCap_Vignette = 0x08,
|
||
|
ovrDistortionCap_NoRestore = 0x10,
|
||
|
ovrDistortionCap_FlipInput = 0x20,
|
||
|
ovrDistortionCap_SRGB = 0x40,
|
||
|
ovrDistortionCap_Overdrive = 0x80,
|
||
|
ovrDistortionCap_HqDistortion = 0x100,
|
||
|
ovrDistortionCap_LinuxDevFullscreen = 0x200,
|
||
|
ovrDistortionCap_ComputeShader = 0x400,
|
||
|
ovrDistortionCap_TimewarpJitDelay = 0x1000,
|
||
|
ovrDistortionCap_ProfileNoSpinWaits = 0x10000,
|
||
|
ovrDistortionCap_EnumSize = 0x7fffffff
|
||
|
} ovrDistortionCaps;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrEye_Left = 0,
|
||
|
ovrEye_Right = 1,
|
||
|
ovrEye_Count = 2,
|
||
|
ovrEye_EnumSize = 0x7fffffff
|
||
|
} ovrEyeType;
|
||
|
|
||
|
typedef struct ovrHmdDesc_ {
|
||
|
void* Handle;
|
||
|
ovrHmdType Type;
|
||
|
const char* ProductName;
|
||
|
const char* Manufacturer;
|
||
|
short VendorId;
|
||
|
short ProductId;
|
||
|
char SerialNumber[24];
|
||
|
short FirmwareMajor;
|
||
|
short FirmwareMinor;
|
||
|
float CameraFrustumHFovInRadians;
|
||
|
float CameraFrustumVFovInRadians;
|
||
|
float CameraFrustumNearZInMeters;
|
||
|
float CameraFrustumFarZInMeters;
|
||
|
|
||
|
unsigned int HmdCaps;
|
||
|
unsigned int TrackingCaps;
|
||
|
unsigned int DistortionCaps;
|
||
|
|
||
|
ovrFovPort DefaultEyeFov[ovrEye_Count];
|
||
|
ovrFovPort MaxEyeFov[ovrEye_Count];
|
||
|
ovrEyeType EyeRenderOrder[ovrEye_Count];
|
||
|
|
||
|
ovrSizei Resolution;
|
||
|
ovrVector2i WindowsPos;
|
||
|
|
||
|
const char* DisplayDeviceName;
|
||
|
int DisplayId;
|
||
|
} ovrHmdDesc;
|
||
|
|
||
|
typedef const ovrHmdDesc* ovrHmd;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrStatus_OrientationTracked = 0x0001,
|
||
|
ovrStatus_PositionTracked = 0x0002,
|
||
|
ovrStatus_CameraPoseTracked = 0x0004,
|
||
|
ovrStatus_PositionConnected = 0x0020,
|
||
|
ovrStatus_HmdConnected = 0x0080,
|
||
|
ovrStatus_EnumSize = 0x7fffffff
|
||
|
} ovrStatusBits;
|
||
|
|
||
|
typedef struct ovrSensorData_ {
|
||
|
ovrVector3f Accelerometer;
|
||
|
ovrVector3f Gyro;
|
||
|
ovrVector3f Magnetometer;
|
||
|
float Temperature;
|
||
|
float TimeInSeconds;
|
||
|
} ovrSensorData;
|
||
|
|
||
|
|
||
|
typedef struct ovrTrackingState_ {
|
||
|
ovrPoseStatef HeadPose;
|
||
|
ovrPosef CameraPose;
|
||
|
ovrPosef LeveledCameraPose;
|
||
|
ovrSensorData RawSensorData;
|
||
|
unsigned int StatusFlags;
|
||
|
double LastVisionProcessingTime;
|
||
|
uint32_t LastCameraFrameCounter;
|
||
|
uint32_t Pad;
|
||
|
} ovrTrackingState;
|
||
|
|
||
|
typedef struct OVR_ALIGNAS(8) ovrFrameTiming_ {
|
||
|
float DeltaSeconds;
|
||
|
float Pad;
|
||
|
double ThisFrameSeconds;
|
||
|
double TimewarpPointSeconds;
|
||
|
double NextFrameSeconds;
|
||
|
double ScanoutMidpointSeconds;
|
||
|
double EyeScanoutSeconds[2];
|
||
|
} ovrFrameTiming;
|
||
|
|
||
|
typedef struct ovrEyeRenderDesc_ {
|
||
|
ovrEyeType Eye;
|
||
|
ovrFovPort Fov;
|
||
|
ovrRecti DistortedViewport;
|
||
|
ovrVector2f PixelsPerTanAngleAtCenter;
|
||
|
ovrVector3f HmdToEyeViewOffset;
|
||
|
} ovrEyeRenderDesc;
|
||
|
|
||
|
typedef struct ovrDistortionVertex_ {
|
||
|
ovrVector2f ScreenPosNDC;
|
||
|
float TimeWarpFactor;
|
||
|
float VignetteFactor;
|
||
|
ovrVector2f TanEyeAnglesR;
|
||
|
ovrVector2f TanEyeAnglesG;
|
||
|
ovrVector2f TanEyeAnglesB;
|
||
|
} ovrDistortionVertex;
|
||
|
|
||
|
typedef struct ovrDistortionMesh_ {
|
||
|
ovrDistortionVertex* pVertexData;
|
||
|
unsigned short* pIndexData;
|
||
|
unsigned int VertexCount;
|
||
|
unsigned int IndexCount;
|
||
|
} ovrDistortionMesh;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrInit_Debug = 0x00000001,
|
||
|
ovrInit_ServerOptional = 0x00000002,
|
||
|
ovrInit_RequestVersion = 0x00000004,
|
||
|
ovrInit_ForceNoDebug = 0x00000008
|
||
|
} ovrInitFlags;
|
||
|
|
||
|
typedef enum {
|
||
|
ovrLogLevel_Debug = 0,
|
||
|
ovrLogLevel_Info = 1,
|
||
|
ovrLogLevel_Error = 2
|
||
|
} ovrLogLevel;
|
||
|
|
||
|
typedef void (OVR_PFN *ovrLogCallback)(int level, const char* message);
|
||
|
|
||
|
typedef struct {
|
||
|
uint32_t Flags;
|
||
|
uint32_t RequestedMinorVersion;
|
||
|
ovrLogCallback LogCallback;
|
||
|
uint32_t ConnectionTimeoutMS;
|
||
|
} ovrInitParams;
|
||
|
|
||
|
extern "C" {
|
||
|
|
||
|
typedef ovrBool (OVR_PFN *pfn_ovr_Initialize)(ovrInitParams const* params);
|
||
|
typedef void (OVR_PFN *pfn_ovr_Shutdown)();
|
||
|
typedef int (OVR_PFN *pfn_ovrHmd_Detect)();
|
||
|
typedef ovrHmd (OVR_PFN *pfn_ovrHmd_Create)(int index);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_Destroy)(ovrHmd hmd);
|
||
|
typedef ovrHmd (OVR_PFN *pfn_ovrHmd_CreateDebug)(ovrHmdType type);
|
||
|
typedef const char* (OVR_PFN *pfn_ovrHmd_GetLastError)(ovrHmd hmd);
|
||
|
typedef ovrBool (OVR_PFN *pfn_ovrHmd_AttachToWindow)(ovrHmd hmd, void* window, const ovrRecti* destMirrorRect, const ovrRecti* sourceRenderTargetRect);
|
||
|
typedef unsigned int (OVR_PFN *pfn_ovrHmd_GetEnabledCaps)(ovrHmd hmd);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_SetEnabledCaps)(ovrHmd hmd, unsigned int hmdCaps);
|
||
|
typedef ovrBool (OVR_PFN *pfn_ovrHmd_ConfigureTracking)(ovrHmd hmd, unsigned int supportedTrackingCaps, unsigned int requiredTrackingCaps);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_RecenterPose)(ovrHmd hmd);
|
||
|
typedef ovrTrackingState (OVR_PFN *pfn_ovrHmd_GetTrackingState)(ovrHmd hmd, double absTime);
|
||
|
typedef ovrSizei (OVR_PFN *pfn_ovrHmd_GetFovTextureSize)(ovrHmd hmd, ovrEyeType eye, ovrFovPort fov, float pixelsPerDisplayPixel);
|
||
|
typedef ovrEyeRenderDesc (OVR_PFN *pfn_ovrHmd_GetRenderDesc)(ovrHmd hmd, ovrEyeType eyeType, ovrFovPort fov);
|
||
|
typedef ovrBool (OVR_PFN *pfn_ovrHmd_CreateDistortionMesh)(ovrHmd hmd, ovrEyeType eyeType, ovrFovPort fov, unsigned int distortionCaps, ovrDistortionMesh *meshData);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_DestroyDistortionMesh)(ovrDistortionMesh* meshData);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_GetRenderScaleAndOffset)(ovrFovPort fov, ovrSizei textureSize, ovrRecti renderViewport, ovrVector2f uvScaleOffsetOut[2]);
|
||
|
typedef ovrFrameTiming (OVR_PFN *pfn_ovrHmd_GetFrameTiming)(ovrHmd hmd, unsigned int frameIndex);
|
||
|
typedef ovrFrameTiming (OVR_PFN *pfn_ovrHmd_BeginFrameTiming)(ovrHmd hmd, unsigned int frameIndex);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_EndFrameTiming)(ovrHmd hmd);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_ResetFrameTiming)(ovrHmd hmd, unsigned int frameIndex, bool vsync);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_GetEyePoses)(ovrHmd hmd, unsigned int frameIndex, ovrVector3f hmdToEyeViewOffset[2], ovrPosef outEyePoses[2], ovrTrackingState* outHmdTrackingState);
|
||
|
typedef ovrPosef (OVR_PFN *pfn_ovrHmd_GetHmdPosePerEye)(ovrHmd hmd, ovrEyeType eye);
|
||
|
typedef void (OVR_PFN *pfn_ovrHmd_GetEyeTimewarpMatrices)(ovrHmd hmd, ovrEyeType eye, ovrPosef renderPose, ovrMatrix4f twmOut[2]);
|
||
|
typedef ovrMatrix4f (OVR_PFN *pfn_ovrMatrix4f_Projection) (ovrFovPort fov, float znear, float zfar, ovrBool rightHanded );
|
||
|
typedef ovrMatrix4f (OVR_PFN *pfn_ovrMatrix4f_OrthoSubProjection) (ovrFovPort fov, ovrVector2f orthoScale, float orthoDistance, float eyeViewAdjustX);
|
||
|
typedef double (OVR_PFN *pfn_ovr_GetTimeInSeconds)();
|
||
|
|
||
|
} // extern "C"
|
||
|
} // namespace ovr050
|
||
|
|
||
|
#endif /* mozilla_ovr_capi_dynamic050_h_ */
|