|  |  | @ -493,7 +493,7 @@ typedef enum ovrStatusBits_ | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | ///  Specifies the description of a single sensor. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \see ovrGetTrackerDesc | 
		
	
		
			
			|  |  |  | /// \see ovr_GetTrackerDesc | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | typedef struct OVR_ALIGNAS(OVR_PTR_SIZE) ovrTrackerDesc_ | 
		
	
		
			
			|  |  |  | { | 
		
	
	
		
			
				|  |  | @ -665,6 +665,18 @@ typedef enum ovrTextureFormat_ | 
		
	
		
			
			|  |  |  | OVR_FORMAT_D32_FLOAT, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_D32_FLOAT_S8X24_UINT, | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Added in 1.5 compressed formats can be used for static layers | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC1_UNORM, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC1_UNORM_SRGB, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC2_UNORM, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC2_UNORM_SRGB, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC3_UNORM, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC3_UNORM_SRGB, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC6H_UF16, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC6H_SF16, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC7_UNORM, | 
		
	
		
			
			|  |  |  | OVR_FORMAT_BC7_UNORM_SRGB, | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | OVR_FORMAT_ENUMSIZE = 0x7fffffff  ///< \internal Force type int32_t. | 
		
	
		
			
			|  |  |  | } ovrTextureFormat; | 
		
	
		
			
			|  |  |  |  | 
		
	
	
		
			
				|  |  | @ -779,18 +791,20 @@ typedef enum ovrTouch_ | 
		
	
		
			
			|  |  |  | ovrTouch_A              = ovrButton_A, | 
		
	
		
			
			|  |  |  | ovrTouch_B              = ovrButton_B, | 
		
	
		
			
			|  |  |  | ovrTouch_RThumb         = ovrButton_RThumb, | 
		
	
		
			
			|  |  |  | ovrTouch_RThumbRest     = 0x00000008, | 
		
	
		
			
			|  |  |  | ovrTouch_RIndexTrigger  = 0x00000010, | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Bit mask of all the button touches on the right controller | 
		
	
		
			
			|  |  |  | ovrTouch_RButtonMask    = ovrTouch_A | ovrTouch_B | ovrTouch_RThumb | ovrTouch_RIndexTrigger, | 
		
	
		
			
			|  |  |  | 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, | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Bit mask of all the button touches on the left controller | 
		
	
		
			
			|  |  |  | ovrTouch_LButtonMask    = ovrTouch_X | ovrTouch_Y | ovrTouch_LThumb | ovrTouch_LIndexTrigger, | 
		
	
		
			
			|  |  |  | ovrTouch_LButtonMask    = ovrTouch_X | ovrTouch_Y | ovrTouch_LThumb | ovrTouch_LThumbRest | ovrTouch_LIndexTrigger, | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Finger pose state | 
		
	
		
			
			|  |  |  | // Derived internally based on distance, proximity to sensors and filtering. | 
		
	
	
		
			
				|  |  | @ -959,36 +973,6 @@ extern "C" { | 
		
	
		
			
			|  |  |  | // ----------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | // ***** API Interfaces | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | // Overview of the API | 
		
	
		
			
			|  |  |  | // | 
		
	
		
			
			|  |  |  | // Setup: | 
		
	
		
			
			|  |  |  | //  - ovr_Initialize(). | 
		
	
		
			
			|  |  |  | //  - ovr_Create(&hmd, &graphicsId). | 
		
	
		
			
			|  |  |  | //  - Use hmd members and ovr_GetFovTextureSize() to determine graphics configuration | 
		
	
		
			
			|  |  |  | //    and ovr_GetRenderDesc() to get per-eye rendering parameters. | 
		
	
		
			
			|  |  |  | //  - Allocate texture swap chains with ovr_CreateTextureSwapChainDX() or | 
		
	
		
			
			|  |  |  | //    ovr_CreateTextureSwapChainGL(). Create any associated render target views or | 
		
	
		
			
			|  |  |  | //    frame buffer objects. | 
		
	
		
			
			|  |  |  | // | 
		
	
		
			
			|  |  |  | // Application Loop: | 
		
	
		
			
			|  |  |  | //  - Call ovr_GetPredictedDisplayTime() to get the current frame timing information. | 
		
	
		
			
			|  |  |  | //  - Call ovr_GetTrackingState() and ovr_CalcEyePoses() to obtain the predicted | 
		
	
		
			
			|  |  |  | //    rendering pose for each eye based on timing. | 
		
	
		
			
			|  |  |  | //  - Render the scene content into the current buffer of the texture swapchains | 
		
	
		
			
			|  |  |  | //    for each eye and layer you plan to update this frame. If you render into a | 
		
	
		
			
			|  |  |  | //    texture swap chain, you must call ovr_CommitTextureSwapChain() on it to commit | 
		
	
		
			
			|  |  |  | //    the changes before you reference the chain this frame (otherwise, your latest | 
		
	
		
			
			|  |  |  | //    changes won't be picked up). | 
		
	
		
			
			|  |  |  | //  - Call ovr_SubmitFrame() to render the distorted layers to and present them on the HMD. | 
		
	
		
			
			|  |  |  | //    If ovr_SubmitFrame returns ovrSuccess_NotVisible, there is no need to render the scene | 
		
	
		
			
			|  |  |  | //    for the next loop iteration. Instead, just call ovr_SubmitFrame again until it returns | 
		
	
		
			
			|  |  |  | //    ovrSuccess. | 
		
	
		
			
			|  |  |  | // | 
		
	
		
			
			|  |  |  | // Shutdown: | 
		
	
		
			
			|  |  |  | //  - ovr_Destroy(). | 
		
	
		
			
			|  |  |  | //  - ovr_Shutdown(). | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /// Initializes LibOVR | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// Initialize LibOVR for application usage. This includes finding and loading the LibOVRRT | 
		
	
	
		
			
				|  |  | @ -1097,6 +1081,35 @@ OVR_PUBLIC_FUNCTION(const char*) ovr_GetVersionString(); | 
		
	
		
			
			|  |  |  | OVR_PUBLIC_FUNCTION(int) ovr_TraceMessage(int level, const char* message); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /// Identify client application info. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// The string is one or more newline-delimited lines of optional info | 
		
	
		
			
			|  |  |  | /// indicating engine name, engine version, engine plugin name, engine plugin | 
		
	
		
			
			|  |  |  | /// version, engine editor. The order of the lines is not relevant. Individual | 
		
	
		
			
			|  |  |  | /// lines are optional. A newline is not necessary at the end of the last line. | 
		
	
		
			
			|  |  |  | /// Call after ovr_Initialize and before the first call to ovr_Create. | 
		
	
		
			
			|  |  |  | /// Each value is limited to 20 characters. Key names such as 'EngineName:' | 
		
	
		
			
			|  |  |  | /// 'EngineVersion:' do not count towards this limit. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \param[in] identity Specifies one or more newline-delimited lines of optional info: | 
		
	
		
			
			|  |  |  | ///             EngineName: %s\n | 
		
	
		
			
			|  |  |  | ///             EngineVersion: %s\n | 
		
	
		
			
			|  |  |  | ///             EnginePluginName: %s\n | 
		
	
		
			
			|  |  |  | ///             EnginePluginVersion: %s\n | 
		
	
		
			
			|  |  |  | ///             EngineEditor: <boolean> ('true' or 'false')\n | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// <b>Example code</b> | 
		
	
		
			
			|  |  |  | ///     \code{.cpp} | 
		
	
		
			
			|  |  |  | ///     ovr_IdentifyClient("EngineName: Unity\n" | 
		
	
		
			
			|  |  |  | ///                        "EngineVersion: 5.3.3\n" | 
		
	
		
			
			|  |  |  | ///                        "EnginePluginName: OVRPlugin\n" | 
		
	
		
			
			|  |  |  | ///                        "EnginePluginVersion: 1.2.0\n" | 
		
	
		
			
			|  |  |  | ///                        "EngineEditor: true"); | 
		
	
		
			
			|  |  |  | ///     \endcode | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | OVR_PUBLIC_FUNCTION(ovrResult) ovr_IdentifyClient(const char* identity); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | //------------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | /// @name HMD Management | 
		
	
		
			
			|  |  |  | /// | 
		
	
	
		
			
				|  |  | @ -1153,7 +1166,7 @@ OVR_PUBLIC_FUNCTION(ovrTrackerDesc) ovr_GetTrackerDesc(ovrSession session, unsig | 
		
	
		
			
			|  |  |  | /// Creates a handle to a VR session. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// Upon success the returned ovrSession must be eventually freed with ovr_Destroy when it is no longer needed. | 
		
	
		
			
			|  |  |  | /// A second call to ovr_Create will result in an error return value if the previous Hmd has not been destroyed. | 
		
	
		
			
			|  |  |  | /// A second call to ovr_Create will result in an error return value if the previous session has not been destroyed. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \param[out] pSession Provides a pointer to an ovrSession which will be written to upon success. | 
		
	
		
			
			|  |  |  | /// \param[out] luid Provides a system specific graphics adapter identifier that locates which | 
		
	
	
		
			
				|  |  | @ -1161,7 +1174,7 @@ OVR_PUBLIC_FUNCTION(ovrTrackerDesc) ovr_GetTrackerDesc(ovrSession session, unsig | 
		
	
		
			
			|  |  |  | /// or no rendering output will be possible. This is important for stability on multi-adapter systems. An | 
		
	
		
			
			|  |  |  | /// application that simply chooses the default adapter will not run reliably on multi-adapter systems. | 
		
	
		
			
			|  |  |  | /// \return Returns an ovrResult indicating success or failure. Upon failure | 
		
	
		
			
			|  |  |  | ///         the returned pHmd will be NULL. | 
		
	
		
			
			|  |  |  | ///         the returned ovrSession will be NULL. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// <b>Example code</b> | 
		
	
		
			
			|  |  |  | ///     \code{.cpp} | 
		
	
	
		
			
				|  |  | @ -1177,7 +1190,7 @@ OVR_PUBLIC_FUNCTION(ovrTrackerDesc) ovr_GetTrackerDesc(ovrSession session, unsig | 
		
	
		
			
			|  |  |  | OVR_PUBLIC_FUNCTION(ovrResult) ovr_Create(ovrSession* pSession, ovrGraphicsLuid* pLuid); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | /// Destroys the HMD. | 
		
	
		
			
			|  |  |  | /// Destroys the session. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \param[in] session Specifies an ovrSession previously returned by ovr_Create. | 
		
	
		
			
			|  |  |  | /// \see ovr_Create | 
		
	
	
		
			
				|  |  | @ -1304,7 +1317,7 @@ OVR_PUBLIC_FUNCTION(void) ovr_ClearShouldRecenterFlag(ovrSession session); | 
		
	
		
			
			|  |  |  | ///            ovrTrackingState value. Use 0 to request the most recent tracking state. | 
		
	
		
			
			|  |  |  | /// \param[in] latencyMarker Specifies that this call is the point in time where | 
		
	
		
			
			|  |  |  | ///            the "App-to-Mid-Photon" latency timer starts from. If a given ovrLayer | 
		
	
		
			
			|  |  |  | ///            provides "SensorSampleTimestamp", that will override the value stored here. | 
		
	
		
			
			|  |  |  | ///            provides "SensorSampleTime", that will override the value stored here. | 
		
	
		
			
			|  |  |  | /// \return Returns the ovrTrackingState that is predicted for the given absTime. | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \see ovrTrackingState, ovr_GetEyePoses, ovr_GetTimeInSeconds | 
		
	
	
		
			
				|  |  | @ -1363,11 +1376,10 @@ OVR_PUBLIC_FUNCTION(unsigned int) ovr_GetConnectedControllerTypes(ovrSession ses | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \see ovrControllerType | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | OVR_PUBLIC_FUNCTION(ovrResult) ovr_SetControllerVibration(ovrSession session, ovrControllerType controllerType, | 
		
	
		
			
			|  |  |  | float frequency, float amplitude); | 
		
	
		
			
			|  |  |  | OVR_PUBLIC_FUNCTION(ovrResult) ovr_SetControllerVibration(ovrSession session, ovrControllerType controllerType, float frequency, float amplitude); | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | ///@} | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | ///@} | 
		
	
		
			
			|  |  |  |  | 
		
	
		
			
			|  |  |  | //------------------------------------------------------------------------------------- | 
		
	
		
			
			|  |  |  | // @name Layers | 
		
	
	
		
			
				|  |  | @ -1768,7 +1780,7 @@ OVR_PUBLIC_FUNCTION(ovrEyeRenderDesc) ovr_GetRenderDesc(ovrSession session, | 
		
	
		
			
			|  |  |  | ///         ovrLayerQuad    layer1; | 
		
	
		
			
			|  |  |  | ///           ... | 
		
	
		
			
			|  |  |  | ///         ovrLayerHeader* layers[2] = { &layer0.Header, &layer1.Header }; | 
		
	
		
			
			|  |  |  | ///         ovrResult result = ovr_SubmitFrame(hmd, frameIndex, nullptr, layers, 2); | 
		
	
		
			
			|  |  |  | ///         ovrResult result = ovr_SubmitFrame(session, frameIndex, nullptr, layers, 2); | 
		
	
		
			
			|  |  |  | ///     \endcode | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// \return Returns an ovrResult for which OVR_SUCCESS(result) is false upon error and true | 
		
	
	
		
			
				|  |  | @ -1844,7 +1856,7 @@ OVR_PUBLIC_FUNCTION(double) ovr_GetTimeInSeconds(); | 
		
	
		
			
			|  |  |  | ///     App can toggle performance HUD modes as such: | 
		
	
		
			
			|  |  |  | ///     \code{.cpp} | 
		
	
		
			
			|  |  |  | ///         ovrPerfHudMode PerfHudMode = ovrPerfHud_LatencyTiming; | 
		
	
		
			
			|  |  |  | ///         ovr_SetInt(Hmd, OVR_PERF_HUD_MODE, (int)PerfHudMode); | 
		
	
		
			
			|  |  |  | ///         ovr_SetInt(session, OVR_PERF_HUD_MODE, (int)PerfHudMode); | 
		
	
		
			
			|  |  |  | ///     \endcode | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | typedef enum ovrPerfHudMode_ | 
		
	
	
		
			
				|  |  | @ -1864,7 +1876,7 @@ typedef enum ovrPerfHudMode_ | 
		
	
		
			
			|  |  |  | ///     App can toggle layer HUD modes as such: | 
		
	
		
			
			|  |  |  | ///     \code{.cpp} | 
		
	
		
			
			|  |  |  | ///         ovrLayerHudMode LayerHudMode = ovrLayerHud_Info; | 
		
	
		
			
			|  |  |  | ///         ovr_SetInt(Hmd, OVR_LAYER_HUD_MODE, (int)LayerHudMode); | 
		
	
		
			
			|  |  |  | ///         ovr_SetInt(session, OVR_LAYER_HUD_MODE, (int)LayerHudMode); | 
		
	
		
			
			|  |  |  | ///     \endcode | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | typedef enum ovrLayerHudMode_ | 
		
	
	
		
			
				|  |  | @ -1885,7 +1897,7 @@ typedef enum ovrLayerHudMode_ | 
		
	
		
			
			|  |  |  | ///     App can toggle the debug HUD modes as such: | 
		
	
		
			
			|  |  |  | ///     \code{.cpp} | 
		
	
		
			
			|  |  |  | ///         ovrDebugHudStereoMode DebugHudMode = ovrDebugHudStereo_QuadWithCrosshair; | 
		
	
		
			
			|  |  |  | ///         ovr_SetInt(Hmd, OVR_DEBUG_HUD_STEREO_MODE, (int)DebugHudMode); | 
		
	
		
			
			|  |  |  | ///         ovr_SetInt(session, OVR_DEBUG_HUD_STEREO_MODE, (int)DebugHudMode); | 
		
	
		
			
			|  |  |  | ///     \endcode | 
		
	
		
			
			|  |  |  | /// | 
		
	
		
			
			|  |  |  | /// The app can modify the visual properties of the stereo guide (i.e. quad, crosshair) | 
		
	
	
		
			
				|  |  | @ -2004,7 +2016,7 @@ OVR_PUBLIC_FUNCTION(ovrBool) ovr_SetFloatArray(ovrSession session, const char* p | 
		
	
		
			
			|  |  |  | /// \param[in] defaultVal Specifes the value to return if the property couldn't be read. | 
		
	
		
			
			|  |  |  | /// \return Returns the string property if it exists. Otherwise returns defaultVal, which can be specified as NULL. | 
		
	
		
			
			|  |  |  | ///         The return memory is guaranteed to be valid until next call to ovr_GetString or | 
		
	
		
			
			|  |  |  | ///         until the HMD is destroyed, whichever occurs first. | 
		
	
		
			
			|  |  |  | ///         until the session is destroyed, whichever occurs first. | 
		
	
		
			
			|  |  |  | OVR_PUBLIC_FUNCTION(const char*) ovr_GetString(ovrSession session, const char* propertyName, | 
		
	
		
			
			|  |  |  | const char* defaultVal); | 
		
	
		
			
			|  |  |  |  | 
		
	
	
		
			
				|  |  |  |