Files
2026-02-21 16:45:37 +08:00

478 lines
18 KiB
C#

using System;
using System.Runtime.InteropServices;
using System.Text;
namespace Valve.VR
{
public class CVROverlay
{
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
internal delegate bool _PollNextOverlayEventPacked(ulong ulOverlayHandle, ref VREvent_t_Packed pEvent, uint uncbVREvent);
[StructLayout(LayoutKind.Explicit)]
private struct PollNextOverlayEventUnion
{
[FieldOffset(0)]
public IVROverlay._PollNextOverlayEvent pPollNextOverlayEvent;
[FieldOffset(0)]
public _PollNextOverlayEventPacked pPollNextOverlayEventPacked;
}
private IVROverlay FnTable;
internal CVROverlay(IntPtr pInterface)
{
FnTable = (IVROverlay)Marshal.PtrToStructure(pInterface, typeof(IVROverlay));
}
public EVROverlayError FindOverlay(string pchOverlayKey, ref ulong pOverlayHandle)
{
pOverlayHandle = 0uL;
return FnTable.FindOverlay(pchOverlayKey, ref pOverlayHandle);
}
public EVROverlayError CreateOverlay(string pchOverlayKey, string pchOverlayName, ref ulong pOverlayHandle)
{
pOverlayHandle = 0uL;
return FnTable.CreateOverlay(pchOverlayKey, pchOverlayName, ref pOverlayHandle);
}
public EVROverlayError DestroyOverlay(ulong ulOverlayHandle)
{
return FnTable.DestroyOverlay(ulOverlayHandle);
}
public EVROverlayError SetHighQualityOverlay(ulong ulOverlayHandle)
{
return FnTable.SetHighQualityOverlay(ulOverlayHandle);
}
public ulong GetHighQualityOverlay()
{
return FnTable.GetHighQualityOverlay();
}
public uint GetOverlayKey(ulong ulOverlayHandle, StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError)
{
return FnTable.GetOverlayKey(ulOverlayHandle, pchValue, unBufferSize, ref pError);
}
public uint GetOverlayName(ulong ulOverlayHandle, StringBuilder pchValue, uint unBufferSize, ref EVROverlayError pError)
{
return FnTable.GetOverlayName(ulOverlayHandle, pchValue, unBufferSize, ref pError);
}
public EVROverlayError SetOverlayName(ulong ulOverlayHandle, string pchName)
{
return FnTable.SetOverlayName(ulOverlayHandle, pchName);
}
public EVROverlayError GetOverlayImageData(ulong ulOverlayHandle, IntPtr pvBuffer, uint unBufferSize, ref uint punWidth, ref uint punHeight)
{
punWidth = 0u;
punHeight = 0u;
return FnTable.GetOverlayImageData(ulOverlayHandle, pvBuffer, unBufferSize, ref punWidth, ref punHeight);
}
public string GetOverlayErrorNameFromEnum(EVROverlayError error)
{
IntPtr ptr = FnTable.GetOverlayErrorNameFromEnum(error);
return Marshal.PtrToStringAnsi(ptr);
}
public EVROverlayError SetOverlayRenderingPid(ulong ulOverlayHandle, uint unPID)
{
return FnTable.SetOverlayRenderingPid(ulOverlayHandle, unPID);
}
public uint GetOverlayRenderingPid(ulong ulOverlayHandle)
{
return FnTable.GetOverlayRenderingPid(ulOverlayHandle);
}
public EVROverlayError SetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled)
{
return FnTable.SetOverlayFlag(ulOverlayHandle, eOverlayFlag, bEnabled);
}
public EVROverlayError GetOverlayFlag(ulong ulOverlayHandle, VROverlayFlags eOverlayFlag, ref bool pbEnabled)
{
pbEnabled = false;
return FnTable.GetOverlayFlag(ulOverlayHandle, eOverlayFlag, ref pbEnabled);
}
public EVROverlayError SetOverlayColor(ulong ulOverlayHandle, float fRed, float fGreen, float fBlue)
{
return FnTable.SetOverlayColor(ulOverlayHandle, fRed, fGreen, fBlue);
}
public EVROverlayError GetOverlayColor(ulong ulOverlayHandle, ref float pfRed, ref float pfGreen, ref float pfBlue)
{
pfRed = 0f;
pfGreen = 0f;
pfBlue = 0f;
return FnTable.GetOverlayColor(ulOverlayHandle, ref pfRed, ref pfGreen, ref pfBlue);
}
public EVROverlayError SetOverlayAlpha(ulong ulOverlayHandle, float fAlpha)
{
return FnTable.SetOverlayAlpha(ulOverlayHandle, fAlpha);
}
public EVROverlayError GetOverlayAlpha(ulong ulOverlayHandle, ref float pfAlpha)
{
pfAlpha = 0f;
return FnTable.GetOverlayAlpha(ulOverlayHandle, ref pfAlpha);
}
public EVROverlayError SetOverlayTexelAspect(ulong ulOverlayHandle, float fTexelAspect)
{
return FnTable.SetOverlayTexelAspect(ulOverlayHandle, fTexelAspect);
}
public EVROverlayError GetOverlayTexelAspect(ulong ulOverlayHandle, ref float pfTexelAspect)
{
pfTexelAspect = 0f;
return FnTable.GetOverlayTexelAspect(ulOverlayHandle, ref pfTexelAspect);
}
public EVROverlayError SetOverlaySortOrder(ulong ulOverlayHandle, uint unSortOrder)
{
return FnTable.SetOverlaySortOrder(ulOverlayHandle, unSortOrder);
}
public EVROverlayError GetOverlaySortOrder(ulong ulOverlayHandle, ref uint punSortOrder)
{
punSortOrder = 0u;
return FnTable.GetOverlaySortOrder(ulOverlayHandle, ref punSortOrder);
}
public EVROverlayError SetOverlayWidthInMeters(ulong ulOverlayHandle, float fWidthInMeters)
{
return FnTable.SetOverlayWidthInMeters(ulOverlayHandle, fWidthInMeters);
}
public EVROverlayError GetOverlayWidthInMeters(ulong ulOverlayHandle, ref float pfWidthInMeters)
{
pfWidthInMeters = 0f;
return FnTable.GetOverlayWidthInMeters(ulOverlayHandle, ref pfWidthInMeters);
}
public EVROverlayError SetOverlayAutoCurveDistanceRangeInMeters(ulong ulOverlayHandle, float fMinDistanceInMeters, float fMaxDistanceInMeters)
{
return FnTable.SetOverlayAutoCurveDistanceRangeInMeters(ulOverlayHandle, fMinDistanceInMeters, fMaxDistanceInMeters);
}
public EVROverlayError GetOverlayAutoCurveDistanceRangeInMeters(ulong ulOverlayHandle, ref float pfMinDistanceInMeters, ref float pfMaxDistanceInMeters)
{
pfMinDistanceInMeters = 0f;
pfMaxDistanceInMeters = 0f;
return FnTable.GetOverlayAutoCurveDistanceRangeInMeters(ulOverlayHandle, ref pfMinDistanceInMeters, ref pfMaxDistanceInMeters);
}
public EVROverlayError SetOverlayTextureColorSpace(ulong ulOverlayHandle, EColorSpace eTextureColorSpace)
{
return FnTable.SetOverlayTextureColorSpace(ulOverlayHandle, eTextureColorSpace);
}
public EVROverlayError GetOverlayTextureColorSpace(ulong ulOverlayHandle, ref EColorSpace peTextureColorSpace)
{
return FnTable.GetOverlayTextureColorSpace(ulOverlayHandle, ref peTextureColorSpace);
}
public EVROverlayError SetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds)
{
return FnTable.SetOverlayTextureBounds(ulOverlayHandle, ref pOverlayTextureBounds);
}
public EVROverlayError GetOverlayTextureBounds(ulong ulOverlayHandle, ref VRTextureBounds_t pOverlayTextureBounds)
{
return FnTable.GetOverlayTextureBounds(ulOverlayHandle, ref pOverlayTextureBounds);
}
public uint GetOverlayRenderModel(ulong ulOverlayHandle, StringBuilder pchValue, uint unBufferSize, ref HmdColor_t pColor, ref EVROverlayError pError)
{
return FnTable.GetOverlayRenderModel(ulOverlayHandle, pchValue, unBufferSize, ref pColor, ref pError);
}
public EVROverlayError SetOverlayRenderModel(ulong ulOverlayHandle, string pchRenderModel, ref HmdColor_t pColor)
{
return FnTable.SetOverlayRenderModel(ulOverlayHandle, pchRenderModel, ref pColor);
}
public EVROverlayError GetOverlayTransformType(ulong ulOverlayHandle, ref VROverlayTransformType peTransformType)
{
return FnTable.GetOverlayTransformType(ulOverlayHandle, ref peTransformType);
}
public EVROverlayError SetOverlayTransformAbsolute(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform)
{
return FnTable.SetOverlayTransformAbsolute(ulOverlayHandle, eTrackingOrigin, ref pmatTrackingOriginToOverlayTransform);
}
public EVROverlayError GetOverlayTransformAbsolute(ulong ulOverlayHandle, ref ETrackingUniverseOrigin peTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToOverlayTransform)
{
return FnTable.GetOverlayTransformAbsolute(ulOverlayHandle, ref peTrackingOrigin, ref pmatTrackingOriginToOverlayTransform);
}
public EVROverlayError SetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, uint unTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform)
{
return FnTable.SetOverlayTransformTrackedDeviceRelative(ulOverlayHandle, unTrackedDevice, ref pmatTrackedDeviceToOverlayTransform);
}
public EVROverlayError GetOverlayTransformTrackedDeviceRelative(ulong ulOverlayHandle, ref uint punTrackedDevice, ref HmdMatrix34_t pmatTrackedDeviceToOverlayTransform)
{
punTrackedDevice = 0u;
return FnTable.GetOverlayTransformTrackedDeviceRelative(ulOverlayHandle, ref punTrackedDevice, ref pmatTrackedDeviceToOverlayTransform);
}
public EVROverlayError SetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, uint unDeviceIndex, string pchComponentName)
{
return FnTable.SetOverlayTransformTrackedDeviceComponent(ulOverlayHandle, unDeviceIndex, pchComponentName);
}
public EVROverlayError GetOverlayTransformTrackedDeviceComponent(ulong ulOverlayHandle, ref uint punDeviceIndex, StringBuilder pchComponentName, uint unComponentNameSize)
{
punDeviceIndex = 0u;
return FnTable.GetOverlayTransformTrackedDeviceComponent(ulOverlayHandle, ref punDeviceIndex, pchComponentName, unComponentNameSize);
}
public EVROverlayError GetOverlayTransformOverlayRelative(ulong ulOverlayHandle, ref ulong ulOverlayHandleParent, ref HmdMatrix34_t pmatParentOverlayToOverlayTransform)
{
ulOverlayHandleParent = 0uL;
return FnTable.GetOverlayTransformOverlayRelative(ulOverlayHandle, ref ulOverlayHandleParent, ref pmatParentOverlayToOverlayTransform);
}
public EVROverlayError SetOverlayTransformOverlayRelative(ulong ulOverlayHandle, ulong ulOverlayHandleParent, ref HmdMatrix34_t pmatParentOverlayToOverlayTransform)
{
return FnTable.SetOverlayTransformOverlayRelative(ulOverlayHandle, ulOverlayHandleParent, ref pmatParentOverlayToOverlayTransform);
}
public EVROverlayError ShowOverlay(ulong ulOverlayHandle)
{
return FnTable.ShowOverlay(ulOverlayHandle);
}
public EVROverlayError HideOverlay(ulong ulOverlayHandle)
{
return FnTable.HideOverlay(ulOverlayHandle);
}
public bool IsOverlayVisible(ulong ulOverlayHandle)
{
return FnTable.IsOverlayVisible(ulOverlayHandle);
}
public EVROverlayError GetTransformForOverlayCoordinates(ulong ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, ref HmdMatrix34_t pmatTransform)
{
return FnTable.GetTransformForOverlayCoordinates(ulOverlayHandle, eTrackingOrigin, coordinatesInOverlay, ref pmatTransform);
}
public bool PollNextOverlayEvent(ulong ulOverlayHandle, ref VREvent_t pEvent, uint uncbVREvent)
{
if (Environment.OSVersion.Platform == PlatformID.MacOSX || Environment.OSVersion.Platform == PlatformID.Unix)
{
VREvent_t_Packed pEvent2 = default(VREvent_t_Packed);
PollNextOverlayEventUnion pollNextOverlayEventUnion = default(PollNextOverlayEventUnion);
pollNextOverlayEventUnion.pPollNextOverlayEventPacked = null;
pollNextOverlayEventUnion.pPollNextOverlayEvent = FnTable.PollNextOverlayEvent;
bool result = pollNextOverlayEventUnion.pPollNextOverlayEventPacked(ulOverlayHandle, ref pEvent2, (uint)Marshal.SizeOf(typeof(VREvent_t_Packed)));
pEvent2.Unpack(ref pEvent);
return result;
}
return FnTable.PollNextOverlayEvent(ulOverlayHandle, ref pEvent, uncbVREvent);
}
public EVROverlayError GetOverlayInputMethod(ulong ulOverlayHandle, ref VROverlayInputMethod peInputMethod)
{
return FnTable.GetOverlayInputMethod(ulOverlayHandle, ref peInputMethod);
}
public EVROverlayError SetOverlayInputMethod(ulong ulOverlayHandle, VROverlayInputMethod eInputMethod)
{
return FnTable.SetOverlayInputMethod(ulOverlayHandle, eInputMethod);
}
public EVROverlayError GetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale)
{
return FnTable.GetOverlayMouseScale(ulOverlayHandle, ref pvecMouseScale);
}
public EVROverlayError SetOverlayMouseScale(ulong ulOverlayHandle, ref HmdVector2_t pvecMouseScale)
{
return FnTable.SetOverlayMouseScale(ulOverlayHandle, ref pvecMouseScale);
}
public bool ComputeOverlayIntersection(ulong ulOverlayHandle, ref VROverlayIntersectionParams_t pParams, ref VROverlayIntersectionResults_t pResults)
{
return FnTable.ComputeOverlayIntersection(ulOverlayHandle, ref pParams, ref pResults);
}
public bool IsHoverTargetOverlay(ulong ulOverlayHandle)
{
return FnTable.IsHoverTargetOverlay(ulOverlayHandle);
}
public ulong GetGamepadFocusOverlay()
{
return FnTable.GetGamepadFocusOverlay();
}
public EVROverlayError SetGamepadFocusOverlay(ulong ulNewFocusOverlay)
{
return FnTable.SetGamepadFocusOverlay(ulNewFocusOverlay);
}
public EVROverlayError SetOverlayNeighbor(EOverlayDirection eDirection, ulong ulFrom, ulong ulTo)
{
return FnTable.SetOverlayNeighbor(eDirection, ulFrom, ulTo);
}
public EVROverlayError MoveGamepadFocusToNeighbor(EOverlayDirection eDirection, ulong ulFrom)
{
return FnTable.MoveGamepadFocusToNeighbor(eDirection, ulFrom);
}
public EVROverlayError SetOverlayDualAnalogTransform(ulong ulOverlay, EDualAnalogWhich eWhich, IntPtr vCenter, float fRadius)
{
return FnTable.SetOverlayDualAnalogTransform(ulOverlay, eWhich, vCenter, fRadius);
}
public EVROverlayError GetOverlayDualAnalogTransform(ulong ulOverlay, EDualAnalogWhich eWhich, ref HmdVector2_t pvCenter, ref float pfRadius)
{
pfRadius = 0f;
return FnTable.GetOverlayDualAnalogTransform(ulOverlay, eWhich, ref pvCenter, ref pfRadius);
}
public EVROverlayError SetOverlayTexture(ulong ulOverlayHandle, ref Texture_t pTexture)
{
return FnTable.SetOverlayTexture(ulOverlayHandle, ref pTexture);
}
public EVROverlayError ClearOverlayTexture(ulong ulOverlayHandle)
{
return FnTable.ClearOverlayTexture(ulOverlayHandle);
}
public EVROverlayError SetOverlayRaw(ulong ulOverlayHandle, IntPtr pvBuffer, uint unWidth, uint unHeight, uint unDepth)
{
return FnTable.SetOverlayRaw(ulOverlayHandle, pvBuffer, unWidth, unHeight, unDepth);
}
public EVROverlayError SetOverlayFromFile(ulong ulOverlayHandle, string pchFilePath)
{
return FnTable.SetOverlayFromFile(ulOverlayHandle, pchFilePath);
}
public EVROverlayError GetOverlayTexture(ulong ulOverlayHandle, ref IntPtr pNativeTextureHandle, IntPtr pNativeTextureRef, ref uint pWidth, ref uint pHeight, ref uint pNativeFormat, ref ETextureType pAPIType, ref EColorSpace pColorSpace, ref VRTextureBounds_t pTextureBounds)
{
pWidth = 0u;
pHeight = 0u;
pNativeFormat = 0u;
return FnTable.GetOverlayTexture(ulOverlayHandle, ref pNativeTextureHandle, pNativeTextureRef, ref pWidth, ref pHeight, ref pNativeFormat, ref pAPIType, ref pColorSpace, ref pTextureBounds);
}
public EVROverlayError ReleaseNativeOverlayHandle(ulong ulOverlayHandle, IntPtr pNativeTextureHandle)
{
return FnTable.ReleaseNativeOverlayHandle(ulOverlayHandle, pNativeTextureHandle);
}
public EVROverlayError GetOverlayTextureSize(ulong ulOverlayHandle, ref uint pWidth, ref uint pHeight)
{
pWidth = 0u;
pHeight = 0u;
return FnTable.GetOverlayTextureSize(ulOverlayHandle, ref pWidth, ref pHeight);
}
public EVROverlayError CreateDashboardOverlay(string pchOverlayKey, string pchOverlayFriendlyName, ref ulong pMainHandle, ref ulong pThumbnailHandle)
{
pMainHandle = 0uL;
pThumbnailHandle = 0uL;
return FnTable.CreateDashboardOverlay(pchOverlayKey, pchOverlayFriendlyName, ref pMainHandle, ref pThumbnailHandle);
}
public bool IsDashboardVisible()
{
return FnTable.IsDashboardVisible();
}
public bool IsActiveDashboardOverlay(ulong ulOverlayHandle)
{
return FnTable.IsActiveDashboardOverlay(ulOverlayHandle);
}
public EVROverlayError SetDashboardOverlaySceneProcess(ulong ulOverlayHandle, uint unProcessId)
{
return FnTable.SetDashboardOverlaySceneProcess(ulOverlayHandle, unProcessId);
}
public EVROverlayError GetDashboardOverlaySceneProcess(ulong ulOverlayHandle, ref uint punProcessId)
{
punProcessId = 0u;
return FnTable.GetDashboardOverlaySceneProcess(ulOverlayHandle, ref punProcessId);
}
public void ShowDashboard(string pchOverlayToShow)
{
FnTable.ShowDashboard(pchOverlayToShow);
}
public uint GetPrimaryDashboardDevice()
{
return FnTable.GetPrimaryDashboardDevice();
}
public EVROverlayError ShowKeyboard(int eInputMode, int eLineInputMode, string pchDescription, uint unCharMax, string pchExistingText, bool bUseMinimalMode, ulong uUserValue)
{
return FnTable.ShowKeyboard(eInputMode, eLineInputMode, pchDescription, unCharMax, pchExistingText, bUseMinimalMode, uUserValue);
}
public EVROverlayError ShowKeyboardForOverlay(ulong ulOverlayHandle, int eInputMode, int eLineInputMode, string pchDescription, uint unCharMax, string pchExistingText, bool bUseMinimalMode, ulong uUserValue)
{
return FnTable.ShowKeyboardForOverlay(ulOverlayHandle, eInputMode, eLineInputMode, pchDescription, unCharMax, pchExistingText, bUseMinimalMode, uUserValue);
}
public uint GetKeyboardText(StringBuilder pchText, uint cchText)
{
return FnTable.GetKeyboardText(pchText, cchText);
}
public void HideKeyboard()
{
FnTable.HideKeyboard();
}
public void SetKeyboardTransformAbsolute(ETrackingUniverseOrigin eTrackingOrigin, ref HmdMatrix34_t pmatTrackingOriginToKeyboardTransform)
{
FnTable.SetKeyboardTransformAbsolute(eTrackingOrigin, ref pmatTrackingOriginToKeyboardTransform);
}
public void SetKeyboardPositionForOverlay(ulong ulOverlayHandle, HmdRect2_t avoidRect)
{
FnTable.SetKeyboardPositionForOverlay(ulOverlayHandle, avoidRect);
}
public EVROverlayError SetOverlayIntersectionMask(ulong ulOverlayHandle, ref VROverlayIntersectionMaskPrimitive_t pMaskPrimitives, uint unNumMaskPrimitives, uint unPrimitiveSize)
{
return FnTable.SetOverlayIntersectionMask(ulOverlayHandle, ref pMaskPrimitives, unNumMaskPrimitives, unPrimitiveSize);
}
public EVROverlayError GetOverlayFlags(ulong ulOverlayHandle, ref uint pFlags)
{
pFlags = 0u;
return FnTable.GetOverlayFlags(ulOverlayHandle, ref pFlags);
}
public VRMessageOverlayResponse ShowMessageOverlay(string pchText, string pchCaption, string pchButton0Text, string pchButton1Text, string pchButton2Text, string pchButton3Text)
{
return FnTable.ShowMessageOverlay(pchText, pchCaption, pchButton0Text, pchButton1Text, pchButton2Text, pchButton3Text);
}
public void CloseMessageOverlay()
{
FnTable.CloseMessageOverlay();
}
}
}