You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
5.8 KiB
175 lines
5.8 KiB
//========= 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 |
|
//----------------------------------------------------------------------------- |
|
class ITexture; |
|
class IMaterialSystem; |
|
|
|
//----------------------------------------------------------------------------- |
|
// important enumeration |
|
//----------------------------------------------------------------------------- |
|
|
|
struct VRRect_t |
|
{ |
|
int32 nX; |
|
int32 nY; |
|
int32 nWidth; |
|
int32 nHeight; |
|
}; |
|
|
|
|
|
// 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 |
|
}; |
|
|
|
// Which texture is being requested in GetRenderTarget? |
|
enum EWhichRenderTarget |
|
{ |
|
RT_Color = 0, |
|
RT_Depth, |
|
}; |
|
|
|
|
|
// ---------------------------------------------------------------------- |
|
// General utilities |
|
// ---------------------------------------------------------------------- |
|
|
|
// Returns true if the game should run in VR mode |
|
virtual bool ShouldRunInVR() = 0; |
|
|
|
// Returns true if there is a compatible HMD connected |
|
virtual bool IsHmdConnected() = 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 ( VREye eEye ) = 0; |
|
|
|
// Composites the HUD directly onto the backbuffer / render target, including undistort. |
|
virtual bool CompositeHud ( VREye eEye, float ndcHudBounds[4], bool bDoUndistort, bool bBlackout, bool bTranslucent ) = 0; |
|
|
|
// ---------------------------------------------------------------------- |
|
// Getting the current pose |
|
// ---------------------------------------------------------------------- |
|
|
|
// returns the pose relative to the zero point |
|
virtual VMatrix GetMideyePose() = 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 |
|
// ---------------------------------------------------------------------- |
|
|
|
// Passes back the bounds of the window that the game should create. This might |
|
// span two displays if we're dealing with a two-input display. Returns true |
|
// if the bounds were set. |
|
virtual bool GetDisplayBounds( VRRect_t *pRect ) = 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 transform from the mid-eye to the specified eye. Multiply this by |
|
// the tweaked (for mouse rotation and WASD translation) mideye position to get the |
|
// view matrix. This matrix takes the user's IPD into account. |
|
virtual VMatrix GetMidEyeFromEye( VREye eEye ) = 0; |
|
|
|
// returns the adapter index to use for VR mode |
|
virtual int GetVRModeAdapter() = 0; |
|
|
|
// ---------------------------------------------------------------------- |
|
// Information about the tracker |
|
// ---------------------------------------------------------------------- |
|
|
|
virtual bool WillDriftInYaw() = 0; |
|
|
|
// ---------------------------------------------------------------------- |
|
// Methods about oversized offscreen rendering |
|
// ---------------------------------------------------------------------- |
|
|
|
// Sets up the pre-distortion render targets. |
|
virtual void CreateRenderTargets( IMaterialSystem *pMaterialSystem ) = 0; |
|
virtual void ShutdownRenderTargets() = 0; |
|
|
|
// fetches the render target for the specified eye |
|
virtual ITexture *GetRenderTarget( VREye eEye, EWhichRenderTarget eWhich ) = 0; |
|
|
|
// Returns the (possibly overridden) framebuffer size for render target sizing. |
|
virtual void GetRenderTargetFrameBufferDimensions( int & nWidth, int & nHeight ) = 0; |
|
|
|
// ---------------------------------------------------------------------- |
|
// Enter/leave VR mode |
|
// ---------------------------------------------------------------------- |
|
virtual bool Activate() = 0; |
|
virtual void Deactivate() = 0; |
|
|
|
virtual bool ShouldForceVRMode() = 0; |
|
virtual void SetShouldForceVRMode() = 0; |
|
|
|
}; |
|
|
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
|
|
extern ISourceVirtualReality *g_pSourceVR; |
|
|
|
inline bool UseVR() |
|
{ |
|
return g_pSourceVR != NULL && g_pSourceVR->ShouldRunInVR(); |
|
} |
|
|
|
inline bool ShouldForceVRActive() |
|
{ |
|
return g_pSourceVR != NULL && g_pSourceVR->ShouldForceVRMode(); |
|
} |
|
|
|
#endif // ISOURCEVIRTUALREALITY_H
|
|
|