aboutsummaryrefslogtreecommitdiff
path: root/mp/src/public/sourcevr
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/public/sourcevr')
-rw-r--r--mp/src/public/sourcevr/isourcevirtualreality.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/mp/src/public/sourcevr/isourcevirtualreality.h b/mp/src/public/sourcevr/isourcevirtualreality.h
new file mode 100644
index 00000000..3e438455
--- /dev/null
+++ b/mp/src/public/sourcevr/isourcevirtualreality.h
@@ -0,0 +1,168 @@
+//========= 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;
+
+
+};
+
+
+
+//-----------------------------------------------------------------------------
+
+extern ISourceVirtualReality *g_pSourceVR;
+
+inline bool UseVR()
+{
+ return g_pSourceVR != NULL && g_pSourceVR->ShouldRunInVR();
+}
+
+#endif // ISOURCEVIRTUALREALITY_H