summaryrefslogtreecommitdiff
path: root/public/steam/steamvr_interop.cs
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/steam/steamvr_interop.cs
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'public/steam/steamvr_interop.cs')
-rw-r--r--public/steam/steamvr_interop.cs285
1 files changed, 285 insertions, 0 deletions
diff --git a/public/steam/steamvr_interop.cs b/public/steam/steamvr_interop.cs
new file mode 100644
index 0000000..15c5e9b
--- /dev/null
+++ b/public/steam/steamvr_interop.cs
@@ -0,0 +1,285 @@
+//=== === Copyright 1996-2004, Valve Corporation, All rights reserved. =======
+//
+// Purpose:
+//
+//=============================================================================
+
+using System;
+using System.Runtime.InteropServices;
+
+namespace Valve.SteamVRInterop
+{
+
+class NativeEntrypoints
+{
+
+
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetWindowBounds")]
+internal static extern void SteamAPI_IHmd_GetWindowBounds(IntPtr instancePtr, ref int32_t pnX, ref int32_t pnY, ref uint32_t pnWidth, ref uint32_t pnHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetRecommendedRenderTargetSize")]
+internal static extern void SteamAPI_IHmd_GetRecommendedRenderTargetSize(IntPtr instancePtr, ref uint32_t pnWidth, ref uint32_t pnHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetEyeOutputViewport")]
+internal static extern void SteamAPI_IHmd_GetEyeOutputViewport(IntPtr instancePtr, vr::Hmd_Eye eEye, ref uint32_t pnX, ref uint32_t pnY, ref uint32_t pnWidth, ref uint32_t pnHeight);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetProjectionMatrix")]
+internal static extern vr::HmdMatrix44_t SteamAPI_IHmd_GetProjectionMatrix(IntPtr instancePtr, vr::Hmd_Eye eEye, float fNearZ, float fFarZ, vr::GraphicsAPIConvention eProjType);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetProjectionRaw")]
+internal static extern void SteamAPI_IHmd_GetProjectionRaw(IntPtr instancePtr, vr::Hmd_Eye eEye, ref float pfLeft, ref float pfRight, ref float pfTop, ref float pfBottom);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_ComputeDistortion")]
+internal static extern vr::DistortionCoordinates_t SteamAPI_IHmd_ComputeDistortion(IntPtr instancePtr, vr::Hmd_Eye eEye, float fU, float fV);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetHeadFromEyePose")]
+internal static extern vr::HmdMatrix34_t SteamAPI_IHmd_GetHeadFromEyePose(IntPtr instancePtr, vr::Hmd_Eye eEye);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetViewMatrix")]
+internal static extern bool SteamAPI_IHmd_GetViewMatrix(IntPtr instancePtr, float fSecondsFromNow, ref vr::HmdMatrix44_t pMatLeftView, ref vr::HmdMatrix44_t pMatRightView, ref vr::HmdTrackingResult peResult);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetD3D9AdapterIndex")]
+internal static extern int32_t SteamAPI_IHmd_GetD3D9AdapterIndex(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetDXGIOutputInfo")]
+internal static extern void SteamAPI_IHmd_GetDXGIOutputInfo(IntPtr instancePtr, ref int32_t pnAdapterIndex, ref int32_t pnAdapterOutputIndex);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_AttachToWindow")]
+internal static extern void SteamAPI_IHmd_AttachToWindow(IntPtr instancePtr, IntPtr hWnd);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetTrackerFromHeadPose")]
+internal static extern bool SteamAPI_IHmd_GetTrackerFromHeadPose(IntPtr instancePtr, float fPredictedSecondsFromNow, ref vr::HmdMatrix34_t pmPose, ref vr::HmdTrackingResult peResult);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetLastTrackerFromHeadPose")]
+internal static extern bool SteamAPI_IHmd_GetLastTrackerFromHeadPose(IntPtr instancePtr, ref vr::HmdMatrix34_t pmPose);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_WillDriftInYaw")]
+internal static extern bool SteamAPI_IHmd_WillDriftInYaw(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_ZeroTracker")]
+internal static extern void SteamAPI_IHmd_ZeroTracker(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetTrackerZeroPose")]
+internal static extern vr::HmdMatrix34_t SteamAPI_IHmd_GetTrackerZeroPose(IntPtr instancePtr);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetDriverId")]
+internal static extern uint32_t SteamAPI_IHmd_GetDriverId(IntPtr instancePtr, string pchBuffer, uint32_t unBufferLen);
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_IHmd_GetDisplayId")]
+internal static extern uint32_t SteamAPI_IHmd_GetDisplayId(IntPtr instancePtr, string pchBuffer, uint32_t unBufferLen);
+
+}
+
+
+public abstract class IHmd
+{
+public abstract void GetWindowBounds(out int32_t pnX,out int32_t pnY,out uint32_t pnWidth,out uint32_t pnHeight);
+public abstract void GetRecommendedRenderTargetSize(out uint32_t pnWidth,out uint32_t pnHeight);
+public abstract void GetEyeOutputViewport(vr::Hmd_Eye eEye,out uint32_t pnX,out uint32_t pnY,out uint32_t pnWidth,out uint32_t pnHeight);
+public abstract vr::HmdMatrix44_t GetProjectionMatrix(vr::Hmd_Eye eEye,float fNearZ,float fFarZ,vr::GraphicsAPIConvention eProjType);
+public abstract void GetProjectionRaw(vr::Hmd_Eye eEye,out float pfLeft,out float pfRight,out float pfTop,out float pfBottom);
+public abstract vr::DistortionCoordinates_t ComputeDistortion(vr::Hmd_Eye eEye,float fU,float fV);
+public abstract vr::HmdMatrix34_t GetHeadFromEyePose(vr::Hmd_Eye eEye);
+public abstract bool GetViewMatrix(float fSecondsFromNow,out vr::HmdMatrix44_t pMatLeftView,out vr::HmdMatrix44_t pMatRightView,out vr::HmdTrackingResult peResult);
+public abstract int32_t GetD3D9AdapterIndex();
+public abstract void GetDXGIOutputInfo(out int32_t pnAdapterIndex,out int32_t pnAdapterOutputIndex);
+public abstract void AttachToWindow(IntPtr hWnd);
+public abstract bool GetTrackerFromHeadPose(float fPredictedSecondsFromNow,out vr::HmdMatrix34_t pmPose,out vr::HmdTrackingResult peResult);
+public abstract bool GetLastTrackerFromHeadPose(out vr::HmdMatrix34_t pmPose);
+public abstract bool WillDriftInYaw();
+public abstract void ZeroTracker();
+public abstract vr::HmdMatrix34_t GetTrackerZeroPose();
+public abstract uint32_t GetDriverId(string pchBuffer,uint32_t unBufferLen);
+public abstract uint32_t GetDisplayId(string pchBuffer,uint32_t unBufferLen);
+}
+
+
+public class CHmd : IHmd
+{
+public CHmd(IntPtr hmd)
+{
+ m_hmd = hmd;
+}
+IntPtr m_hmd;
+
+private void CheckIfUsable()
+{
+ if (m_hmd == IntPtr.Zero)
+ {
+ throw new Exception("Steam Pointer not configured");
+ }
+}
+public override void GetWindowBounds(out int32_t pnX,out int32_t pnY,out uint32_t pnWidth,out uint32_t pnHeight)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_IHmd_GetWindowBounds(m_hmd,ref pnX,ref pnY,ref pnWidth,ref pnHeight);
+}
+public override void GetRecommendedRenderTargetSize(out uint32_t pnWidth,out uint32_t pnHeight)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_IHmd_GetRecommendedRenderTargetSize(m_hmd,ref pnWidth,ref pnHeight);
+}
+public override void GetEyeOutputViewport(vr::Hmd_Eye eEye,out uint32_t pnX,out uint32_t pnY,out uint32_t pnWidth,out uint32_t pnHeight)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_IHmd_GetEyeOutputViewport(m_hmd,eEye,ref pnX,ref pnY,ref pnWidth,ref pnHeight);
+}
+public override vr::HmdMatrix44_t GetProjectionMatrix(vr::Hmd_Eye eEye,float fNearZ,float fFarZ,vr::GraphicsAPIConvention eProjType)
+{
+ CheckIfUsable();
+ vr::HmdMatrix44_t result = NativeEntrypoints.SteamAPI_IHmd_GetProjectionMatrix(m_hmd,eEye,fNearZ,fFarZ,eProjType);
+ return result;
+}
+public override void GetProjectionRaw(vr::Hmd_Eye eEye,out float pfLeft,out float pfRight,out float pfTop,out float pfBottom)
+{
+ CheckIfUsable();
+ pfLeft = 0;
+ pfRight = 0;
+ pfTop = 0;
+ pfBottom = 0;
+ NativeEntrypoints.SteamAPI_IHmd_GetProjectionRaw(m_hmd,eEye,ref pfLeft,ref pfRight,ref pfTop,ref pfBottom);
+}
+public override vr::DistortionCoordinates_t ComputeDistortion(vr::Hmd_Eye eEye,float fU,float fV)
+{
+ CheckIfUsable();
+ vr::DistortionCoordinates_t result = NativeEntrypoints.SteamAPI_IHmd_ComputeDistortion(m_hmd,eEye,fU,fV);
+ return result;
+}
+public override vr::HmdMatrix34_t GetHeadFromEyePose(vr::Hmd_Eye eEye)
+{
+ CheckIfUsable();
+ vr::HmdMatrix34_t result = NativeEntrypoints.SteamAPI_IHmd_GetHeadFromEyePose(m_hmd,eEye);
+ return result;
+}
+public override bool GetViewMatrix(float fSecondsFromNow,out vr::HmdMatrix44_t pMatLeftView,out vr::HmdMatrix44_t pMatRightView,out vr::HmdTrackingResult peResult)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_IHmd_GetViewMatrix(m_hmd,fSecondsFromNow,ref pMatLeftView,ref pMatRightView,ref peResult);
+ return result;
+}
+public override int32_t GetD3D9AdapterIndex()
+{
+ CheckIfUsable();
+ int32_t result = NativeEntrypoints.SteamAPI_IHmd_GetD3D9AdapterIndex(m_hmd);
+ return result;
+}
+public override void GetDXGIOutputInfo(out int32_t pnAdapterIndex,out int32_t pnAdapterOutputIndex)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_IHmd_GetDXGIOutputInfo(m_hmd,ref pnAdapterIndex,ref pnAdapterOutputIndex);
+}
+public override void AttachToWindow(IntPtr hWnd)
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_IHmd_AttachToWindow(m_hmd,hWnd);
+}
+public override bool GetTrackerFromHeadPose(float fPredictedSecondsFromNow,out vr::HmdMatrix34_t pmPose,out vr::HmdTrackingResult peResult)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_IHmd_GetTrackerFromHeadPose(m_hmd,fPredictedSecondsFromNow,ref pmPose,ref peResult);
+ return result;
+}
+public override bool GetLastTrackerFromHeadPose(out vr::HmdMatrix34_t pmPose)
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_IHmd_GetLastTrackerFromHeadPose(m_hmd,ref pmPose);
+ return result;
+}
+public override bool WillDriftInYaw()
+{
+ CheckIfUsable();
+ bool result = NativeEntrypoints.SteamAPI_IHmd_WillDriftInYaw(m_hmd);
+ return result;
+}
+public override void ZeroTracker()
+{
+ CheckIfUsable();
+ NativeEntrypoints.SteamAPI_IHmd_ZeroTracker(m_hmd);
+}
+public override vr::HmdMatrix34_t GetTrackerZeroPose()
+{
+ CheckIfUsable();
+ vr::HmdMatrix34_t result = NativeEntrypoints.SteamAPI_IHmd_GetTrackerZeroPose(m_hmd);
+ return result;
+}
+public override uint32_t GetDriverId(string pchBuffer,uint32_t unBufferLen)
+{
+ CheckIfUsable();
+ uint32_t result = NativeEntrypoints.SteamAPI_IHmd_GetDriverId(m_hmd,pchBuffer,unBufferLen);
+ return result;
+}
+public override uint32_t GetDisplayId(string pchBuffer,uint32_t unBufferLen)
+{
+ CheckIfUsable();
+ uint32_t result = NativeEntrypoints.SteamAPI_IHmd_GetDisplayId(m_hmd,pchBuffer,unBufferLen);
+ return result;
+}
+}
+
+
+public class SteamVRInterop
+{
+[DllImportAttribute("Steam_api", EntryPoint = "VR_Init")]
+internal static extern IntPtr VR_Init(out HmdError peError);
+[DllImportAttribute("Steam_api", EntryPoint = "VR_Shutdown")]
+internal static extern void VR_Shutdown();
+[DllImportAttribute("Steam_api", EntryPoint = "VR_IsHmdPresent")]
+internal static extern bool VR_IsHmdPresent();
+[DllImportAttribute("Steam_api", EntryPoint = "SteamAPI_UnregisterCallback")]
+internal static extern string VR_GetStringForHmdError(HmdError error);
+[DllImportAttribute("Steam_api", EntryPoint = "Hmd")]
+internal static extern IntPtr Hmd();
+}
+
+
+public enum Hmd_Eye
+{
+ Eye_Left = 0,
+ Eye_Right = 1,
+}
+public enum GraphicsAPIConvention
+{
+ API_DirectX = 0,
+ API_OpenGL = 1,
+}
+public enum HmdTrackingResult
+{
+ TrackingResult_Uninitialized = 1,
+ TrackingResult_Calibrating_InProgress = 100,
+ TrackingResult_Calibrating_OutOfRange = 101,
+ TrackingResult_Running_OK = 200,
+ TrackingResult_Running_OutOfRange = 201,
+}
+public enum HmdError
+{
+ HmdError_None = 0,
+ HmdError_Init_InstallationNotFound = 100,
+ HmdError_Init_InstallationCorrupt = 101,
+ HmdError_Init_VRClientDLLNotFound = 102,
+ HmdError_Init_FileNotFound = 103,
+ HmdError_Init_FactoryNotFound = 104,
+ HmdError_Init_InterfaceNotFound = 105,
+ HmdError_Init_InvalidInterface = 106,
+ HmdError_Init_UserConfigDirectoryInvalid = 107,
+ HmdError_Init_HmdNotFound = 108,
+ HmdError_Init_NotInitialized = 109,
+ HmdError_Driver_Failed = 200,
+ HmdError_Driver_Unknown = 201,
+ HmdError_Driver_HmdUnknown = 202,
+ HmdError_Driver_NotLoaded = 203,
+ HmdError_IPC_ServerInitFailed = 300,
+ HmdError_IPC_ConnectFailed = 301,
+ HmdError_IPC_SharedStateInitFailed = 302,
+ HmdError_VendorSpecific_UnableToConnectToOculusRuntime = 1000,
+}
+[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix34_t
+{
+ public float m;
+}
+[StructLayout(LayoutKind.Sequential)] public struct HmdMatrix44_t
+{
+ public float m;
+}
+[StructLayout(LayoutKind.Sequential)] public struct DistortionCoordinates_t
+{
+ public float rfRed;
+ public float rfGreen;
+ public float rfBlue;
+}
+
+public class SteamVR
+{
+public static IHMD Init(out HmdError peError)
+{
+ return new CHMD(VR_Init(out peError));
+}
+
+}
+
+
+
+}
+