1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2025-01-03 16:13:22 +08:00
hl2sdk/public/headtrack/isourcevirtualreality.h
2013-06-26 15:22:04 -07:00

169 lines
5.9 KiB
C

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Contains the IHeadTrack interface, which is implemented in headtrack.dll
//
// $NoKeywords: $
//
//===========================================================================//
#ifndef ISOURCEVIRTUALREALITY_H
#define ISOURCEVIRTUALREALITY_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/interface.h"
#include "tier1/refcount.h"
#include "appframework/IAppSystem.h"
#include "mathlib/vmatrix.h"
//-----------------------------------------------------------------------------
// forward declarations
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// important enumeration
//-----------------------------------------------------------------------------
struct VRTrackerState_t
{
// Tracker has finished starting up and has produced at least one valid pose.
bool bInitialized;
// Tracker currently has a valid pose.
bool bHasValidPose;
// Tracker is in a state where it is likely to suffer from yaw drift. This
// would apply to any gyro-only tracking system.
bool bWillDriftInYaw;
};
// NOTE NOTE NOTE!!!! If you up this, grep for "NEW_INTERFACE" to see if there is anything
// waiting to be enabled during an interface revision.
#define SOURCE_VIRTUAL_REALITY_INTERFACE_VERSION "SourceVirtualReality001"
//-----------------------------------------------------------------------------
// The ISourceVirtualReality interface
//-----------------------------------------------------------------------------
abstract_class ISourceVirtualReality : public IAppSystem
{
public:
virtual ~ISourceVirtualReality() {}
// Placeholder for API revision
virtual bool Connect( CreateInterfaceFn factory ) = 0;
virtual void Disconnect() = 0;
virtual void *QueryInterface( const char *pInterfaceName ) = 0;
virtual InitReturnVal_t Init() = 0;
virtual void Shutdown() = 0;
// This enum is used to tell some of the other calls in this interface which eye
// is being requested.
enum VREye
{
VREye_Left = 0,
VREye_Right
};
// ----------------------------------------------------------------------
// General utilities
// ----------------------------------------------------------------------
// Returns true if the game should run in VR mode
virtual bool ShouldRunInVR() = 0;
// The name of the display at which the game should put its window.
// TODO: This is pretty horrible from a "what the game has to do" point
// of view. Make it better.
virtual const char *GetDisplayName() = 0;
// The size of the window that the game should create
virtual bool GetWindowSize( int *pnWidth, int *pnHeight ) = 0;
// Lets engine tell headtrack that it's going to use a different size window based
// what the display is actually using. This happens when somebody clones
// their desktop onto the HMD
virtual void OverrideWindowSize( int nWidth, int nHeight ) = 0;
// The size and position of the viewport for the specified eye
virtual void GetViewportBounds( VREye eEye, int *pnX, int *pnY, int *pnWidth, int *pnHeight ) = 0;
// Performs the distortion post-processing.
virtual bool DoDistortionProcessing ( const vrect_t *SrcRect ) = 0;
// ----------------------------------------------------------------------
// Getting the current pose
// ----------------------------------------------------------------------
// returns the pose relative to the zero point
virtual VMatrix GetMideyePose() = 0;
// returns the gravity-relative HUD correction matrix (I think)
virtual VMatrix GetHudUpCorrection() = 0;
// transforms to mid eye form left/right
virtual VMatrix GetMidEyeFromLeft() = 0;
virtual VMatrix GetMidEyeFromRight() = 0;
// All-in-one interfaces (they call GetCameraPoseZeroFromCurrent)
// Grabs the current tracking data and sets up state for the Override* calls.
virtual bool SampleTrackingState ( float PlayerGameFov, float fPredictionSeconds ) = 0;
// ----------------------------------------------------------------------
// Information about the display
// ----------------------------------------------------------------------
// returns the serial number for the display or NULL if no serial number
// could be retrieved
virtual const char *GetDisplaySerialNumber() = 0;
// returns the model number for the display or NULL if no model number
// could be retrieved
virtual const char *GetDisplayModelNumber() = 0;
// returns the "ipd" of the display. This is the separation of the centers
// of the two lenses in mm
virtual float GetDisplaySeparationMM() = 0;
// Computes and returns the projection matrix for the eye
virtual bool GetEyeProjectionMatrix ( VMatrix *pResult, VREye, float zNear, float zFar, float fovScale ) = 0;
// Returns the horizontal FOV of the display in degrees
virtual float GetHorizontalFOVDegrees() = 0;
// ----------------------------------------------------------------------
// Information about the user
// ----------------------------------------------------------------------
// returns the intrapupilar distance of the user in mm
virtual float GetUserIPDMM() = 0;
// sets the intrapupilar distance of the user in mm
virtual void SetUserIPDMM( float fIPDMM ) = 0;
// ----------------------------------------------------------------------
// Information about the tracker
// ----------------------------------------------------------------------
// returns the state of the tracking system
virtual VRTrackerState_t GetTrackerState() = 0;
};
//-----------------------------------------------------------------------------
extern ISourceVirtualReality *g_pSourceVR;
inline bool UseVR()
{
return g_pSourceVR != NULL && g_pSourceVR->ShouldRunInVR();
}
#endif // ISOURCEVIRTUALREALITY_H