172 lines
6.3 KiB
C++
172 lines
6.3 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 "appframework/IAppSystem.h"
|
|
#include "mathlib/vmatrix.h"
|
|
#include "tier1/interface.h"
|
|
#include "tier1/refcount.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
|