/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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_
# 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__) ||
defined(__clang__)
# define OVR_ALIGNAS(n) __attribute__((aligned(n)))
# elif
defined(_MSC_VER) ||
defined(__INTEL_COMPILER)
# define OVR_ALIGNAS(n) __declspec(align(n))
# elif
defined(__CC_ARM)
# define OVR_ALIGNAS(n) __align(n)
# else
# error Need to define OVR_ALIGNAS
# endif
# endif
# if !
defined(OVR_UNUSED_STRUCT_PAD)
# define OVR_UNUSED_STRUCT_PAD(padName, size)
char padName[size];
# endif
# ifdef __cplusplus
extern "C" {
# endif
typedef int32_t ovrResult;
typedef enum {
ovrSuccess =
0,
} ovrSuccessType;
typedef char ovrBool;
typedef struct OVR_ALIGNAS(
4) {
float r, g, b, a;
} ovrColorf;
typedef struct OVR_ALIGNAS(
4) {
int x, y;
} ovrVector2i;
typedef struct OVR_ALIGNAS(
4) {
int w, h;
} ovrSizei;
typedef struct OVR_ALIGNAS(
4) {
ovrVector2i Pos;
ovrSizei Size;
} ovrRecti;
typedef struct OVR_ALIGNAS(
4) {
float x, y, z, w;
} ovrQuatf;
typedef struct OVR_ALIGNAS(
4) {
float x, y;
} ovrVector2f;
typedef struct OVR_ALIGNAS(
4) {
float x, y, z;
} ovrVector3f;
typedef struct OVR_ALIGNAS(
4) {
float M[
4][
4];
} ovrMatrix4f;
typedef struct OVR_ALIGNAS(
4) {
ovrQuatf Orientation;
ovrVector3f Position;
} ovrPosef;
typedef struct OVR_ALIGNAS(
8) {
ovrPosef ThePose;
ovrVector3f AngularVelocity;
ovrVector3f LinearVelocity;
ovrVector3f AngularAcceleration;
ovrVector3f LinearAcceleration;
OVR_UNUSED_STRUCT_PAD(pad0,
4)
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_CB =
8,
ovrHmd_Other =
9,
ovrHmd_E3_2015 =
10,
ovrHmd_ES06 =
11,
ovrHmd_ES09 =
12,
ovrHmd_ES11 =
13,
ovrHmd_CV1 =
14,
ovrHmd_EnumSize =
0x7fffffff
} ovrHmdType;
typedef enum {
ovrHmdCap_DebugDevice =
0x0010,
ovrHmdCap_EnumSize =
0x7fffffff
} ovrHmdCaps;
typedef enum {
ovrTrackingCap_Orientation =
0x0010,
ovrTrackingCap_MagYawCorrection =
0x0020,
ovrTrackingCap_Position =
0x0040,
ovrTrackingCap_EnumSize =
0x7fffffff
} ovrTrackingCaps;
typedef enum {
ovrExtension_TextureLayout_Octilinear =
0,
ovrExtension_Count,
ovrExtension_EnumSize =
0x7fffffff
} ovrExtensions;
typedef enum {
ovrEye_Left =
0,
ovrEye_Right =
1,
ovrEye_Count =
2,
ovrEye_EnumSize =
0x7fffffff
} ovrEyeType;
typedef enum {
ovrTrackingOrigin_EyeLevel =
0,
ovrTrackingOrigin_FloorLevel =
1,
ovrTrackingOrigin_Count =
2,
///< \internal Count of enumerated elements.
ovrTrackingOrigin_EnumSize =
0x7fffffff
///< \internal Force type int32_t.
} ovrTrackingOrigin;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
char Reserved[
8];
} ovrGraphicsLuid;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrHmdType Type;
OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad0,
4))
char ProductName[
64];
char Manufacturer[
64];
short VendorId;
short ProductId;
char SerialNumber[
24];
short FirmwareMajor;
short FirmwareMinor;
unsigned int AvailableHmdCaps;
unsigned int DefaultHmdCaps;
unsigned int AvailableTrackingCaps;
unsigned int DefaultTrackingCaps;
ovrFovPort DefaultEyeFov[ovrEye_Count];
ovrFovPort MaxEyeFov[ovrEye_Count];
ovrSizei Resolution;
float DisplayRefreshRate;
OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad1,
4))
} ovrHmdDesc;
typedef struct ovrHmdStruct* ovrSession;
# ifdef XP_WIN
typedef uint32_t ovrProcessId;
# else
typedef pid_t ovrProcessId;
# endif
typedef enum {
ovrStatus_OrientationTracked =
0x0001,
ovrStatus_PositionTracked =
0x0002,
ovrStatus_EnumSize =
0x7fffffff
} ovrStatusBits;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
float FrustumHFovInRadians;
float FrustumVFovInRadians;
float FrustumNearZInMeters;
float FrustumFarZInMeters;
} ovrTrackerDesc;
typedef enum {
ovrTracker_Connected =
0x0020,
ovrTracker_PoseTracked =
0x0004
} ovrTrackerFlags;
typedef struct OVR_ALIGNAS(
8) {
unsigned int TrackerFlags;
ovrPosef Pose;
ovrPosef LeveledPose;
OVR_UNUSED_STRUCT_PAD(pad0,
4)
} ovrTrackerPose;
typedef struct OVR_ALIGNAS(
8) {
ovrPoseStatef HeadPose;
unsigned int StatusFlags;
ovrPoseStatef HandPoses[
2];
unsigned int HandStatusFlags[
2];
ovrPosef CalibratedOrigin;
} ovrTrackingState;
typedef struct OVR_ALIGNAS(
4) {
ovrEyeType Eye;
ovrFovPort Fov;
ovrRecti DistortedViewport;
ovrVector2f PixelsPerTanAngleAtCenter;
ovrPosef HmdToEyePose;
} ovrEyeRenderDesc;
typedef struct OVR_ALIGNAS(
4) {
float Projection22;
float Projection23;
float Projection32;
} ovrTimewarpProjectionDesc;
typedef struct OVR_ALIGNAS(
4) {
ovrPosef HmdToEyePose[ovrEye_Count];
float HmdSpaceToWorldScaleInMeters;
} ovrViewScaleDesc;
typedef enum {
ovrTexture_2D,
ovrTexture_2D_External,
ovrTexture_Cube,
ovrTexture_Count,
ovrTexture_EnumSize =
0x7fffffff
} ovrTextureType;
typedef enum {
ovrTextureBind_None,
ovrTextureBind_DX_RenderTarget =
0x0001,
ovrTextureBind_DX_UnorderedAccess =
0x0002,
ovrTextureBind_DX_DepthStencil =
0x0004,
ovrTextureBind_EnumSize =
0x7fffffff
} ovrTextureBindFlags;
typedef enum {
OVR_FORMAT_UNKNOWN =
0,
OVR_FORMAT_B5G6R5_UNORM =
1,
OVR_FORMAT_B5G5R5A1_UNORM =
2,
OVR_FORMAT_B4G4R4A4_UNORM =
3,
OVR_FORMAT_R8G8B8A8_UNORM =
4,
OVR_FORMAT_R8G8B8A8_UNORM_SRGB =
5,
OVR_FORMAT_B8G8R8A8_UNORM =
6,
OVR_FORMAT_B8G8R8A8_UNORM_SRGB =
7,
OVR_FORMAT_B8G8R8X8_UNORM =
8,
OVR_FORMAT_B8G8R8X8_UNORM_SRGB =
9,
OVR_FORMAT_R16G16B16A16_FLOAT =
10,
OVR_FORMAT_R11G11B10_FLOAT =
25,
OVR_FORMAT_D16_UNORM =
11,
OVR_FORMAT_D24_UNORM_S8_UINT =
12,
OVR_FORMAT_D32_FLOAT =
13,
OVR_FORMAT_D32_FLOAT_S8X24_UINT =
14,
OVR_FORMAT_BC1_UNORM =
15,
OVR_FORMAT_BC1_UNORM_SRGB =
16,
OVR_FORMAT_BC2_UNORM =
17,
OVR_FORMAT_BC2_UNORM_SRGB =
18,
OVR_FORMAT_BC3_UNORM =
19,
OVR_FORMAT_BC3_UNORM_SRGB =
20,
OVR_FORMAT_BC6H_UF16 =
21,
OVR_FORMAT_BC6H_SF16 =
22,
OVR_FORMAT_BC7_UNORM =
23,
OVR_FORMAT_BC7_UNORM_SRGB =
24,
OVR_FORMAT_ENUMSIZE =
0x7fffffff
} ovrTextureFormat;
typedef enum {
ovrTextureMisc_None,
ovrTextureMisc_DX_Typeless =
0x0001,
ovrTextureMisc_AllowGenerateMips =
0x0002,
ovrTextureMisc_ProtectedContent =
0x0004,
ovrTextureMisc_AutoGenerateMips =
0x0008,
ovrTextureMisc_EnumSize =
0x7fffffff
} ovrTextureFlags;
typedef struct {
ovrTextureType Type;
ovrTextureFormat Format;
int ArraySize;
int Width;
int Height;
int MipLevels;
int SampleCount;
ovrBool StaticImage;
unsigned int MiscFlags;
unsigned int BindFlags;
} ovrTextureSwapChainDesc;
typedef struct {
ovrTextureFormat Format;
int Width;
int Height;
unsigned int MiscFlags;
unsigned int MirrorOptions;
} ovrMirrorTextureDesc;
typedef struct ovrTextureSwapChainData* ovrTextureSwapChain;
typedef struct ovrMirrorTextureData* ovrMirrorTexture;
typedef enum {
ovrButton_A =
0x00000001,
ovrButton_B =
0x00000002,
ovrButton_RThumb =
0x00000004,
ovrButton_RShoulder =
0x00000008,
ovrButton_X =
0x00000100,
ovrButton_Y =
0x00000200,
ovrButton_LThumb =
0x00000400,
ovrButton_LShoulder =
0x00000800,
ovrButton_Up =
0x00010000,
ovrButton_Down =
0x00020000,
ovrButton_Left =
0x00040000,
ovrButton_Right =
0x00080000,
ovrButton_Enter =
0x00100000,
ovrButton_Back =
0x00200000,
ovrButton_VolUp =
0x00400000,
ovrButton_VolDown =
0x00800000,
ovrButton_Home =
0x01000000,
ovrButton_Private = ovrButton_VolUp | ovrButton_VolDown | ovrButton_Home,
ovrButton_RMask =
ovrButton_A | ovrButton_B | ovrButton_RThumb | ovrButton_RShoulder,
ovrButton_LMask = ovrButton_X | ovrButton_Y | ovrButton_LThumb |
ovrButton_LShoulder | ovrButton_Enter,
ovrButton_EnumSize =
0x7fffffff
} ovrButton;
typedef enum {
ovrTouch_A = ovrButton_A,
ovrTouch_B = ovrButton_B,
ovrTouch_RThumb = ovrButton_RThumb,
ovrTouch_RThumbRest =
0x00000008,
ovrTouch_RIndexTrigger =
0x00000010,
ovrTouch_RButtonMask = ovrTouch_A | ovrTouch_B | ovrTouch_RThumb |
ovrTouch_RThumbRest | ovrTouch_RIndexTrigger,
ovrTouch_X = ovrButton_X,
ovrTouch_Y = ovrButton_Y,
ovrTouch_LThumb = ovrButton_LThumb,
ovrTouch_LThumbRest =
0x00000800,
ovrTouch_LIndexTrigger =
0x00001000,
ovrTouch_LButtonMask = ovrTouch_X | ovrTouch_Y | ovrTouch_LThumb |
ovrTouch_LThumbRest | ovrTouch_LIndexTrigger,
ovrTouch_RIndexPointing =
0x00000020,
ovrTouch_RThumbUp =
0x00000040,
ovrTouch_LIndexPointing =
0x00002000,
ovrTouch_LThumbUp =
0x00004000,
ovrTouch_RPoseMask = ovrTouch_RIndexPointing | ovrTouch_RThumbUp,
ovrTouch_LPoseMask = ovrTouch_LIndexPointing | ovrTouch_LThumbUp,
ovrTouch_EnumSize =
0x7fffffff
} ovrTouch;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
int SampleRateHz;
int SampleSizeInBytes;
int QueueMinSizeToAvoidStarvation;
int SubmitMinSamples;
int SubmitMaxSamples;
int SubmitOptimalSamples;
} ovrTouchHapticsDesc;
typedef enum {
ovrControllerType_None =
0x0000,
ovrControllerType_LTouch =
0x0001,
ovrControllerType_RTouch =
0x0002,
ovrControllerType_Touch =
(ovrControllerType_LTouch | ovrControllerType_RTouch),
ovrControllerType_Remote =
0x0004,
ovrControllerType_XBox =
0x0010,
ovrControllerType_Object0 =
0x0100,
ovrControllerType_Object1 =
0x0200,
ovrControllerType_Object2 =
0x0400,
ovrControllerType_Object3 =
0x0800,
ovrControllerType_Active =
0xffffffff,
ovrControllerType_EnumSize =
0x7fffffff
} ovrControllerType;
typedef enum { ovrHapticsBufferSubmit_Enqueue } ovrHapticsBufferSubmitMode;
# define OVR_HAPTICS_BUFFER_SAMPLES_MAX
256
typedef struct {
const void* Samples;
int SamplesCount;
ovrHapticsBufferSubmitMode SubmitMode;
} ovrHapticsBuffer;
typedef struct {
int RemainingQueueSpace;
int SamplesQueued;
} ovrHapticsPlaybackState;
typedef enum {
ovrTrackedDevice_None =
0x0000,
ovrTrackedDevice_HMD =
0x0001,
ovrTrackedDevice_LTouch =
0x0002,
ovrTrackedDevice_RTouch =
0x0004,
ovrTrackedDevice_Touch = (ovrTrackedDevice_LTouch | ovrTrackedDevice_RTouch),
ovrTrackedDevice_Object0 =
0x0010,
ovrTrackedDevice_Object1 =
0x0020,
ovrTrackedDevice_Object2 =
0x0040,
ovrTrackedDevice_Object3 =
0x0080,
ovrTrackedDevice_All =
0xFFFF,
} ovrTrackedDeviceType;
typedef enum {
ovrBoundary_Outer =
0x0001,
ovrBoundary_PlayArea =
0x0100,
} ovrBoundaryType;
typedef struct {
ovrColorf Color;
} ovrBoundaryLookAndFeel;
typedef struct {
ovrBool IsTriggering;
float ClosestDistance;
ovrVector3f ClosestPoint;
ovrVector3f ClosestPointNormal;
} ovrBoundaryTestResult;
typedef enum {
ovrHand_Left =
0,
ovrHand_Right =
1,
ovrHand_Count =
2,
ovrHand_EnumSize =
0x7fffffff
} ovrHandType;
typedef struct {
double TimeInSeconds;
unsigned int Buttons;
unsigned int Touches;
float IndexTrigger[ovrHand_Count];
float HandTrigger[ovrHand_Count];
ovrVector2f Thumbstick[ovrHand_Count];
ovrControllerType ControllerType;
float IndexTriggerNoDeadzone[ovrHand_Count];
float HandTriggerNoDeadzone[ovrHand_Count];
ovrVector2f ThumbstickNoDeadzone[ovrHand_Count];
float IndexTriggerRaw[ovrHand_Count];
float HandTriggerRaw[ovrHand_Count];
ovrVector2f ThumbstickRaw[ovrHand_Count];
} ovrInputState;
typedef struct {
double LastChangedTime;
ovrFovPort FOVPort;
float VirtualNearPlaneDistanceMeters;
float VirtualFarPlaneDistanceMeters;
ovrSizei ImageSensorPixelResolution;
ovrMatrix4f LensDistortionMatrix;
double ExposurePeriodSeconds;
double ExposureDurationSeconds;
} ovrCameraIntrinsics;
typedef enum {
ovrCameraStatus_None =
0x0,
ovrCameraStatus_Connected =
0x1,
ovrCameraStatus_Calibrating =
0x2,
ovrCameraStatus_CalibrationFailed =
0x4,
ovrCameraStatus_Calibrated =
0x8,
ovrCameraStatus_EnumSize =
0x7fffffff
} ovrCameraStatusFlags;
typedef struct {
double LastChangedTimeSeconds;
unsigned int CameraStatusFlags;
ovrTrackedDeviceType AttachedToDevice;
ovrPosef RelativePose;
double LastExposureTimeSeconds;
double ExposureLatencySeconds;
double AdditionalLatencySeconds;
} ovrCameraExtrinsics;
# define OVR_EXTERNAL_CAMERA_NAME_SIZE
32
typedef struct {
char Name[OVR_EXTERNAL_CAMERA_NAME_SIZE];
ovrCameraIntrinsics Intrinsics;
ovrCameraExtrinsics Extrinsics;
} ovrExternalCamera;
typedef enum {
ovrInit_Debug =
0x00000001,
ovrInit_RequestVersion =
0x00000004,
ovrInit_Invisible =
0x00000010,
ovrInit_MixedRendering =
0x00000020,
ovrInit_FocusAware =
0x00000040,
ovrinit_WritableBits =
0x00ffffff,
ovrInit_EnumSize =
0x7fffffff
} ovrInitFlags;
typedef enum {
ovrLogLevel_Debug =
0,
ovrLogLevel_Info =
1,
ovrLogLevel_Error =
2,
ovrLogLevel_EnumSize =
0x7fffffff
} ovrLogLevel;
typedef void(OVR_PFN* ovrLogCallback)(uintptr_t userData,
int level,
const char* message);
typedef struct OVR_ALIGNAS(
8) {
uint32_t Flags;
uint32_t RequestedMinorVersion;
ovrLogCallback LogCallback;
uintptr_t UserData;
uint32_t ConnectionTimeoutMS;
OVR_ON64(OVR_UNUSED_STRUCT_PAD(pad0,
4))
} ovrInitParams;
typedef ovrResult(OVR_PFN* pfn_ovr_Initialize)(
const ovrInitParams* params);
typedef void(OVR_PFN* pfn_ovr_Shutdown)();
typedef struct {
ovrResult Result;
char ErrorString[
512];
} ovrErrorInfo;
typedef void(OVR_PFN* pfn_ovr_GetLastErrorInfo)(ovrErrorInfo* errorInfo);
typedef const char*(OVR_PFN* pfn_ovr_GetVersionString)();
typedef int(OVR_PFN* pfn_ovr_TraceMessage)(
int level,
const char* message);
typedef ovrResult(OVR_PFN* pfn_ovr_IdentifyClient)(
const char* identity);
typedef ovrHmdDesc(OVR_PFN* pfn_ovr_GetHmdDesc)(ovrSession session);
typedef unsigned int(OVR_PFN* pfn_ovr_GetTrackerCount)(ovrSession session);
typedef ovrTrackerDesc(OVR_PFN* pfn_ovr_GetTrackerDesc)(
ovrSession session,
unsigned int trackerDescIndex);
typedef ovrResult(OVR_PFN* pfn_ovr_Create)(ovrSession* pSession,
ovrGraphicsLuid* pLuid);
typedef void(OVR_PFN* pfn_ovr_Destroy)(ovrSession session);
typedef struct {
ovrBool IsVisible;
ovrBool HmdPresent;
ovrBool HmdMounted;
ovrBool DisplayLost;
ovrBool ShouldQuit;
ovrBool ShouldRecenter;
ovrBool HasInputFocus;
ovrBool OverlayPresent;
} ovrSessionStatus;
typedef ovrResult(OVR_PFN* pfn_ovr_GetSessionStatus)(
ovrSession session, ovrSessionStatus* sessionStatus);
typedef ovrResult(OVR_PFN* pfn_ovr_IsExtensionSupported)(
ovrSession session, ovrExtensions extension,
ovrBool* outExtensionSupported);
typedef ovrResult(OVR_PFN* pfn_ovr_EnableExtension)(ovrSession session,
ovrExtensions extension);
typedef ovrResult(OVR_PFN* pfn_ovr_SetTrackingOriginType)(
ovrSession session, ovrTrackingOrigin origin);
typedef ovrTrackingOrigin(OVR_PFN* pfn_ovr_GetTrackingOriginType)(
ovrSession session);
typedef ovrResult(OVR_PFN* pfn_ovr_RecenterTrackingOrigin)(ovrSession session);
typedef ovrResult(OVR_PFN* pfn_ovr_SpecifyTrackingOrigin)(ovrSession session,
ovrPosef originPose);
typedef void(OVR_PFN* pfn_ovr_ClearShouldRecenterFlag)(ovrSession session);
typedef ovrTrackingState(OVR_PFN* pfn_ovr_GetTrackingState)(
ovrSession session,
double absTime, ovrBool latencyMarker);
typedef ovrResult(OVR_PFN* pfn_ovr_GetDevicePoses)(
ovrSession session, ovrTrackedDeviceType* deviceTypes,
int deviceCount,
double absTime, ovrPoseStatef* outDevicePoses);
typedef ovrTrackerPose(OVR_PFN* pfn_ovr_GetTrackerPose)(
ovrSession session,
unsigned int trackerPoseIndex);
typedef ovrResult(OVR_PFN* pfn_ovr_GetInputState)(
ovrSession session, ovrControllerType controllerType,
ovrInputState* inputState);
typedef unsigned int(OVR_PFN* pfn_ovr_GetConnectedControllerTypes)(
ovrSession session);
typedef ovrTouchHapticsDesc(OVR_PFN* pfn_ovr_GetTouchHapticsDesc)(
ovrSession session, ovrControllerType controllerType);
typedef ovrResult(OVR_PFN* pfn_ovr_SetControllerVibration)(
ovrSession session, ovrControllerType controllerType,
float frequency,
float amplitude);
typedef ovrResult(OVR_PFN* pfn_ovr_SubmitControllerVibration)(
ovrSession session, ovrControllerType controllerType,
const ovrHapticsBuffer* buffer);
typedef ovrResult(OVR_PFN* pfn_ovr_GetControllerVibrationState)(
ovrSession session, ovrControllerType controllerType,
ovrHapticsPlaybackState* outState);
typedef ovrResult(OVR_PFN* pfn_ovr_TestBoundary)(
ovrSession session, ovrTrackedDeviceType deviceBitmask,
ovrBoundaryType boundaryType, ovrBoundaryTestResult* outTestResult);
typedef ovrResult(OVR_PFN* pfn_ovr_TestBoundaryPoint)(
ovrSession session,
const ovrVector3f* point,
ovrBoundaryType singleBoundaryType, ovrBoundaryTestResult* outTestResult);
typedef ovrResult(OVR_PFN* pfn_ovr_SetBoundaryLookAndFeel)(
ovrSession session,
const ovrBoundaryLookAndFeel* lookAndFeel);
typedef ovrResult(OVR_PFN* pfn_ovr_ResetBoundaryLookAndFeel)(
ovrSession session);
typedef ovrResult(OVR_PFN* pfn_ovr_GetBoundaryGeometry)(
ovrSession session, ovrBoundaryType boundaryType,
ovrVector3f* outFloorPoints,
int* outFloorPointsCount);
typedef ovrResult(OVR_PFN* pfn_ovr_GetBoundaryDimensions)(
ovrSession session, ovrBoundaryType boundaryType,
ovrVector3f* outDimensions);
typedef ovrResult(OVR_PFN* pfn_ovr_GetBoundaryVisible)(ovrSession session,
ovrBool* outIsVisible);
typedef ovrResult(OVR_PFN* pfn_ovr_RequestBoundaryVisible)(ovrSession session,
ovrBool visible);
enum { ovrMaxLayerCount =
16 };
typedef enum {
ovrLayerType_Disabled =
0,
ovrLayerType_EyeFov =
1,
ovrLayerType_Quad =
3,
ovrLayerType_EyeMatrix =
5,
ovrLayerType_EyeFovMultires =
7,
ovrLayerType_Cube =
10,
ovrLayerType_EnumSize =
0x7fffffff
} ovrLayerType;
typedef enum {
ovrLayerFlag_HighQuality =
0x01,
ovrLayerFlag_TextureOriginAtBottomLeft =
0x02,
ovrLayerFlag_HeadLocked =
0x04
} ovrLayerFlags;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrLayerType Type;
unsigned Flags;
} ovrLayerHeader;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrLayerHeader Header;
ovrTextureSwapChain ColorTexture[ovrEye_Count];
ovrRecti Viewport[ovrEye_Count];
ovrFovPort Fov[ovrEye_Count];
ovrPosef RenderPose[ovrEye_Count];
double SensorSampleTime;
} ovrLayerEyeFov;
typedef enum {
ovrTextureLayout_Rectilinear =
0,
ovrTextureLayout_Octilinear =
1,
ovrTextureLayout_EnumSize =
0x7fffffff
} ovrTextureLayout;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
float WarpLeft;
float WarpRight;
float WarpUp;
float WarpDown;
float SizeLeft;
float SizeRight;
float SizeUp;
float SizeDown;
} ovrTextureLayoutOctilinear;
typedef union OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrTextureLayoutOctilinear Octilinear[ovrEye_Count];
} ovrTextureLayoutDesc_Union;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrLayerHeader Header;
ovrTextureSwapChain ColorTexture[ovrEye_Count];
ovrRecti Viewport[ovrEye_Count];
ovrFovPort Fov[ovrEye_Count];
ovrPosef RenderPose[ovrEye_Count];
double SensorSampleTime;
ovrTextureLayout TextureLayout;
ovrTextureLayoutDesc_Union TextureLayoutDesc;
} ovrLayerEyeFovMultires;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrLayerHeader Header;
ovrTextureSwapChain ColorTexture[ovrEye_Count];
ovrRecti Viewport[ovrEye_Count];
ovrPosef RenderPose[ovrEye_Count];
ovrMatrix4f Matrix[ovrEye_Count];
double SensorSampleTime;
} ovrLayerEyeMatrix;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrLayerHeader Header;
ovrTextureSwapChain ColorTexture;
ovrRecti Viewport;
ovrPosef QuadPoseCenter;
ovrVector2f QuadSize;
} ovrLayerQuad;
typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) {
ovrLayerHeader Header;
ovrQuatf Orientation;
ovrTextureSwapChain CubeMapTexture;
} ovrLayerCube;
typedef union {
ovrLayerHeader Header;
ovrLayerEyeFov EyeFov;
ovrLayerQuad Quad;
ovrLayerEyeFovMultires Multires;
ovrLayerCube Cube;
} ovrLayer_Union;
typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainLength)(
ovrSession session, ovrTextureSwapChain chain,
int* out_Length);
typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainCurrentIndex)(
ovrSession session, ovrTextureSwapChain chain,
int* out_Index);
typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainDesc)(
ovrSession session, ovrTextureSwapChain chain,
ovrTextureSwapChainDesc* out_Desc);
typedef ovrResult(OVR_PFN* pfn_ovr_CommitTextureSwapChain)(
ovrSession session, ovrTextureSwapChain chain);
typedef void(OVR_PFN* pfn_ovr_DestroyTextureSwapChain)(
ovrSession session, ovrTextureSwapChain chain);
typedef void(OVR_PFN* pfn_ovr_DestroyMirrorTexture)(
ovrSession session, ovrMirrorTexture mirrorTexture);
typedef ovrSizei(OVR_PFN* pfn_ovr_GetFovTextureSize)(
ovrSession session, ovrEyeType eye, ovrFovPort fov,
float pixelsPerDisplayPixel);
typedef ovrEyeRenderDesc(OVR_PFN* pfn_ovr_GetRenderDesc2)(ovrSession session,
ovrEyeType eyeType,
ovrFovPort fov);
typedef ovrResult(OVR_PFN* pfn_ovr_WaitToBeginFrame)(ovrSession session,
long long frameIndex);
typedef ovrResult(OVR_PFN* pfn_ovr_BeginFrame)(ovrSession session,
long long frameIndex);
typedef ovrResult(OVR_PFN* pfn_ovr_EndFrame)(
ovrSession session,
long long frameIndex,
const ovrViewScaleDesc* viewScaleDesc,
ovrLayerHeader
const*
const* layerPtrList,
unsigned int layerCount);
typedef ovrResult(OVR_PFN* pfn_ovr_SubmitFrame)(
ovrSession session,
long long frameIndex,
const ovrViewScaleDesc* viewScaleDesc,
ovrLayerHeader
const*
const* layerPtrList,
unsigned int layerCount);
typedef struct OVR_ALIGNAS(
4) {
int HmdVsyncIndex;
int AppFrameIndex;
int AppDroppedFrameCount;
float AppMotionToPhotonLatency;
float AppQueueAheadTime;
float AppCpuElapsedTime;
float AppGpuElapsedTime;
int CompositorFrameIndex;
int CompositorDroppedFrameCount;
float CompositorLatency;
float CompositorCpuElapsedTime;
float CompositorGpuElapsedTime;
float CompositorCpuStartToGpuEndElapsedTime;
float CompositorGpuEndToVsyncElapsedTime;
ovrBool AswIsActive;
int AswActivatedToggleCount;
int AswPresentedFrameCount;
int AswFailedFrameCount;
} ovrPerfStatsPerCompositorFrame;
enum { ovrMaxProvidedFrameStats =
5 };
typedef struct OVR_ALIGNAS(
4) {
ovrPerfStatsPerCompositorFrame FrameStats[ovrMaxProvidedFrameStats];
int FrameStatsCount;
ovrBool AnyFrameStatsDropped;
float AdaptiveGpuPerformanceScale;
ovrBool AswIsAvailable;
ovrProcessId VisibleProcessId;
} ovrPerfStats;
typedef ovrResult(OVR_PFN* pfn_ovr_GetPerfStats)(ovrSession session,
ovrPerfStats* outStats);
typedef ovrResult(OVR_PFN* pfn_ovr_ResetPerfStats)(ovrSession session);
typedef double(OVR_PFN* pfn_ovr_GetPredictedDisplayTime)(ovrSession session,
long long frameIndex);
typedef double(OVR_PFN* pfn_ovr_GetTimeInSeconds)();
typedef enum {
ovrPerfHud_Off =
0,
ovrPerfHud_PerfSummary =
1,
ovrPerfHud_LatencyTiming =
2,
ovrPerfHud_AppRenderTiming =
3,
ovrPerfHud_CompRenderTiming =
4,
ovrPerfHud_AswStats =
6,
ovrPerfHud_VersionInfo =
5,
ovrPerfHud_Count =
7,
ovrPerfHud_EnumSize =
0x7fffffff
} ovrPerfHudMode;
typedef enum {
ovrLayerHud_Off =
0,
ovrLayerHud_Info =
1,
ovrLayerHud_EnumSize =
0x7fffffff
} ovrLayerHudMode;
typedef enum {
ovrDebugHudStereo_Off =
0,
ovrDebugHudStereo_Quad =
1,
ovrDebugHudStereo_QuadWithCrosshair =
2,
ovrDebugHudStereo_CrosshairAtInfinity =
3,
ovrDebugHudStereo_Count,
ovrDebugHudStereo_EnumSize =
0x7fffffff
} ovrDebugHudStereoMode;
typedef ovrBool(OVR_PFN* pfn_ovr_GetBool)(ovrSession session,
const char* propertyName,
ovrBool defaultVal);
typedef ovrBool(OVR_PFN* pfn_ovr_SetBool)(ovrSession session,
const char* propertyName,
ovrBool value);
typedef int(OVR_PFN* pfn_ovr_GetInt)(ovrSession session,
const char* propertyName,
int defaultVal);
typedef ovrBool(OVR_PFN* pfn_ovr_SetInt)(ovrSession session,
const char* propertyName,
int value);
typedef float(OVR_PFN* pfn_ovr_GetFloat)(ovrSession session,
const char* propertyName,
float defaultVal);
typedef ovrBool(OVR_PFN* pfn_ovr_SetFloat)(ovrSession session,
const char* propertyName,
float value);
typedef unsigned int(OVR_PFN* pfn_ovr_GetFloatArray)(
ovrSession session,
const char* propertyName,
float values[],
unsigned int valuesCapacity);
typedef ovrBool(OVR_PFN* pfn_ovr_SetFloatArray)(ovrSession session,
const char* propertyName,
const float values[],
unsigned int valuesSize);
typedef const char*(OVR_PFN* pfn_ovr_GetString)(ovrSession session,
const char* propertyName,
const char* defaultVal);
typedef ovrBool(OVR_PFN* pfn_ovr_SetString)(ovrSession session,
const char* propertyName,
const char* value);
typedef ovrResult(OVR_PFN* pfn_ovr_GetExternalCameras)(
ovrSession session, ovrExternalCamera* cameras,
unsigned int* inoutCameraCount);
typedef ovrResult(OVR_PFN* pfn_ovr_SetExternalCameraProperties)(
ovrSession session,
const char* name,
const ovrCameraIntrinsics*
const intrinsics,
const ovrCameraExtrinsics*
const extrinsics);
typedef enum {
ovrSuccess_NotVisible =
1000,
ovrSuccess_BoundaryInvalid =
1001,
ovrSuccess_DeviceUnavailable =
1002,
} ovrSuccessTypes;
typedef enum {
ovrError_MemoryAllocationFailure = -
1000,
ovrError_InvalidSession = -
1002,
ovrError_Timeout = -
1003,
ovrError_NotInitialized = -
1004,
ovrError_InvalidParameter = -
1005,
ovrError_ServiceError = -
1006,
ovrError_NoHmd = -
1007,
ovrError_Unsupported = -
1009,
ovrError_DeviceUnavailable = -
1010,
ovrError_InvalidHeadsetOrientation = -
1011,
ovrError_ClientSkippedDestroy = -
1012,
ovrError_ClientSkippedShutdown = -
1013,
ovrError_ServiceDeadlockDetected = -
1014,
ovrError_InvalidOperation = -
1015,
ovrError_InsufficientArraySize = -
1016,
ovrError_NoExternalCameraInfo = -
1017,
ovrError_LostTracking = -
1018,
ovrError_AudioDeviceNotFound = -
2001,
ovrError_AudioComError = -
2002,
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_MismatchedAdapters = -
3009,
ovrError_LeakingResources = -
3010,
ovrError_ClientVersion = -
3011,
ovrError_OutOfDateOS = -
3012,
ovrError_OutOfDateGfxDriver = -
3013,
ovrError_IncompatibleGPU = -
3014,
ovrError_NoValidVRDisplaySystem = -
3015,
ovrError_Obsolete = -
3016,
ovrError_DisabledOrDefaultAdapter = -
3017,
ovrError_HybridGraphicsNotSupported = -
3018,
ovrError_DisplayManagerInit = -
3019,
ovrError_TrackerDriverInit = -
3020,
ovrError_LibSignCheck = -
3021,
ovrError_LibPath = -
3022,
ovrError_LibSymbols = -
3023,
ovrError_RemoteSession = -
3024,
ovrError_InitializeVulkan = -
3025,
ovrError_DisplayLost = -
6000,
ovrError_TextureSwapChainFull = -
6001,
ovrError_TextureSwapChainInvalid = -
6002,
ovrError_GraphicsDeviceReset = -
6003,
ovrError_DisplayRemoved = -
6004,
ovrError_ContentProtectionNotAvailable = -
6005,
ovrError_ApplicationInvisible = -
6006,
ovrError_Disallowed = -
6007,
ovrError_DisplayPluggedIncorrectly = -
6008,
ovrError_RuntimeException = -
7000,
ovrError_NoCalibration = -
9000,
ovrError_OldVersion = -
9001,
ovrError_MisformattedBlock = -
9002,
} ovrErrorType;
# ifdef XP_WIN
struct IUnknown;
typedef ovrResult(OVR_PFN* pfn_ovr_CreateTextureSwapChainDX)(
ovrSession session, IUnknown* d3dPtr,
const ovrTextureSwapChainDesc* desc,
ovrTextureSwapChain* out_TextureSwapChain);
typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainBufferDX)(
ovrSession session, ovrTextureSwapChain chain,
int index, IID iid,
void** out_Buffer);
typedef ovrResult(OVR_PFN* pfn_ovr_CreateMirrorTextureDX)(
ovrSession session, IUnknown* d3dPtr,
const ovrMirrorTextureDesc* desc,
ovrMirrorTexture* out_MirrorTexture);
typedef ovrResult(OVR_PFN* pfn_ovr_GetMirrorTextureBufferDX)(
ovrSession session, ovrMirrorTexture mirrorTexture, IID iid,
void** out_Buffer);
# endif
typedef ovrResult(OVR_PFN* pfn_ovr_CreateTextureSwapChainGL)(
ovrSession session,
const ovrTextureSwapChainDesc* desc,
ovrTextureSwapChain* out_TextureSwapChain);
typedef ovrResult(OVR_PFN* pfn_ovr_GetTextureSwapChainBufferGL)(
ovrSession session, ovrTextureSwapChain chain,
int index,
unsigned int* out_TexId);
typedef ovrResult(OVR_PFN* pfn_ovr_CreateMirrorTextureGL)(
ovrSession session,
const ovrMirrorTextureDesc* desc,
ovrMirrorTexture* out_MirrorTexture);
typedef ovrResult(OVR_PFN* pfn_ovr_GetMirrorTextureBufferGL)(
ovrSession session, ovrMirrorTexture mirrorTexture,
unsigned int* out_TexId);
# define OVR_KEY_EYE_HEIGHT
"EyeHeight" // float meters
# define OVR_DEFAULT_EYE_HEIGHT
1.
675f
# if !
defined(OVR_SUCCESS)
# define OVR_SUCCESS(result) (result >=
0)
# endif
# if !
defined(OVR_UNQUALIFIED_SUCCESS)
# define OVR_UNQUALIFIED_SUCCESS(result) (result == ovrSuccess)
# endif
# if !
defined(OVR_FAILURE)
# define OVR_FAILURE(result) (!OVR_SUCCESS(result))
# endif
# ifdef __cplusplus
}
# endif
# endif
/* mozilla_ovr_capi_dynamic_h_ */
#endif /* OVR_CAPI_h */