зеркало из https://github.com/mozilla/gecko-dev.git
388 строки
11 KiB
C
388 строки
11 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.
|
|
*/
|
|
|
|
#ifdef OVR_CAPI_h
|
|
#ifdef _MSC_VER
|
|
#pragma message("ovr_capi_dyanmic.h: OVR_CAPI.h included before ovr_capi_dynamic.h, skipping this")
|
|
#else
|
|
#warning OVR_CAPI.h included before ovr_capi_dynamic.h, skipping this
|
|
#endif
|
|
#define mozilla_ovr_capi_dynamic_h_
|
|
|
|
#else
|
|
|
|
#ifndef mozilla_ovr_capi_dynamic_h_
|
|
#define mozilla_ovr_capi_dynamic_h_
|
|
|
|
#define OVR_CAPI_LIMITED_MOZILLA 1
|
|
|
|
#ifdef HAVE_64BIT_BUILD
|
|
#define OVR_PTR_SIZE 8
|
|
#define OVR_ON64(x) x
|
|
#else
|
|
#define OVR_PTR_SIZE 4
|
|
#define OVR_ON64(x) /**/
|
|
#endif
|
|
|
|
#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
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef int32_t ovrResult;
|
|
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_DebugDevice = 0x0010,
|
|
ovrHmdCap_LowPersistence = 0x0080,
|
|
ovrHmdCap_DynamicPrediction = 0x0200,
|
|
ovrHmdCap_NoVSync = 0x1000,
|
|
ovrHmdCap_EnumSize = 0x7fffffff
|
|
} ovrHmdCapBits;
|
|
|
|
typedef enum
|
|
{
|
|
ovrTrackingCap_Orientation = 0x0010,
|
|
ovrTrackingCap_MagYawCorrection = 0x0020,
|
|
ovrTrackingCap_Position = 0x0040,
|
|
ovrTrackingCap_Idle = 0x0100,
|
|
ovrTrackingCap_EnumSize = 0x7fffffff
|
|
} ovrTrackingCaps;
|
|
|
|
typedef enum {
|
|
ovrEye_Left = 0,
|
|
ovrEye_Right = 1,
|
|
ovrEye_Count = 2,
|
|
ovrEye_EnumSize = 0x7fffffff
|
|
} ovrEyeType;
|
|
|
|
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
|
|
void* Handle;
|
|
ovrHmdType Type;
|
|
OVR_ON64(uint32_t pad0;)
|
|
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;
|
|
|
|
ovrFovPort DefaultEyeFov[ovrEye_Count];
|
|
ovrFovPort MaxEyeFov[ovrEye_Count];
|
|
ovrEyeType EyeRenderOrder[ovrEye_Count];
|
|
|
|
ovrSizei Resolution;
|
|
} 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 OVR_ALIGNAS(4) {
|
|
ovrVector3f Accelerometer;
|
|
ovrVector3f Gyro;
|
|
ovrVector3f Magnetometer;
|
|
float Temperature;
|
|
float TimeInSeconds;
|
|
} ovrSensorData;
|
|
|
|
|
|
typedef struct OVR_ALIGNAS(8) {
|
|
ovrPoseStatef HeadPose;
|
|
ovrPosef CameraPose;
|
|
ovrPosef LeveledCameraPose;
|
|
ovrSensorData RawSensorData;
|
|
unsigned int StatusFlags;
|
|
uint32_t LastCameraFrameCounter;
|
|
uint32_t pad0;
|
|
} ovrTrackingState;
|
|
|
|
typedef struct OVR_ALIGNAS(8) {
|
|
double DisplayMidpointSeconds;
|
|
double FrameIntervalSeconds;
|
|
unsigned AppFrameIndex;
|
|
unsigned DisplayFrameIndex;
|
|
} ovrFrameTiming;
|
|
|
|
typedef struct OVR_ALIGNAS(4) {
|
|
ovrEyeType Eye;
|
|
ovrFovPort Fov;
|
|
ovrRecti DistortedViewport;
|
|
ovrVector2f PixelsPerTanAngleAtCenter;
|
|
ovrVector3f HmdToEyeViewOffset;
|
|
} ovrEyeRenderDesc;
|
|
|
|
typedef struct OVR_ALIGNAS(4) {
|
|
float Projection22;
|
|
float Projection23;
|
|
float Projection32;
|
|
} ovrTimewarpProjectionDesc;
|
|
|
|
typedef struct OVR_ALIGNAS(4) {
|
|
ovrVector3f HmdToEyeViewOffset[ovrEye_Count];
|
|
float HmdSpaceToWorldScaleInMeters;
|
|
} ovrViewScaleDesc;
|
|
|
|
typedef enum {
|
|
ovrRenderAPI_None,
|
|
ovrRenderAPI_OpenGL,
|
|
ovrRenderAPI_Android_GLES,
|
|
ovrRenderAPI_D3D9_Obsolete,
|
|
ovrRenderAPI_D3D10_Obsolete,
|
|
ovrRenderAPI_D3D11,
|
|
ovrRenderAPI_Count,
|
|
ovrRenderAPI_EnumSize = 0x7fffffff
|
|
} ovrRenderAPIType;
|
|
|
|
typedef struct OVR_ALIGNAS(4) {
|
|
ovrRenderAPIType API;
|
|
ovrSizei TextureSize;
|
|
} ovrTextureHeader;
|
|
|
|
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
|
|
ovrTextureHeader Header;
|
|
OVR_ON64(uint32_t pad0;)
|
|
uintptr_t PlatformData[8];
|
|
} ovrTexture;
|
|
|
|
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
|
|
ovrTexture* Textures;
|
|
int TextureCount;
|
|
int CurrentIndex;
|
|
} ovrSwapTextureSet;
|
|
|
|
typedef enum {
|
|
ovrInit_Debug = 0x00000001,
|
|
ovrInit_ServerOptional = 0x00000002,
|
|
ovrInit_RequestVersion = 0x00000004,
|
|
ovrInit_ForceNoDebug = 0x00000008,
|
|
ovrInit_EnumSize = 0x7fffffff
|
|
} ovrInitFlags;
|
|
|
|
typedef enum {
|
|
ovrLogLevel_Debug = 0,
|
|
ovrLogLevel_Info = 1,
|
|
ovrLogLevel_Error = 2,
|
|
ovrLogLevel_EnumSize = 0x7fffffff
|
|
} ovrLogLevel;
|
|
|
|
typedef enum {
|
|
ovrLayerType_Disabled = 0,
|
|
ovrLayerType_EyeFov = 1,
|
|
ovrLayerType_EyeFovDepth = 2,
|
|
ovrLayerType_QuadInWorld = 3,
|
|
ovrLayerType_QuadHeadLocked = 4,
|
|
ovrLayerType_Direct = 6,
|
|
ovrLayerType_EnumSize = 0x7fffffff
|
|
} ovrLayerType;
|
|
|
|
typedef enum {
|
|
ovrLayerFlag_HighQuality = 0x01,
|
|
ovrLayerFlag_TextureOriginAtBottomLeft = 0x02
|
|
} ovrLayerFlags;
|
|
|
|
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
|
|
ovrLayerType Type;
|
|
unsigned Flags;
|
|
} ovrLayerHeader;
|
|
|
|
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
|
|
ovrLayerHeader Header;
|
|
ovrSwapTextureSet* ColorTexture[ovrEye_Count];
|
|
ovrRecti Viewport[ovrEye_Count];
|
|
ovrFovPort Fov[ovrEye_Count];
|
|
ovrPosef RenderPose[ovrEye_Count];
|
|
} ovrLayerEyeFov;
|
|
|
|
typedef void (OVR_PFN *ovrLogCallback)(int level, const char* message);
|
|
|
|
typedef struct OVR_ALIGNAS(8) {
|
|
uint32_t Flags;
|
|
uint32_t RequestedMinorVersion;
|
|
ovrLogCallback LogCallback;
|
|
uint32_t ConnectionTimeoutMS;
|
|
OVR_ON64(uint32_t pad0;)
|
|
} ovrInitParams;
|
|
|
|
enum {
|
|
ovrSuccess = 0,
|
|
|
|
ovrError_MemoryAllocationFailure = -1000,
|
|
ovrError_SocketCreationFailure = -1001,
|
|
ovrError_InvalidHmd = -1002,
|
|
ovrError_Timeout = -1003,
|
|
ovrError_NotInitialized = -1004,
|
|
ovrError_InvalidParameter = -1005,
|
|
ovrError_ServiceError = -1006,
|
|
ovrError_NoHmd = -1007,
|
|
|
|
ovrError_AudioReservedBegin = -2000,
|
|
ovrError_AudioReservedEnd = -2999,
|
|
|
|
ovrError_Initialize = -3000,
|
|
ovrError_LibLoad = -3001,
|
|
ovrError_LibVersion = -3002,
|
|
ovrError_ServiceConnection = -3003,
|
|
ovrError_ServiceVersion = -3004,
|
|
ovrError_IncompatibleOS = -3005,
|
|
ovrError_DisplayInit = -3006,
|
|
ovrError_ServerStart = -3007,
|
|
ovrError_Reinitialization = -3008,
|
|
|
|
ovrError_InvalidBundleAdjustment = -4000,
|
|
ovrError_USBBandwidth = -4001
|
|
};
|
|
|
|
typedef ovrResult (OVR_PFN *pfn_ovr_Initialize)(ovrInitParams const* params);
|
|
typedef void (OVR_PFN *pfn_ovr_Shutdown)();
|
|
typedef double (OVR_PFN *pfn_ovr_GetTimeInSeconds)();
|
|
|
|
typedef ovrResult (OVR_PFN *pfn_ovrHmd_Detect)();
|
|
typedef ovrResult (OVR_PFN *pfn_ovrHmd_Create)(int index, ovrHmd*);
|
|
typedef ovrResult (OVR_PFN *pfn_ovrHmd_CreateDebug)(ovrHmdType type, ovrHmd*);
|
|
typedef void (OVR_PFN *pfn_ovrHmd_Destroy)(ovrHmd hmd);
|
|
|
|
typedef ovrResult (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 void (OVR_PFN *pfn_ovrHmd_DestroySwapTextureSet)(ovrHmd hmd, ovrSwapTextureSet* textureSet);
|
|
typedef ovrResult (OVR_PFN *pfn_ovrHmd_SubmitFrame)(ovrHmd hmd, unsigned int frameIndex,
|
|
const ovrViewScaleDesc* viewScaleDesc,
|
|
ovrLayerHeader const * const * layerPtrList, unsigned int layerCount);
|
|
|
|
#ifdef XP_WIN
|
|
struct D3D11_TEXTURE2D_DESC;
|
|
struct ID3D11Device;
|
|
struct ID3D11Texture2D;
|
|
struct ID3D11ShaderResourceView;
|
|
|
|
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
|
|
ovrTextureHeader Header;
|
|
OVR_ON64(uint32_t pad0;)
|
|
ID3D11Texture2D* pTexture;
|
|
ID3D11ShaderResourceView* pSRView;
|
|
} ovrD3D11TextureData;
|
|
|
|
typedef union {
|
|
ovrTexture Texture;
|
|
ovrD3D11TextureData D3D11;
|
|
} ovrD3D11Texture;
|
|
|
|
typedef ovrResult (OVR_PFN *pfn_ovrHmd_CreateSwapTextureSetD3D11)(ovrHmd hmd, ID3D11Device* device,
|
|
const D3D11_TEXTURE2D_DESC* desc,
|
|
ovrSwapTextureSet** outTextureSet);
|
|
#endif
|
|
|
|
typedef struct {
|
|
ovrTextureHeader Header;
|
|
uint32_t TexId;
|
|
} ovrGLTextureData;
|
|
|
|
typedef union {
|
|
ovrTexture Texture;
|
|
ovrGLTextureData OGL;
|
|
} ovrGLTexture;
|
|
|
|
typedef ovrResult (OVR_PFN *pfn_ovrHmd_CreateSwapTextureSetGL)(ovrHmd hmd, uint32_t format,
|
|
int width, int height,
|
|
ovrSwapTextureSet** outTextureSet);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* mozilla_ovr_capi_dynamic_h_ */
|
|
#endif /* OVR_CAPI_h */
|