131 lines
5.0 KiB
C#
131 lines
5.0 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
|
|
namespace Valve.VR
|
|
{
|
|
public class CVRRenderModels
|
|
{
|
|
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
|
|
internal delegate bool _GetComponentStatePacked(string pchRenderModelName, string pchComponentName, ref VRControllerState_t_Packed pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState);
|
|
|
|
[StructLayout(LayoutKind.Explicit)]
|
|
private struct GetComponentStateUnion
|
|
{
|
|
[FieldOffset(0)]
|
|
public IVRRenderModels._GetComponentState pGetComponentState;
|
|
|
|
[FieldOffset(0)]
|
|
public _GetComponentStatePacked pGetComponentStatePacked;
|
|
}
|
|
|
|
private IVRRenderModels FnTable;
|
|
|
|
internal CVRRenderModels(IntPtr pInterface)
|
|
{
|
|
FnTable = (IVRRenderModels)Marshal.PtrToStructure(pInterface, typeof(IVRRenderModels));
|
|
}
|
|
|
|
public EVRRenderModelError LoadRenderModel_Async(string pchRenderModelName, ref IntPtr ppRenderModel)
|
|
{
|
|
return FnTable.LoadRenderModel_Async(pchRenderModelName, ref ppRenderModel);
|
|
}
|
|
|
|
public void FreeRenderModel(IntPtr pRenderModel)
|
|
{
|
|
FnTable.FreeRenderModel(pRenderModel);
|
|
}
|
|
|
|
public EVRRenderModelError LoadTexture_Async(int textureId, ref IntPtr ppTexture)
|
|
{
|
|
return FnTable.LoadTexture_Async(textureId, ref ppTexture);
|
|
}
|
|
|
|
public void FreeTexture(IntPtr pTexture)
|
|
{
|
|
FnTable.FreeTexture(pTexture);
|
|
}
|
|
|
|
public EVRRenderModelError LoadTextureD3D11_Async(int textureId, IntPtr pD3D11Device, ref IntPtr ppD3D11Texture2D)
|
|
{
|
|
return FnTable.LoadTextureD3D11_Async(textureId, pD3D11Device, ref ppD3D11Texture2D);
|
|
}
|
|
|
|
public EVRRenderModelError LoadIntoTextureD3D11_Async(int textureId, IntPtr pDstTexture)
|
|
{
|
|
return FnTable.LoadIntoTextureD3D11_Async(textureId, pDstTexture);
|
|
}
|
|
|
|
public void FreeTextureD3D11(IntPtr pD3D11Texture2D)
|
|
{
|
|
FnTable.FreeTextureD3D11(pD3D11Texture2D);
|
|
}
|
|
|
|
public uint GetRenderModelName(uint unRenderModelIndex, StringBuilder pchRenderModelName, uint unRenderModelNameLen)
|
|
{
|
|
return FnTable.GetRenderModelName(unRenderModelIndex, pchRenderModelName, unRenderModelNameLen);
|
|
}
|
|
|
|
public uint GetRenderModelCount()
|
|
{
|
|
return FnTable.GetRenderModelCount();
|
|
}
|
|
|
|
public uint GetComponentCount(string pchRenderModelName)
|
|
{
|
|
return FnTable.GetComponentCount(pchRenderModelName);
|
|
}
|
|
|
|
public uint GetComponentName(string pchRenderModelName, uint unComponentIndex, StringBuilder pchComponentName, uint unComponentNameLen)
|
|
{
|
|
return FnTable.GetComponentName(pchRenderModelName, unComponentIndex, pchComponentName, unComponentNameLen);
|
|
}
|
|
|
|
public ulong GetComponentButtonMask(string pchRenderModelName, string pchComponentName)
|
|
{
|
|
return FnTable.GetComponentButtonMask(pchRenderModelName, pchComponentName);
|
|
}
|
|
|
|
public uint GetComponentRenderModelName(string pchRenderModelName, string pchComponentName, StringBuilder pchComponentRenderModelName, uint unComponentRenderModelNameLen)
|
|
{
|
|
return FnTable.GetComponentRenderModelName(pchRenderModelName, pchComponentName, pchComponentRenderModelName, unComponentRenderModelNameLen);
|
|
}
|
|
|
|
public bool GetComponentState(string pchRenderModelName, string pchComponentName, ref VRControllerState_t pControllerState, ref RenderModel_ControllerMode_State_t pState, ref RenderModel_ComponentState_t pComponentState)
|
|
{
|
|
if (Environment.OSVersion.Platform == PlatformID.MacOSX || Environment.OSVersion.Platform == PlatformID.Unix)
|
|
{
|
|
VRControllerState_t_Packed pControllerState2 = new VRControllerState_t_Packed(pControllerState);
|
|
GetComponentStateUnion getComponentStateUnion = default(GetComponentStateUnion);
|
|
getComponentStateUnion.pGetComponentStatePacked = null;
|
|
getComponentStateUnion.pGetComponentState = FnTable.GetComponentState;
|
|
bool result = getComponentStateUnion.pGetComponentStatePacked(pchRenderModelName, pchComponentName, ref pControllerState2, ref pState, ref pComponentState);
|
|
pControllerState2.Unpack(ref pControllerState);
|
|
return result;
|
|
}
|
|
return FnTable.GetComponentState(pchRenderModelName, pchComponentName, ref pControllerState, ref pState, ref pComponentState);
|
|
}
|
|
|
|
public bool RenderModelHasComponent(string pchRenderModelName, string pchComponentName)
|
|
{
|
|
return FnTable.RenderModelHasComponent(pchRenderModelName, pchComponentName);
|
|
}
|
|
|
|
public uint GetRenderModelThumbnailURL(string pchRenderModelName, StringBuilder pchThumbnailURL, uint unThumbnailURLLen, ref EVRRenderModelError peError)
|
|
{
|
|
return FnTable.GetRenderModelThumbnailURL(pchRenderModelName, pchThumbnailURL, unThumbnailURLLen, ref peError);
|
|
}
|
|
|
|
public uint GetRenderModelOriginalPath(string pchRenderModelName, StringBuilder pchOriginalPath, uint unOriginalPathLen, ref EVRRenderModelError peError)
|
|
{
|
|
return FnTable.GetRenderModelOriginalPath(pchRenderModelName, pchOriginalPath, unOriginalPathLen, ref peError);
|
|
}
|
|
|
|
public string GetRenderModelErrorNameFromEnum(EVRRenderModelError error)
|
|
{
|
|
IntPtr ptr = FnTable.GetRenderModelErrorNameFromEnum(error);
|
|
return Marshal.PtrToStringAnsi(ptr);
|
|
}
|
|
}
|
|
}
|