/* -*- 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 */