Decompiled source of OverlayDearImGui Shared v2.0.0

plugins/OverlayDearImGui.Shared/ImGui.NET.dll

Decompiled a month ago
using System;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: InternalsVisibleTo("ImPlot.NET")]
[assembly: InternalsVisibleTo("ImNodes.NET")]
[assembly: AssemblyCompany("Eric Mellino")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("A .NET wrapper for the Dear ImGui library.")]
[assembly: AssemblyFileVersion("1.90.1.1")]
[assembly: AssemblyInformationalVersion("1.0.0+94d483978526a3cf3ae9161d5029f1ee00412879")]
[assembly: AssemblyProduct("ImGui.NET")]
[assembly: AssemblyTitle("ImGui.NET")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.90.1.1")]
[module: UnverifiableCode]
namespace ImGuiNET;

public delegate void Platform_CreateWindow(ImGuiViewportPtr vp);
public delegate void Platform_DestroyWindow(ImGuiViewportPtr vp);
public delegate void Platform_ShowWindow(ImGuiViewportPtr vp);
public delegate void Platform_SetWindowPos(ImGuiViewportPtr vp, Vector2 pos);
public unsafe delegate void Platform_GetWindowPos(ImGuiViewportPtr vp, Vector2* outPos);
public delegate void Platform_SetWindowSize(ImGuiViewportPtr vp, Vector2 size);
public unsafe delegate void Platform_GetWindowSize(ImGuiViewportPtr vp, Vector2* outSize);
public delegate void Platform_SetWindowFocus(ImGuiViewportPtr vp);
public delegate byte Platform_GetWindowFocus(ImGuiViewportPtr vp);
public delegate byte Platform_GetWindowMinimized(ImGuiViewportPtr vp);
public delegate void Platform_SetWindowTitle(ImGuiViewportPtr vp, IntPtr title);
public struct ImColor
{
	public Vector4 Value;
}
public struct ImColorPtr
{
	public unsafe ImColor* NativePtr { get; }

	public unsafe ref Vector4 Value => ref Unsafe.AsRef<Vector4>(&NativePtr->Value);

	public unsafe ImColorPtr(ImColor* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImColorPtr(IntPtr nativePtr)
	{
		NativePtr = (ImColor*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImColorPtr(ImColor* nativePtr)
	{
		return new ImColorPtr(nativePtr);
	}

	public unsafe static implicit operator ImColor*(ImColorPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImColorPtr(IntPtr nativePtr)
	{
		return new ImColorPtr(nativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImColor_destroy(NativePtr);
	}

	public unsafe ImColor HSV(float h, float s, float v)
	{
		float a = 1f;
		ImColor result = default(ImColor);
		ImGuiNative.ImColor_HSV(&result, h, s, v, a);
		return result;
	}

	public unsafe ImColor HSV(float h, float s, float v, float a)
	{
		ImColor result = default(ImColor);
		ImGuiNative.ImColor_HSV(&result, h, s, v, a);
		return result;
	}

	public unsafe void SetHSV(float h, float s, float v)
	{
		float a = 1f;
		ImGuiNative.ImColor_SetHSV(NativePtr, h, s, v, a);
	}

	public unsafe void SetHSV(float h, float s, float v, float a)
	{
		ImGuiNative.ImColor_SetHSV(NativePtr, h, s, v, a);
	}
}
public struct ImDrawChannel
{
	public ImVector _CmdBuffer;

	public ImVector _IdxBuffer;
}
public struct ImDrawChannelPtr
{
	public unsafe ImDrawChannel* NativePtr { get; }

	public unsafe ImPtrVector<ImDrawCmdPtr> _CmdBuffer => new ImPtrVector<ImDrawCmdPtr>(NativePtr->_CmdBuffer, Unsafe.SizeOf<ImDrawCmd>());

	public unsafe ImVector<ushort> _IdxBuffer => new ImVector<ushort>(NativePtr->_IdxBuffer);

	public unsafe ImDrawChannelPtr(ImDrawChannel* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawChannelPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawChannel*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawChannelPtr(ImDrawChannel* nativePtr)
	{
		return new ImDrawChannelPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawChannel*(ImDrawChannelPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawChannelPtr(IntPtr nativePtr)
	{
		return new ImDrawChannelPtr(nativePtr);
	}
}
public struct ImDrawCmd
{
	public Vector4 ClipRect;

	public IntPtr TextureId;

	public uint VtxOffset;

	public uint IdxOffset;

	public uint ElemCount;

	public IntPtr UserCallback;

	public unsafe void* UserCallbackData;
}
public struct ImDrawCmdPtr
{
	public unsafe ImDrawCmd* NativePtr { get; }

	public unsafe ref Vector4 ClipRect => ref Unsafe.AsRef<Vector4>(&NativePtr->ClipRect);

	public unsafe ref IntPtr TextureId => ref Unsafe.AsRef<IntPtr>(&NativePtr->TextureId);

	public unsafe ref uint VtxOffset => ref Unsafe.AsRef<uint>(&NativePtr->VtxOffset);

	public unsafe ref uint IdxOffset => ref Unsafe.AsRef<uint>(&NativePtr->IdxOffset);

	public unsafe ref uint ElemCount => ref Unsafe.AsRef<uint>(&NativePtr->ElemCount);

	public unsafe ref IntPtr UserCallback => ref Unsafe.AsRef<IntPtr>(&NativePtr->UserCallback);

	public unsafe IntPtr UserCallbackData
	{
		get
		{
			return (IntPtr)NativePtr->UserCallbackData;
		}
		set
		{
			NativePtr->UserCallbackData = (void*)value;
		}
	}

	public unsafe ImDrawCmdPtr(ImDrawCmd* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawCmdPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawCmd*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawCmdPtr(ImDrawCmd* nativePtr)
	{
		return new ImDrawCmdPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawCmd*(ImDrawCmdPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawCmdPtr(IntPtr nativePtr)
	{
		return new ImDrawCmdPtr(nativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImDrawCmd_destroy(NativePtr);
	}

	public unsafe IntPtr GetTexID()
	{
		return ImGuiNative.ImDrawCmd_GetTexID(NativePtr);
	}
}
public struct ImDrawCmdHeader
{
	public Vector4 ClipRect;

	public IntPtr TextureId;

	public uint VtxOffset;
}
public struct ImDrawCmdHeaderPtr
{
	public unsafe ImDrawCmdHeader* NativePtr { get; }

	public unsafe ref Vector4 ClipRect => ref Unsafe.AsRef<Vector4>(&NativePtr->ClipRect);

	public unsafe ref IntPtr TextureId => ref Unsafe.AsRef<IntPtr>(&NativePtr->TextureId);

	public unsafe ref uint VtxOffset => ref Unsafe.AsRef<uint>(&NativePtr->VtxOffset);

	public unsafe ImDrawCmdHeaderPtr(ImDrawCmdHeader* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawCmdHeaderPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawCmdHeader*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawCmdHeaderPtr(ImDrawCmdHeader* nativePtr)
	{
		return new ImDrawCmdHeaderPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawCmdHeader*(ImDrawCmdHeaderPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawCmdHeaderPtr(IntPtr nativePtr)
	{
		return new ImDrawCmdHeaderPtr(nativePtr);
	}
}
public struct ImDrawData
{
	public byte Valid;

	public int CmdListsCount;

	public int TotalIdxCount;

	public int TotalVtxCount;

	public ImVector CmdLists;

	public Vector2 DisplayPos;

	public Vector2 DisplaySize;

	public Vector2 FramebufferScale;

	public unsafe ImGuiViewport* OwnerViewport;
}
public struct ImDrawDataPtr
{
	public unsafe ImDrawData* NativePtr { get; }

	public unsafe ref bool Valid => ref Unsafe.AsRef<bool>(&NativePtr->Valid);

	public unsafe ref int CmdListsCount => ref Unsafe.AsRef<int>(&NativePtr->CmdListsCount);

	public unsafe ref int TotalIdxCount => ref Unsafe.AsRef<int>(&NativePtr->TotalIdxCount);

	public unsafe ref int TotalVtxCount => ref Unsafe.AsRef<int>(&NativePtr->TotalVtxCount);

	public unsafe ImVector<ImDrawListPtr> CmdLists => new ImVector<ImDrawListPtr>(NativePtr->CmdLists);

	public unsafe ref Vector2 DisplayPos => ref Unsafe.AsRef<Vector2>(&NativePtr->DisplayPos);

	public unsafe ref Vector2 DisplaySize => ref Unsafe.AsRef<Vector2>(&NativePtr->DisplaySize);

	public unsafe ref Vector2 FramebufferScale => ref Unsafe.AsRef<Vector2>(&NativePtr->FramebufferScale);

	public unsafe ImGuiViewportPtr OwnerViewport => new ImGuiViewportPtr(NativePtr->OwnerViewport);

	public unsafe ImDrawDataPtr(ImDrawData* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawDataPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawData*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawDataPtr(ImDrawData* nativePtr)
	{
		return new ImDrawDataPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawData*(ImDrawDataPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawDataPtr(IntPtr nativePtr)
	{
		return new ImDrawDataPtr(nativePtr);
	}

	public unsafe void AddDrawList(ImDrawListPtr draw_list)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		ImGuiNative.ImDrawData_AddDrawList(NativePtr, nativePtr);
	}

	public unsafe void Clear()
	{
		ImGuiNative.ImDrawData_Clear(NativePtr);
	}

	public unsafe void DeIndexAllBuffers()
	{
		ImGuiNative.ImDrawData_DeIndexAllBuffers(NativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImDrawData_destroy(NativePtr);
	}

	public unsafe void ScaleClipRects(Vector2 fb_scale)
	{
		ImGuiNative.ImDrawData_ScaleClipRects(NativePtr, fb_scale);
	}
}
[Flags]
public enum ImDrawFlags
{
	None = 0,
	Closed = 1,
	RoundCornersTopLeft = 0x10,
	RoundCornersTopRight = 0x20,
	RoundCornersBottomLeft = 0x40,
	RoundCornersBottomRight = 0x80,
	RoundCornersNone = 0x100,
	RoundCornersTop = 0x30,
	RoundCornersBottom = 0xC0,
	RoundCornersLeft = 0x50,
	RoundCornersRight = 0xA0,
	RoundCornersAll = 0xF0,
	RoundCornersDefault = 0xF0,
	RoundCornersMask = 0x1F0
}
public struct ImDrawList
{
	public ImVector CmdBuffer;

	public ImVector IdxBuffer;

	public ImVector VtxBuffer;

	public ImDrawListFlags Flags;

	public uint _VtxCurrentIdx;

	public IntPtr _Data;

	public unsafe byte* _OwnerName;

	public unsafe ImDrawVert* _VtxWritePtr;

	public unsafe ushort* _IdxWritePtr;

	public ImVector _ClipRectStack;

	public ImVector _TextureIdStack;

	public ImVector _Path;

	public ImDrawCmdHeader _CmdHeader;

	public ImDrawListSplitter _Splitter;

	public float _FringeScale;
}
public struct ImDrawListPtr
{
	public unsafe ImDrawList* NativePtr { get; }

	public unsafe ImPtrVector<ImDrawCmdPtr> CmdBuffer => new ImPtrVector<ImDrawCmdPtr>(NativePtr->CmdBuffer, Unsafe.SizeOf<ImDrawCmd>());

	public unsafe ImVector<ushort> IdxBuffer => new ImVector<ushort>(NativePtr->IdxBuffer);

	public unsafe ImPtrVector<ImDrawVertPtr> VtxBuffer => new ImPtrVector<ImDrawVertPtr>(NativePtr->VtxBuffer, Unsafe.SizeOf<ImDrawVert>());

	public unsafe ref ImDrawListFlags Flags => ref Unsafe.AsRef<ImDrawListFlags>(&NativePtr->Flags);

	public unsafe ref uint _VtxCurrentIdx => ref Unsafe.AsRef<uint>(&NativePtr->_VtxCurrentIdx);

	public unsafe ref IntPtr _Data => ref Unsafe.AsRef<IntPtr>(&NativePtr->_Data);

	public unsafe NullTerminatedString _OwnerName => new NullTerminatedString(NativePtr->_OwnerName);

	public unsafe ImDrawVertPtr _VtxWritePtr => new ImDrawVertPtr(NativePtr->_VtxWritePtr);

	public unsafe IntPtr _IdxWritePtr
	{
		get
		{
			return (IntPtr)NativePtr->_IdxWritePtr;
		}
		set
		{
			NativePtr->_IdxWritePtr = (ushort*)(void*)value;
		}
	}

	public unsafe ImVector<Vector4> _ClipRectStack => new ImVector<Vector4>(NativePtr->_ClipRectStack);

	public unsafe ImVector<IntPtr> _TextureIdStack => new ImVector<IntPtr>(NativePtr->_TextureIdStack);

	public unsafe ImVector<Vector2> _Path => new ImVector<Vector2>(NativePtr->_Path);

	public unsafe ref ImDrawCmdHeader _CmdHeader => ref Unsafe.AsRef<ImDrawCmdHeader>(&NativePtr->_CmdHeader);

	public unsafe ref ImDrawListSplitter _Splitter => ref Unsafe.AsRef<ImDrawListSplitter>(&NativePtr->_Splitter);

	public unsafe ref float _FringeScale => ref Unsafe.AsRef<float>(&NativePtr->_FringeScale);

	public unsafe ImDrawListPtr(ImDrawList* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawListPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawList*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawListPtr(ImDrawList* nativePtr)
	{
		return new ImDrawListPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawList*(ImDrawListPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawListPtr(IntPtr nativePtr)
	{
		return new ImDrawListPtr(nativePtr);
	}

	public unsafe int _CalcCircleAutoSegmentCount(float radius)
	{
		return ImGuiNative.ImDrawList__CalcCircleAutoSegmentCount(NativePtr, radius);
	}

	public unsafe void _ClearFreeMemory()
	{
		ImGuiNative.ImDrawList__ClearFreeMemory(NativePtr);
	}

	public unsafe void _OnChangedClipRect()
	{
		ImGuiNative.ImDrawList__OnChangedClipRect(NativePtr);
	}

	public unsafe void _OnChangedTextureID()
	{
		ImGuiNative.ImDrawList__OnChangedTextureID(NativePtr);
	}

	public unsafe void _OnChangedVtxOffset()
	{
		ImGuiNative.ImDrawList__OnChangedVtxOffset(NativePtr);
	}

	public unsafe void _PathArcToFastEx(Vector2 center, float radius, int a_min_sample, int a_max_sample, int a_step)
	{
		ImGuiNative.ImDrawList__PathArcToFastEx(NativePtr, center, radius, a_min_sample, a_max_sample, a_step);
	}

	public unsafe void _PathArcToN(Vector2 center, float radius, float a_min, float a_max, int num_segments)
	{
		ImGuiNative.ImDrawList__PathArcToN(NativePtr, center, radius, a_min, a_max, num_segments);
	}

	public unsafe void _PopUnusedDrawCmd()
	{
		ImGuiNative.ImDrawList__PopUnusedDrawCmd(NativePtr);
	}

	public unsafe void _ResetForNewFrame()
	{
		ImGuiNative.ImDrawList__ResetForNewFrame(NativePtr);
	}

	public unsafe void _TryMergeDrawCmds()
	{
		ImGuiNative.ImDrawList__TryMergeDrawCmds(NativePtr);
	}

	public unsafe void AddBezierCubic(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, uint col, float thickness)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_AddBezierCubic(NativePtr, p1, p2, p3, p4, col, thickness, num_segments);
	}

	public unsafe void AddBezierCubic(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, uint col, float thickness, int num_segments)
	{
		ImGuiNative.ImDrawList_AddBezierCubic(NativePtr, p1, p2, p3, p4, col, thickness, num_segments);
	}

	public unsafe void AddBezierQuadratic(Vector2 p1, Vector2 p2, Vector2 p3, uint col, float thickness)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_AddBezierQuadratic(NativePtr, p1, p2, p3, col, thickness, num_segments);
	}

	public unsafe void AddBezierQuadratic(Vector2 p1, Vector2 p2, Vector2 p3, uint col, float thickness, int num_segments)
	{
		ImGuiNative.ImDrawList_AddBezierQuadratic(NativePtr, p1, p2, p3, col, thickness, num_segments);
	}

	public unsafe void AddCallback(IntPtr callback, IntPtr callback_data)
	{
		void* callback_data2 = callback_data.ToPointer();
		ImGuiNative.ImDrawList_AddCallback(NativePtr, callback, callback_data2);
	}

	public unsafe void AddCircle(Vector2 center, float radius, uint col)
	{
		int num_segments = 0;
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddCircle(NativePtr, center, radius, col, num_segments, thickness);
	}

	public unsafe void AddCircle(Vector2 center, float radius, uint col, int num_segments)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddCircle(NativePtr, center, radius, col, num_segments, thickness);
	}

	public unsafe void AddCircle(Vector2 center, float radius, uint col, int num_segments, float thickness)
	{
		ImGuiNative.ImDrawList_AddCircle(NativePtr, center, radius, col, num_segments, thickness);
	}

	public unsafe void AddCircleFilled(Vector2 center, float radius, uint col)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_AddCircleFilled(NativePtr, center, radius, col, num_segments);
	}

	public unsafe void AddCircleFilled(Vector2 center, float radius, uint col, int num_segments)
	{
		ImGuiNative.ImDrawList_AddCircleFilled(NativePtr, center, radius, col, num_segments);
	}

	public unsafe void AddConvexPolyFilled(ref Vector2 points, int num_points, uint col)
	{
		fixed (Vector2* points2 = &points)
		{
			ImGuiNative.ImDrawList_AddConvexPolyFilled(NativePtr, points2, num_points, col);
		}
	}

	public unsafe void AddDrawCmd()
	{
		ImGuiNative.ImDrawList_AddDrawCmd(NativePtr);
	}

	public unsafe void AddEllipse(Vector2 center, float radius_x, float radius_y, uint col)
	{
		float rot = 0f;
		int num_segments = 0;
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddEllipse(NativePtr, center, radius_x, radius_y, col, rot, num_segments, thickness);
	}

	public unsafe void AddEllipse(Vector2 center, float radius_x, float radius_y, uint col, float rot)
	{
		int num_segments = 0;
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddEllipse(NativePtr, center, radius_x, radius_y, col, rot, num_segments, thickness);
	}

	public unsafe void AddEllipse(Vector2 center, float radius_x, float radius_y, uint col, float rot, int num_segments)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddEllipse(NativePtr, center, radius_x, radius_y, col, rot, num_segments, thickness);
	}

	public unsafe void AddEllipse(Vector2 center, float radius_x, float radius_y, uint col, float rot, int num_segments, float thickness)
	{
		ImGuiNative.ImDrawList_AddEllipse(NativePtr, center, radius_x, radius_y, col, rot, num_segments, thickness);
	}

	public unsafe void AddEllipseFilled(Vector2 center, float radius_x, float radius_y, uint col)
	{
		float rot = 0f;
		int num_segments = 0;
		ImGuiNative.ImDrawList_AddEllipseFilled(NativePtr, center, radius_x, radius_y, col, rot, num_segments);
	}

	public unsafe void AddEllipseFilled(Vector2 center, float radius_x, float radius_y, uint col, float rot)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_AddEllipseFilled(NativePtr, center, radius_x, radius_y, col, rot, num_segments);
	}

	public unsafe void AddEllipseFilled(Vector2 center, float radius_x, float radius_y, uint col, float rot, int num_segments)
	{
		ImGuiNative.ImDrawList_AddEllipseFilled(NativePtr, center, radius_x, radius_y, col, rot, num_segments);
	}

	public unsafe void AddImage(IntPtr user_texture_id, Vector2 p_min, Vector2 p_max)
	{
		Vector2 uv_min = default(Vector2);
		Vector2 uv_max = new Vector2(1f, 1f);
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, p_min, p_max, uv_min, uv_max, col);
	}

	public unsafe void AddImage(IntPtr user_texture_id, Vector2 p_min, Vector2 p_max, Vector2 uv_min)
	{
		Vector2 uv_max = new Vector2(1f, 1f);
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, p_min, p_max, uv_min, uv_max, col);
	}

	public unsafe void AddImage(IntPtr user_texture_id, Vector2 p_min, Vector2 p_max, Vector2 uv_min, Vector2 uv_max)
	{
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, p_min, p_max, uv_min, uv_max, col);
	}

	public unsafe void AddImage(IntPtr user_texture_id, Vector2 p_min, Vector2 p_max, Vector2 uv_min, Vector2 uv_max, uint col)
	{
		ImGuiNative.ImDrawList_AddImage(NativePtr, user_texture_id, p_min, p_max, uv_min, uv_max, col);
	}

	public unsafe void AddImageQuad(IntPtr user_texture_id, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4)
	{
		Vector2 uv = default(Vector2);
		Vector2 uv2 = new Vector2(1f, 0f);
		Vector2 uv3 = new Vector2(1f, 1f);
		Vector2 uv4 = new Vector2(0f, 1f);
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, p1, p2, p3, p4, uv, uv2, uv3, uv4, col);
	}

	public unsafe void AddImageQuad(IntPtr user_texture_id, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 uv1)
	{
		Vector2 uv2 = new Vector2(1f, 0f);
		Vector2 uv3 = new Vector2(1f, 1f);
		Vector2 uv4 = new Vector2(0f, 1f);
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
	}

	public unsafe void AddImageQuad(IntPtr user_texture_id, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 uv1, Vector2 uv2)
	{
		Vector2 uv3 = new Vector2(1f, 1f);
		Vector2 uv4 = new Vector2(0f, 1f);
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
	}

	public unsafe void AddImageQuad(IntPtr user_texture_id, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 uv1, Vector2 uv2, Vector2 uv3)
	{
		Vector2 uv4 = new Vector2(0f, 1f);
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
	}

	public unsafe void AddImageQuad(IntPtr user_texture_id, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 uv1, Vector2 uv2, Vector2 uv3, Vector2 uv4)
	{
		uint col = uint.MaxValue;
		ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
	}

	public unsafe void AddImageQuad(IntPtr user_texture_id, Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 uv1, Vector2 uv2, Vector2 uv3, Vector2 uv4, uint col)
	{
		ImGuiNative.ImDrawList_AddImageQuad(NativePtr, user_texture_id, p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
	}

	public unsafe void AddImageRounded(IntPtr user_texture_id, Vector2 p_min, Vector2 p_max, Vector2 uv_min, Vector2 uv_max, uint col, float rounding)
	{
		ImDrawFlags flags = ImDrawFlags.None;
		ImGuiNative.ImDrawList_AddImageRounded(NativePtr, user_texture_id, p_min, p_max, uv_min, uv_max, col, rounding, flags);
	}

	public unsafe void AddImageRounded(IntPtr user_texture_id, Vector2 p_min, Vector2 p_max, Vector2 uv_min, Vector2 uv_max, uint col, float rounding, ImDrawFlags flags)
	{
		ImGuiNative.ImDrawList_AddImageRounded(NativePtr, user_texture_id, p_min, p_max, uv_min, uv_max, col, rounding, flags);
	}

	public unsafe void AddLine(Vector2 p1, Vector2 p2, uint col)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddLine(NativePtr, p1, p2, col, thickness);
	}

	public unsafe void AddLine(Vector2 p1, Vector2 p2, uint col, float thickness)
	{
		ImGuiNative.ImDrawList_AddLine(NativePtr, p1, p2, col, thickness);
	}

	public unsafe void AddNgon(Vector2 center, float radius, uint col, int num_segments)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddNgon(NativePtr, center, radius, col, num_segments, thickness);
	}

	public unsafe void AddNgon(Vector2 center, float radius, uint col, int num_segments, float thickness)
	{
		ImGuiNative.ImDrawList_AddNgon(NativePtr, center, radius, col, num_segments, thickness);
	}

	public unsafe void AddNgonFilled(Vector2 center, float radius, uint col, int num_segments)
	{
		ImGuiNative.ImDrawList_AddNgonFilled(NativePtr, center, radius, col, num_segments);
	}

	public unsafe void AddPolyline(ref Vector2 points, int num_points, uint col, ImDrawFlags flags, float thickness)
	{
		fixed (Vector2* points2 = &points)
		{
			ImGuiNative.ImDrawList_AddPolyline(NativePtr, points2, num_points, col, flags, thickness);
		}
	}

	public unsafe void AddQuad(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, uint col)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddQuad(NativePtr, p1, p2, p3, p4, col, thickness);
	}

	public unsafe void AddQuad(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, uint col, float thickness)
	{
		ImGuiNative.ImDrawList_AddQuad(NativePtr, p1, p2, p3, p4, col, thickness);
	}

	public unsafe void AddQuadFilled(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, uint col)
	{
		ImGuiNative.ImDrawList_AddQuadFilled(NativePtr, p1, p2, p3, p4, col);
	}

	public unsafe void AddRect(Vector2 p_min, Vector2 p_max, uint col)
	{
		float rounding = 0f;
		ImDrawFlags flags = ImDrawFlags.None;
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddRect(NativePtr, p_min, p_max, col, rounding, flags, thickness);
	}

	public unsafe void AddRect(Vector2 p_min, Vector2 p_max, uint col, float rounding)
	{
		ImDrawFlags flags = ImDrawFlags.None;
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddRect(NativePtr, p_min, p_max, col, rounding, flags, thickness);
	}

	public unsafe void AddRect(Vector2 p_min, Vector2 p_max, uint col, float rounding, ImDrawFlags flags)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddRect(NativePtr, p_min, p_max, col, rounding, flags, thickness);
	}

	public unsafe void AddRect(Vector2 p_min, Vector2 p_max, uint col, float rounding, ImDrawFlags flags, float thickness)
	{
		ImGuiNative.ImDrawList_AddRect(NativePtr, p_min, p_max, col, rounding, flags, thickness);
	}

	public unsafe void AddRectFilled(Vector2 p_min, Vector2 p_max, uint col)
	{
		float rounding = 0f;
		ImDrawFlags flags = ImDrawFlags.None;
		ImGuiNative.ImDrawList_AddRectFilled(NativePtr, p_min, p_max, col, rounding, flags);
	}

	public unsafe void AddRectFilled(Vector2 p_min, Vector2 p_max, uint col, float rounding)
	{
		ImDrawFlags flags = ImDrawFlags.None;
		ImGuiNative.ImDrawList_AddRectFilled(NativePtr, p_min, p_max, col, rounding, flags);
	}

	public unsafe void AddRectFilled(Vector2 p_min, Vector2 p_max, uint col, float rounding, ImDrawFlags flags)
	{
		ImGuiNative.ImDrawList_AddRectFilled(NativePtr, p_min, p_max, col, rounding, flags);
	}

	public unsafe void AddRectFilledMultiColor(Vector2 p_min, Vector2 p_max, uint col_upr_left, uint col_upr_right, uint col_bot_right, uint col_bot_left)
	{
		ImGuiNative.ImDrawList_AddRectFilledMultiColor(NativePtr, p_min, p_max, col_upr_left, col_upr_right, col_bot_right, col_bot_left);
	}

	public unsafe void AddText(Vector2 pos, uint col, string text_begin)
	{
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		ImGuiNative.ImDrawList_AddText_Vec2(NativePtr, pos, col, ptr, ptr + num);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void AddText(ImFontPtr font, float font_size, Vector2 pos, uint col, string text_begin)
	{
		ImFont* nativePtr = font.NativePtr;
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		float wrap_width = 0f;
		Vector4* cpu_fine_clip_rect = null;
		ImGuiNative.ImDrawList_AddText_FontPtr(NativePtr, nativePtr, font_size, pos, col, ptr, ptr + num, wrap_width, cpu_fine_clip_rect);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void AddText(ImFontPtr font, float font_size, Vector2 pos, uint col, string text_begin, float wrap_width)
	{
		ImFont* nativePtr = font.NativePtr;
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		Vector4* cpu_fine_clip_rect = null;
		ImGuiNative.ImDrawList_AddText_FontPtr(NativePtr, nativePtr, font_size, pos, col, ptr, ptr + num, wrap_width, cpu_fine_clip_rect);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void AddText(ImFontPtr font, float font_size, Vector2 pos, uint col, string text_begin, float wrap_width, ref Vector4 cpu_fine_clip_rect)
	{
		ImFont* nativePtr = font.NativePtr;
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		fixed (Vector4* cpu_fine_clip_rect2 = &cpu_fine_clip_rect)
		{
			ImGuiNative.ImDrawList_AddText_FontPtr(NativePtr, nativePtr, font_size, pos, col, ptr, ptr + num, wrap_width, cpu_fine_clip_rect2);
			if (num > 2048)
			{
				Util.Free(ptr);
			}
		}
	}

	public unsafe void AddTriangle(Vector2 p1, Vector2 p2, Vector2 p3, uint col)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_AddTriangle(NativePtr, p1, p2, p3, col, thickness);
	}

	public unsafe void AddTriangle(Vector2 p1, Vector2 p2, Vector2 p3, uint col, float thickness)
	{
		ImGuiNative.ImDrawList_AddTriangle(NativePtr, p1, p2, p3, col, thickness);
	}

	public unsafe void AddTriangleFilled(Vector2 p1, Vector2 p2, Vector2 p3, uint col)
	{
		ImGuiNative.ImDrawList_AddTriangleFilled(NativePtr, p1, p2, p3, col);
	}

	public unsafe void ChannelsMerge()
	{
		ImGuiNative.ImDrawList_ChannelsMerge(NativePtr);
	}

	public unsafe void ChannelsSetCurrent(int n)
	{
		ImGuiNative.ImDrawList_ChannelsSetCurrent(NativePtr, n);
	}

	public unsafe void ChannelsSplit(int count)
	{
		ImGuiNative.ImDrawList_ChannelsSplit(NativePtr, count);
	}

	public unsafe ImDrawListPtr CloneOutput()
	{
		return new ImDrawListPtr(ImGuiNative.ImDrawList_CloneOutput(NativePtr));
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImDrawList_destroy(NativePtr);
	}

	public unsafe Vector2 GetClipRectMax()
	{
		Vector2 result = default(Vector2);
		ImGuiNative.ImDrawList_GetClipRectMax(&result, NativePtr);
		return result;
	}

	public unsafe Vector2 GetClipRectMin()
	{
		Vector2 result = default(Vector2);
		ImGuiNative.ImDrawList_GetClipRectMin(&result, NativePtr);
		return result;
	}

	public unsafe void PathArcTo(Vector2 center, float radius, float a_min, float a_max)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_PathArcTo(NativePtr, center, radius, a_min, a_max, num_segments);
	}

	public unsafe void PathArcTo(Vector2 center, float radius, float a_min, float a_max, int num_segments)
	{
		ImGuiNative.ImDrawList_PathArcTo(NativePtr, center, radius, a_min, a_max, num_segments);
	}

	public unsafe void PathArcToFast(Vector2 center, float radius, int a_min_of_12, int a_max_of_12)
	{
		ImGuiNative.ImDrawList_PathArcToFast(NativePtr, center, radius, a_min_of_12, a_max_of_12);
	}

	public unsafe void PathBezierCubicCurveTo(Vector2 p2, Vector2 p3, Vector2 p4)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_PathBezierCubicCurveTo(NativePtr, p2, p3, p4, num_segments);
	}

	public unsafe void PathBezierCubicCurveTo(Vector2 p2, Vector2 p3, Vector2 p4, int num_segments)
	{
		ImGuiNative.ImDrawList_PathBezierCubicCurveTo(NativePtr, p2, p3, p4, num_segments);
	}

	public unsafe void PathBezierQuadraticCurveTo(Vector2 p2, Vector2 p3)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_PathBezierQuadraticCurveTo(NativePtr, p2, p3, num_segments);
	}

	public unsafe void PathBezierQuadraticCurveTo(Vector2 p2, Vector2 p3, int num_segments)
	{
		ImGuiNative.ImDrawList_PathBezierQuadraticCurveTo(NativePtr, p2, p3, num_segments);
	}

	public unsafe void PathClear()
	{
		ImGuiNative.ImDrawList_PathClear(NativePtr);
	}

	public unsafe void PathEllipticalArcTo(Vector2 center, float radius_x, float radius_y, float rot, float a_min, float a_max)
	{
		int num_segments = 0;
		ImGuiNative.ImDrawList_PathEllipticalArcTo(NativePtr, center, radius_x, radius_y, rot, a_min, a_max, num_segments);
	}

	public unsafe void PathEllipticalArcTo(Vector2 center, float radius_x, float radius_y, float rot, float a_min, float a_max, int num_segments)
	{
		ImGuiNative.ImDrawList_PathEllipticalArcTo(NativePtr, center, radius_x, radius_y, rot, a_min, a_max, num_segments);
	}

	public unsafe void PathFillConvex(uint col)
	{
		ImGuiNative.ImDrawList_PathFillConvex(NativePtr, col);
	}

	public unsafe void PathLineTo(Vector2 pos)
	{
		ImGuiNative.ImDrawList_PathLineTo(NativePtr, pos);
	}

	public unsafe void PathLineToMergeDuplicate(Vector2 pos)
	{
		ImGuiNative.ImDrawList_PathLineToMergeDuplicate(NativePtr, pos);
	}

	public unsafe void PathRect(Vector2 rect_min, Vector2 rect_max)
	{
		float rounding = 0f;
		ImDrawFlags flags = ImDrawFlags.None;
		ImGuiNative.ImDrawList_PathRect(NativePtr, rect_min, rect_max, rounding, flags);
	}

	public unsafe void PathRect(Vector2 rect_min, Vector2 rect_max, float rounding)
	{
		ImDrawFlags flags = ImDrawFlags.None;
		ImGuiNative.ImDrawList_PathRect(NativePtr, rect_min, rect_max, rounding, flags);
	}

	public unsafe void PathRect(Vector2 rect_min, Vector2 rect_max, float rounding, ImDrawFlags flags)
	{
		ImGuiNative.ImDrawList_PathRect(NativePtr, rect_min, rect_max, rounding, flags);
	}

	public unsafe void PathStroke(uint col)
	{
		ImDrawFlags flags = ImDrawFlags.None;
		float thickness = 1f;
		ImGuiNative.ImDrawList_PathStroke(NativePtr, col, flags, thickness);
	}

	public unsafe void PathStroke(uint col, ImDrawFlags flags)
	{
		float thickness = 1f;
		ImGuiNative.ImDrawList_PathStroke(NativePtr, col, flags, thickness);
	}

	public unsafe void PathStroke(uint col, ImDrawFlags flags, float thickness)
	{
		ImGuiNative.ImDrawList_PathStroke(NativePtr, col, flags, thickness);
	}

	public unsafe void PopClipRect()
	{
		ImGuiNative.ImDrawList_PopClipRect(NativePtr);
	}

	public unsafe void PopTextureID()
	{
		ImGuiNative.ImDrawList_PopTextureID(NativePtr);
	}

	public unsafe void PrimQuadUV(Vector2 a, Vector2 b, Vector2 c, Vector2 d, Vector2 uv_a, Vector2 uv_b, Vector2 uv_c, Vector2 uv_d, uint col)
	{
		ImGuiNative.ImDrawList_PrimQuadUV(NativePtr, a, b, c, d, uv_a, uv_b, uv_c, uv_d, col);
	}

	public unsafe void PrimRect(Vector2 a, Vector2 b, uint col)
	{
		ImGuiNative.ImDrawList_PrimRect(NativePtr, a, b, col);
	}

	public unsafe void PrimRectUV(Vector2 a, Vector2 b, Vector2 uv_a, Vector2 uv_b, uint col)
	{
		ImGuiNative.ImDrawList_PrimRectUV(NativePtr, a, b, uv_a, uv_b, col);
	}

	public unsafe void PrimReserve(int idx_count, int vtx_count)
	{
		ImGuiNative.ImDrawList_PrimReserve(NativePtr, idx_count, vtx_count);
	}

	public unsafe void PrimUnreserve(int idx_count, int vtx_count)
	{
		ImGuiNative.ImDrawList_PrimUnreserve(NativePtr, idx_count, vtx_count);
	}

	public unsafe void PrimVtx(Vector2 pos, Vector2 uv, uint col)
	{
		ImGuiNative.ImDrawList_PrimVtx(NativePtr, pos, uv, col);
	}

	public unsafe void PrimWriteIdx(ushort idx)
	{
		ImGuiNative.ImDrawList_PrimWriteIdx(NativePtr, idx);
	}

	public unsafe void PrimWriteVtx(Vector2 pos, Vector2 uv, uint col)
	{
		ImGuiNative.ImDrawList_PrimWriteVtx(NativePtr, pos, uv, col);
	}

	public unsafe void PushClipRect(Vector2 clip_rect_min, Vector2 clip_rect_max)
	{
		byte intersect_with_current_clip_rect = 0;
		ImGuiNative.ImDrawList_PushClipRect(NativePtr, clip_rect_min, clip_rect_max, intersect_with_current_clip_rect);
	}

	public unsafe void PushClipRect(Vector2 clip_rect_min, Vector2 clip_rect_max, bool intersect_with_current_clip_rect)
	{
		byte intersect_with_current_clip_rect2 = (intersect_with_current_clip_rect ? ((byte)1) : ((byte)0));
		ImGuiNative.ImDrawList_PushClipRect(NativePtr, clip_rect_min, clip_rect_max, intersect_with_current_clip_rect2);
	}

	public unsafe void PushClipRectFullScreen()
	{
		ImGuiNative.ImDrawList_PushClipRectFullScreen(NativePtr);
	}

	public unsafe void PushTextureID(IntPtr texture_id)
	{
		ImGuiNative.ImDrawList_PushTextureID(NativePtr, texture_id);
	}
}
[Flags]
public enum ImDrawListFlags
{
	None = 0,
	AntiAliasedLines = 1,
	AntiAliasedLinesUseTex = 2,
	AntiAliasedFill = 4,
	AllowVtxOffset = 8
}
public struct ImDrawListSplitter
{
	public int _Current;

	public int _Count;

	public ImVector _Channels;
}
public struct ImDrawListSplitterPtr
{
	public unsafe ImDrawListSplitter* NativePtr { get; }

	public unsafe ref int _Current => ref Unsafe.AsRef<int>(&NativePtr->_Current);

	public unsafe ref int _Count => ref Unsafe.AsRef<int>(&NativePtr->_Count);

	public unsafe ImPtrVector<ImDrawChannelPtr> _Channels => new ImPtrVector<ImDrawChannelPtr>(NativePtr->_Channels, Unsafe.SizeOf<ImDrawChannel>());

	public unsafe ImDrawListSplitterPtr(ImDrawListSplitter* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawListSplitterPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawListSplitter*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawListSplitterPtr(ImDrawListSplitter* nativePtr)
	{
		return new ImDrawListSplitterPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawListSplitter*(ImDrawListSplitterPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawListSplitterPtr(IntPtr nativePtr)
	{
		return new ImDrawListSplitterPtr(nativePtr);
	}

	public unsafe void Clear()
	{
		ImGuiNative.ImDrawListSplitter_Clear(NativePtr);
	}

	public unsafe void ClearFreeMemory()
	{
		ImGuiNative.ImDrawListSplitter_ClearFreeMemory(NativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImDrawListSplitter_destroy(NativePtr);
	}

	public unsafe void Merge(ImDrawListPtr draw_list)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		ImGuiNative.ImDrawListSplitter_Merge(NativePtr, nativePtr);
	}

	public unsafe void SetCurrentChannel(ImDrawListPtr draw_list, int channel_idx)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		ImGuiNative.ImDrawListSplitter_SetCurrentChannel(NativePtr, nativePtr, channel_idx);
	}

	public unsafe void Split(ImDrawListPtr draw_list, int count)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		ImGuiNative.ImDrawListSplitter_Split(NativePtr, nativePtr, count);
	}
}
public struct ImDrawVert
{
	public Vector2 pos;

	public Vector2 uv;

	public uint col;
}
public struct ImDrawVertPtr
{
	public unsafe ImDrawVert* NativePtr { get; }

	public unsafe ref Vector2 pos => ref Unsafe.AsRef<Vector2>(&NativePtr->pos);

	public unsafe ref Vector2 uv => ref Unsafe.AsRef<Vector2>(&NativePtr->uv);

	public unsafe ref uint col => ref Unsafe.AsRef<uint>(&NativePtr->col);

	public unsafe ImDrawVertPtr(ImDrawVert* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImDrawVertPtr(IntPtr nativePtr)
	{
		NativePtr = (ImDrawVert*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImDrawVertPtr(ImDrawVert* nativePtr)
	{
		return new ImDrawVertPtr(nativePtr);
	}

	public unsafe static implicit operator ImDrawVert*(ImDrawVertPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImDrawVertPtr(IntPtr nativePtr)
	{
		return new ImDrawVertPtr(nativePtr);
	}
}
public struct ImFont
{
	public ImVector IndexAdvanceX;

	public float FallbackAdvanceX;

	public float FontSize;

	public ImVector IndexLookup;

	public ImVector Glyphs;

	public unsafe ImFontGlyph* FallbackGlyph;

	public unsafe ImFontAtlas* ContainerAtlas;

	public unsafe ImFontConfig* ConfigData;

	public short ConfigDataCount;

	public ushort FallbackChar;

	public ushort EllipsisChar;

	public short EllipsisCharCount;

	public float EllipsisWidth;

	public float EllipsisCharStep;

	public byte DirtyLookupTables;

	public float Scale;

	public float Ascent;

	public float Descent;

	public int MetricsTotalSurface;

	public unsafe fixed byte Used4kPagesMap[2];
}
public struct ImFontPtr
{
	public unsafe ImFont* NativePtr { get; }

	public unsafe ImVector<float> IndexAdvanceX => new ImVector<float>(NativePtr->IndexAdvanceX);

	public unsafe ref float FallbackAdvanceX => ref Unsafe.AsRef<float>(&NativePtr->FallbackAdvanceX);

	public unsafe ref float FontSize => ref Unsafe.AsRef<float>(&NativePtr->FontSize);

	public unsafe ImVector<ushort> IndexLookup => new ImVector<ushort>(NativePtr->IndexLookup);

	public unsafe ImPtrVector<ImFontGlyphPtr> Glyphs => new ImPtrVector<ImFontGlyphPtr>(NativePtr->Glyphs, Unsafe.SizeOf<ImFontGlyph>());

	public unsafe ImFontGlyphPtr FallbackGlyph => new ImFontGlyphPtr(NativePtr->FallbackGlyph);

	public unsafe ImFontAtlasPtr ContainerAtlas => new ImFontAtlasPtr(NativePtr->ContainerAtlas);

	public unsafe ImFontConfigPtr ConfigData => new ImFontConfigPtr(NativePtr->ConfigData);

	public unsafe ref short ConfigDataCount => ref Unsafe.AsRef<short>(&NativePtr->ConfigDataCount);

	public unsafe ref ushort FallbackChar => ref Unsafe.AsRef<ushort>(&NativePtr->FallbackChar);

	public unsafe ref ushort EllipsisChar => ref Unsafe.AsRef<ushort>(&NativePtr->EllipsisChar);

	public unsafe ref short EllipsisCharCount => ref Unsafe.AsRef<short>(&NativePtr->EllipsisCharCount);

	public unsafe ref float EllipsisWidth => ref Unsafe.AsRef<float>(&NativePtr->EllipsisWidth);

	public unsafe ref float EllipsisCharStep => ref Unsafe.AsRef<float>(&NativePtr->EllipsisCharStep);

	public unsafe ref bool DirtyLookupTables => ref Unsafe.AsRef<bool>(&NativePtr->DirtyLookupTables);

	public unsafe ref float Scale => ref Unsafe.AsRef<float>(&NativePtr->Scale);

	public unsafe ref float Ascent => ref Unsafe.AsRef<float>(&NativePtr->Ascent);

	public unsafe ref float Descent => ref Unsafe.AsRef<float>(&NativePtr->Descent);

	public unsafe ref int MetricsTotalSurface => ref Unsafe.AsRef<int>(&NativePtr->MetricsTotalSurface);

	public unsafe RangeAccessor<byte> Used4kPagesMap => new RangeAccessor<byte>(NativePtr->Used4kPagesMap, 2);

	public unsafe ImFontPtr(ImFont* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImFontPtr(IntPtr nativePtr)
	{
		NativePtr = (ImFont*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImFontPtr(ImFont* nativePtr)
	{
		return new ImFontPtr(nativePtr);
	}

	public unsafe static implicit operator ImFont*(ImFontPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImFontPtr(IntPtr nativePtr)
	{
		return new ImFontPtr(nativePtr);
	}

	public unsafe void AddGlyph(ImFontConfigPtr src_cfg, ushort c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x)
	{
		ImFontConfig* nativePtr = src_cfg.NativePtr;
		ImGuiNative.ImFont_AddGlyph(NativePtr, nativePtr, c, x0, y0, x1, y1, u0, v0, u1, v1, advance_x);
	}

	public unsafe void AddRemapChar(ushort dst, ushort src)
	{
		byte overwrite_dst = 1;
		ImGuiNative.ImFont_AddRemapChar(NativePtr, dst, src, overwrite_dst);
	}

	public unsafe void AddRemapChar(ushort dst, ushort src, bool overwrite_dst)
	{
		byte overwrite_dst2 = (overwrite_dst ? ((byte)1) : ((byte)0));
		ImGuiNative.ImFont_AddRemapChar(NativePtr, dst, src, overwrite_dst2);
	}

	public unsafe void BuildLookupTable()
	{
		ImGuiNative.ImFont_BuildLookupTable(NativePtr);
	}

	public unsafe Vector2 CalcTextSizeA(float size, float max_width, float wrap_width, string text_begin)
	{
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		byte** remaining = null;
		Vector2 result = default(Vector2);
		ImGuiNative.ImFont_CalcTextSizeA(&result, NativePtr, size, max_width, wrap_width, ptr, ptr + num, remaining);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return result;
	}

	public unsafe Vector2 CalcTextSizeA(float size, float max_width, float wrap_width, string text_begin, ref byte* remaining)
	{
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		fixed (byte** remaining2 = &remaining)
		{
			Vector2 result = default(Vector2);
			ImGuiNative.ImFont_CalcTextSizeA(&result, NativePtr, size, max_width, wrap_width, ptr, ptr + num, remaining2);
			if (num > 2048)
			{
				Util.Free(ptr);
			}
			return result;
		}
	}

	public unsafe string CalcWordWrapPositionA(float scale, string text, float wrap_width)
	{
		int num = 0;
		byte* ptr;
		if (text != null)
		{
			num = Encoding.UTF8.GetByteCount(text);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(text, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte* ptr2 = ImGuiNative.ImFont_CalcWordWrapPositionA(NativePtr, scale, ptr, ptr + num, wrap_width);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return Util.StringFromPtr(ptr2);
	}

	public unsafe void ClearOutputData()
	{
		ImGuiNative.ImFont_ClearOutputData(NativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImFont_destroy(NativePtr);
	}

	public unsafe ImFontGlyphPtr FindGlyph(ushort c)
	{
		return new ImFontGlyphPtr(ImGuiNative.ImFont_FindGlyph(NativePtr, c));
	}

	public unsafe ImFontGlyphPtr FindGlyphNoFallback(ushort c)
	{
		return new ImFontGlyphPtr(ImGuiNative.ImFont_FindGlyphNoFallback(NativePtr, c));
	}

	public unsafe float GetCharAdvance(ushort c)
	{
		return ImGuiNative.ImFont_GetCharAdvance(NativePtr, c);
	}

	public unsafe string GetDebugName()
	{
		return Util.StringFromPtr(ImGuiNative.ImFont_GetDebugName(NativePtr));
	}

	public unsafe void GrowIndex(int new_size)
	{
		ImGuiNative.ImFont_GrowIndex(NativePtr, new_size);
	}

	public unsafe bool IsLoaded()
	{
		return ImGuiNative.ImFont_IsLoaded(NativePtr) != 0;
	}

	public unsafe void RenderChar(ImDrawListPtr draw_list, float size, Vector2 pos, uint col, ushort c)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		ImGuiNative.ImFont_RenderChar(NativePtr, nativePtr, size, pos, col, c);
	}

	public unsafe void RenderText(ImDrawListPtr draw_list, float size, Vector2 pos, uint col, Vector4 clip_rect, string text_begin)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		float wrap_width = 0f;
		byte cpu_fine_clip = 0;
		ImGuiNative.ImFont_RenderText(NativePtr, nativePtr, size, pos, col, clip_rect, ptr, ptr + num, wrap_width, cpu_fine_clip);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void RenderText(ImDrawListPtr draw_list, float size, Vector2 pos, uint col, Vector4 clip_rect, string text_begin, float wrap_width)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		byte cpu_fine_clip = 0;
		ImGuiNative.ImFont_RenderText(NativePtr, nativePtr, size, pos, col, clip_rect, ptr, ptr + num, wrap_width, cpu_fine_clip);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void RenderText(ImDrawListPtr draw_list, float size, Vector2 pos, uint col, Vector4 clip_rect, string text_begin, float wrap_width, bool cpu_fine_clip)
	{
		ImDrawList* nativePtr = draw_list.NativePtr;
		int num = 0;
		num = Encoding.UTF8.GetByteCount(text_begin);
		byte* ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
		int utf = Util.GetUtf8(text_begin, ptr, num);
		ptr[utf] = 0;
		byte cpu_fine_clip2 = (cpu_fine_clip ? ((byte)1) : ((byte)0));
		ImGuiNative.ImFont_RenderText(NativePtr, nativePtr, size, pos, col, clip_rect, ptr, ptr + num, wrap_width, cpu_fine_clip2);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void SetGlyphVisible(ushort c, bool visible)
	{
		byte visible2 = (visible ? ((byte)1) : ((byte)0));
		ImGuiNative.ImFont_SetGlyphVisible(NativePtr, c, visible2);
	}
}
public struct ImFontAtlas
{
	public ImFontAtlasFlags Flags;

	public IntPtr TexID;

	public int TexDesiredWidth;

	public int TexGlyphPadding;

	public byte Locked;

	public unsafe void* UserData;

	public byte TexReady;

	public byte TexPixelsUseColors;

	public unsafe byte* TexPixelsAlpha8;

	public unsafe uint* TexPixelsRGBA32;

	public int TexWidth;

	public int TexHeight;

	public Vector2 TexUvScale;

	public Vector2 TexUvWhitePixel;

	public ImVector Fonts;

	public ImVector CustomRects;

	public ImVector ConfigData;

	public Vector4 TexUvLines_0;

	public Vector4 TexUvLines_1;

	public Vector4 TexUvLines_2;

	public Vector4 TexUvLines_3;

	public Vector4 TexUvLines_4;

	public Vector4 TexUvLines_5;

	public Vector4 TexUvLines_6;

	public Vector4 TexUvLines_7;

	public Vector4 TexUvLines_8;

	public Vector4 TexUvLines_9;

	public Vector4 TexUvLines_10;

	public Vector4 TexUvLines_11;

	public Vector4 TexUvLines_12;

	public Vector4 TexUvLines_13;

	public Vector4 TexUvLines_14;

	public Vector4 TexUvLines_15;

	public Vector4 TexUvLines_16;

	public Vector4 TexUvLines_17;

	public Vector4 TexUvLines_18;

	public Vector4 TexUvLines_19;

	public Vector4 TexUvLines_20;

	public Vector4 TexUvLines_21;

	public Vector4 TexUvLines_22;

	public Vector4 TexUvLines_23;

	public Vector4 TexUvLines_24;

	public Vector4 TexUvLines_25;

	public Vector4 TexUvLines_26;

	public Vector4 TexUvLines_27;

	public Vector4 TexUvLines_28;

	public Vector4 TexUvLines_29;

	public Vector4 TexUvLines_30;

	public Vector4 TexUvLines_31;

	public Vector4 TexUvLines_32;

	public Vector4 TexUvLines_33;

	public Vector4 TexUvLines_34;

	public Vector4 TexUvLines_35;

	public Vector4 TexUvLines_36;

	public Vector4 TexUvLines_37;

	public Vector4 TexUvLines_38;

	public Vector4 TexUvLines_39;

	public Vector4 TexUvLines_40;

	public Vector4 TexUvLines_41;

	public Vector4 TexUvLines_42;

	public Vector4 TexUvLines_43;

	public Vector4 TexUvLines_44;

	public Vector4 TexUvLines_45;

	public Vector4 TexUvLines_46;

	public Vector4 TexUvLines_47;

	public Vector4 TexUvLines_48;

	public Vector4 TexUvLines_49;

	public Vector4 TexUvLines_50;

	public Vector4 TexUvLines_51;

	public Vector4 TexUvLines_52;

	public Vector4 TexUvLines_53;

	public Vector4 TexUvLines_54;

	public Vector4 TexUvLines_55;

	public Vector4 TexUvLines_56;

	public Vector4 TexUvLines_57;

	public Vector4 TexUvLines_58;

	public Vector4 TexUvLines_59;

	public Vector4 TexUvLines_60;

	public Vector4 TexUvLines_61;

	public Vector4 TexUvLines_62;

	public Vector4 TexUvLines_63;

	public unsafe IntPtr* FontBuilderIO;

	public uint FontBuilderFlags;

	public int PackIdMouseCursors;

	public int PackIdLines;
}
public struct ImFontAtlasPtr
{
	public unsafe ImFontAtlas* NativePtr { get; }

	public unsafe ref ImFontAtlasFlags Flags => ref Unsafe.AsRef<ImFontAtlasFlags>(&NativePtr->Flags);

	public unsafe ref IntPtr TexID => ref Unsafe.AsRef<IntPtr>(&NativePtr->TexID);

	public unsafe ref int TexDesiredWidth => ref Unsafe.AsRef<int>(&NativePtr->TexDesiredWidth);

	public unsafe ref int TexGlyphPadding => ref Unsafe.AsRef<int>(&NativePtr->TexGlyphPadding);

	public unsafe ref bool Locked => ref Unsafe.AsRef<bool>(&NativePtr->Locked);

	public unsafe IntPtr UserData
	{
		get
		{
			return (IntPtr)NativePtr->UserData;
		}
		set
		{
			NativePtr->UserData = (void*)value;
		}
	}

	public unsafe ref bool TexReady => ref Unsafe.AsRef<bool>(&NativePtr->TexReady);

	public unsafe ref bool TexPixelsUseColors => ref Unsafe.AsRef<bool>(&NativePtr->TexPixelsUseColors);

	public unsafe IntPtr TexPixelsAlpha8
	{
		get
		{
			return (IntPtr)NativePtr->TexPixelsAlpha8;
		}
		set
		{
			NativePtr->TexPixelsAlpha8 = (byte*)(void*)value;
		}
	}

	public unsafe IntPtr TexPixelsRGBA32
	{
		get
		{
			return (IntPtr)NativePtr->TexPixelsRGBA32;
		}
		set
		{
			NativePtr->TexPixelsRGBA32 = (uint*)(void*)value;
		}
	}

	public unsafe ref int TexWidth => ref Unsafe.AsRef<int>(&NativePtr->TexWidth);

	public unsafe ref int TexHeight => ref Unsafe.AsRef<int>(&NativePtr->TexHeight);

	public unsafe ref Vector2 TexUvScale => ref Unsafe.AsRef<Vector2>(&NativePtr->TexUvScale);

	public unsafe ref Vector2 TexUvWhitePixel => ref Unsafe.AsRef<Vector2>(&NativePtr->TexUvWhitePixel);

	public unsafe ImVector<ImFontPtr> Fonts => new ImVector<ImFontPtr>(NativePtr->Fonts);

	public unsafe ImPtrVector<ImFontAtlasCustomRectPtr> CustomRects => new ImPtrVector<ImFontAtlasCustomRectPtr>(NativePtr->CustomRects, Unsafe.SizeOf<ImFontAtlasCustomRect>());

	public unsafe ImPtrVector<ImFontConfigPtr> ConfigData => new ImPtrVector<ImFontConfigPtr>(NativePtr->ConfigData, Unsafe.SizeOf<ImFontConfig>());

	public unsafe RangeAccessor<Vector4> TexUvLines => new RangeAccessor<Vector4>(&NativePtr->TexUvLines_0, 64);

	public unsafe IntPtr FontBuilderIO
	{
		get
		{
			return (IntPtr)NativePtr->FontBuilderIO;
		}
		set
		{
			NativePtr->FontBuilderIO = (IntPtr*)(void*)value;
		}
	}

	public unsafe ref uint FontBuilderFlags => ref Unsafe.AsRef<uint>(&NativePtr->FontBuilderFlags);

	public unsafe ref int PackIdMouseCursors => ref Unsafe.AsRef<int>(&NativePtr->PackIdMouseCursors);

	public unsafe ref int PackIdLines => ref Unsafe.AsRef<int>(&NativePtr->PackIdLines);

	public unsafe ImFontAtlasPtr(ImFontAtlas* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImFontAtlasPtr(IntPtr nativePtr)
	{
		NativePtr = (ImFontAtlas*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImFontAtlasPtr(ImFontAtlas* nativePtr)
	{
		return new ImFontAtlasPtr(nativePtr);
	}

	public unsafe static implicit operator ImFontAtlas*(ImFontAtlasPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImFontAtlasPtr(IntPtr nativePtr)
	{
		return new ImFontAtlasPtr(nativePtr);
	}

	public unsafe int AddCustomRectFontGlyph(ImFontPtr font, ushort id, int width, int height, float advance_x)
	{
		ImFont* nativePtr = font.NativePtr;
		return ImGuiNative.ImFontAtlas_AddCustomRectFontGlyph(NativePtr, nativePtr, id, width, height, advance_x, default(Vector2));
	}

	public unsafe int AddCustomRectFontGlyph(ImFontPtr font, ushort id, int width, int height, float advance_x, Vector2 offset)
	{
		ImFont* nativePtr = font.NativePtr;
		return ImGuiNative.ImFontAtlas_AddCustomRectFontGlyph(NativePtr, nativePtr, id, width, height, advance_x, offset);
	}

	public unsafe int AddCustomRectRegular(int width, int height)
	{
		return ImGuiNative.ImFontAtlas_AddCustomRectRegular(NativePtr, width, height);
	}

	public unsafe ImFontPtr AddFont(ImFontConfigPtr font_cfg)
	{
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFont(NativePtr, nativePtr));
	}

	public unsafe ImFontPtr AddFontDefault()
	{
		ImFontConfig* font_cfg = null;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontDefault(NativePtr, font_cfg));
	}

	public unsafe ImFontPtr AddFontDefault(ImFontConfigPtr font_cfg)
	{
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontDefault(NativePtr, nativePtr));
	}

	public unsafe ImFontPtr AddFontFromFileTTF(string filename, float size_pixels)
	{
		int num = 0;
		byte* ptr;
		if (filename != null)
		{
			num = Encoding.UTF8.GetByteCount(filename);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(filename, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImFontConfig* font_cfg = null;
		ushort* glyph_ranges = null;
		ImFont* nativePtr = ImGuiNative.ImFontAtlas_AddFontFromFileTTF(NativePtr, ptr, size_pixels, font_cfg, glyph_ranges);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImFontPtr(nativePtr);
	}

	public unsafe ImFontPtr AddFontFromFileTTF(string filename, float size_pixels, ImFontConfigPtr font_cfg)
	{
		int num = 0;
		byte* ptr;
		if (filename != null)
		{
			num = Encoding.UTF8.GetByteCount(filename);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(filename, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges = null;
		ImFont* nativePtr2 = ImGuiNative.ImFontAtlas_AddFontFromFileTTF(NativePtr, ptr, size_pixels, nativePtr, glyph_ranges);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImFontPtr(nativePtr2);
	}

	public unsafe ImFontPtr AddFontFromFileTTF(string filename, float size_pixels, ImFontConfigPtr font_cfg, IntPtr glyph_ranges)
	{
		int num = 0;
		byte* ptr;
		if (filename != null)
		{
			num = Encoding.UTF8.GetByteCount(filename);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(filename, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges2 = (ushort*)glyph_ranges.ToPointer();
		ImFont* nativePtr2 = ImGuiNative.ImFontAtlas_AddFontFromFileTTF(NativePtr, ptr, size_pixels, nativePtr, glyph_ranges2);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImFontPtr(nativePtr2);
	}

	public unsafe ImFontPtr AddFontFromMemoryCompressedBase85TTF(string compressed_font_data_base85, float size_pixels)
	{
		int num = 0;
		byte* ptr;
		if (compressed_font_data_base85 != null)
		{
			num = Encoding.UTF8.GetByteCount(compressed_font_data_base85);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(compressed_font_data_base85, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImFontConfig* font_cfg = null;
		ushort* glyph_ranges = null;
		ImFont* nativePtr = ImGuiNative.ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(NativePtr, ptr, size_pixels, font_cfg, glyph_ranges);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImFontPtr(nativePtr);
	}

	public unsafe ImFontPtr AddFontFromMemoryCompressedBase85TTF(string compressed_font_data_base85, float size_pixels, ImFontConfigPtr font_cfg)
	{
		int num = 0;
		byte* ptr;
		if (compressed_font_data_base85 != null)
		{
			num = Encoding.UTF8.GetByteCount(compressed_font_data_base85);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(compressed_font_data_base85, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges = null;
		ImFont* nativePtr2 = ImGuiNative.ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(NativePtr, ptr, size_pixels, nativePtr, glyph_ranges);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImFontPtr(nativePtr2);
	}

	public unsafe ImFontPtr AddFontFromMemoryCompressedBase85TTF(string compressed_font_data_base85, float size_pixels, ImFontConfigPtr font_cfg, IntPtr glyph_ranges)
	{
		int num = 0;
		byte* ptr;
		if (compressed_font_data_base85 != null)
		{
			num = Encoding.UTF8.GetByteCount(compressed_font_data_base85);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(compressed_font_data_base85, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges2 = (ushort*)glyph_ranges.ToPointer();
		ImFont* nativePtr2 = ImGuiNative.ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(NativePtr, ptr, size_pixels, nativePtr, glyph_ranges2);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImFontPtr(nativePtr2);
	}

	public unsafe ImFontPtr AddFontFromMemoryCompressedTTF(IntPtr compressed_font_data, int compressed_font_data_size, float size_pixels)
	{
		void* compressed_font_data2 = compressed_font_data.ToPointer();
		ImFontConfig* font_cfg = null;
		ushort* glyph_ranges = null;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontFromMemoryCompressedTTF(NativePtr, compressed_font_data2, compressed_font_data_size, size_pixels, font_cfg, glyph_ranges));
	}

	public unsafe ImFontPtr AddFontFromMemoryCompressedTTF(IntPtr compressed_font_data, int compressed_font_data_size, float size_pixels, ImFontConfigPtr font_cfg)
	{
		void* compressed_font_data2 = compressed_font_data.ToPointer();
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges = null;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontFromMemoryCompressedTTF(NativePtr, compressed_font_data2, compressed_font_data_size, size_pixels, nativePtr, glyph_ranges));
	}

	public unsafe ImFontPtr AddFontFromMemoryCompressedTTF(IntPtr compressed_font_data, int compressed_font_data_size, float size_pixels, ImFontConfigPtr font_cfg, IntPtr glyph_ranges)
	{
		void* compressed_font_data2 = compressed_font_data.ToPointer();
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges2 = (ushort*)glyph_ranges.ToPointer();
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontFromMemoryCompressedTTF(NativePtr, compressed_font_data2, compressed_font_data_size, size_pixels, nativePtr, glyph_ranges2));
	}

	public unsafe ImFontPtr AddFontFromMemoryTTF(IntPtr font_data, int font_data_size, float size_pixels)
	{
		void* font_data2 = font_data.ToPointer();
		ImFontConfig* font_cfg = null;
		ushort* glyph_ranges = null;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontFromMemoryTTF(NativePtr, font_data2, font_data_size, size_pixels, font_cfg, glyph_ranges));
	}

	public unsafe ImFontPtr AddFontFromMemoryTTF(IntPtr font_data, int font_data_size, float size_pixels, ImFontConfigPtr font_cfg)
	{
		void* font_data2 = font_data.ToPointer();
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges = null;
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontFromMemoryTTF(NativePtr, font_data2, font_data_size, size_pixels, nativePtr, glyph_ranges));
	}

	public unsafe ImFontPtr AddFontFromMemoryTTF(IntPtr font_data, int font_data_size, float size_pixels, ImFontConfigPtr font_cfg, IntPtr glyph_ranges)
	{
		void* font_data2 = font_data.ToPointer();
		ImFontConfig* nativePtr = font_cfg.NativePtr;
		ushort* glyph_ranges2 = (ushort*)glyph_ranges.ToPointer();
		return new ImFontPtr(ImGuiNative.ImFontAtlas_AddFontFromMemoryTTF(NativePtr, font_data2, font_data_size, size_pixels, nativePtr, glyph_ranges2));
	}

	public unsafe bool Build()
	{
		return ImGuiNative.ImFontAtlas_Build(NativePtr) != 0;
	}

	public unsafe void CalcCustomRectUV(ImFontAtlasCustomRectPtr rect, out Vector2 out_uv_min, out Vector2 out_uv_max)
	{
		ImFontAtlasCustomRect* nativePtr = rect.NativePtr;
		fixed (Vector2* out_uv_min2 = &out_uv_min)
		{
			fixed (Vector2* out_uv_max2 = &out_uv_max)
			{
				ImGuiNative.ImFontAtlas_CalcCustomRectUV(NativePtr, nativePtr, out_uv_min2, out_uv_max2);
			}
		}
	}

	public unsafe void Clear()
	{
		ImGuiNative.ImFontAtlas_Clear(NativePtr);
	}

	public unsafe void ClearFonts()
	{
		ImGuiNative.ImFontAtlas_ClearFonts(NativePtr);
	}

	public unsafe void ClearInputData()
	{
		ImGuiNative.ImFontAtlas_ClearInputData(NativePtr);
	}

	public unsafe void ClearTexData()
	{
		ImGuiNative.ImFontAtlas_ClearTexData(NativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImFontAtlas_destroy(NativePtr);
	}

	public unsafe ImFontAtlasCustomRectPtr GetCustomRectByIndex(int index)
	{
		return new ImFontAtlasCustomRectPtr(ImGuiNative.ImFontAtlas_GetCustomRectByIndex(NativePtr, index));
	}

	public unsafe IntPtr GetGlyphRangesChineseFull()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesChineseFull(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesChineseSimplifiedCommon()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesChineseSimplifiedCommon(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesCyrillic()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesCyrillic(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesDefault()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesDefault(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesGreek()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesGreek(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesJapanese()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesJapanese(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesKorean()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesKorean(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesThai()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesThai(NativePtr);
	}

	public unsafe IntPtr GetGlyphRangesVietnamese()
	{
		return (IntPtr)ImGuiNative.ImFontAtlas_GetGlyphRangesVietnamese(NativePtr);
	}

	public unsafe bool GetMouseCursorTexData(ImGuiMouseCursor cursor, out Vector2 out_offset, out Vector2 out_size, out Vector2 out_uv_border, out Vector2 out_uv_fill)
	{
		fixed (Vector2* out_offset2 = &out_offset)
		{
			fixed (Vector2* out_size2 = &out_size)
			{
				fixed (Vector2* out_uv_border2 = &out_uv_border)
				{
					fixed (Vector2* out_uv_fill2 = &out_uv_fill)
					{
						return ImGuiNative.ImFontAtlas_GetMouseCursorTexData(NativePtr, cursor, out_offset2, out_size2, out_uv_border2, out_uv_fill2) != 0;
					}
				}
			}
		}
	}

	public unsafe void GetTexDataAsAlpha8(out byte* out_pixels, out int out_width, out int out_height)
	{
		int* out_bytes_per_pixel = null;
		fixed (byte** out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					ImGuiNative.ImFontAtlas_GetTexDataAsAlpha8(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel);
				}
			}
		}
	}

	public unsafe void GetTexDataAsAlpha8(out byte* out_pixels, out int out_width, out int out_height, out int out_bytes_per_pixel)
	{
		fixed (byte** out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					fixed (int* out_bytes_per_pixel2 = &out_bytes_per_pixel)
					{
						ImGuiNative.ImFontAtlas_GetTexDataAsAlpha8(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel2);
					}
				}
			}
		}
	}

	public unsafe void GetTexDataAsAlpha8(out IntPtr out_pixels, out int out_width, out int out_height)
	{
		int* out_bytes_per_pixel = null;
		fixed (IntPtr* out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					ImGuiNative.ImFontAtlas_GetTexDataAsAlpha8(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel);
				}
			}
		}
	}

	public unsafe void GetTexDataAsAlpha8(out IntPtr out_pixels, out int out_width, out int out_height, out int out_bytes_per_pixel)
	{
		fixed (IntPtr* out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					fixed (int* out_bytes_per_pixel2 = &out_bytes_per_pixel)
					{
						ImGuiNative.ImFontAtlas_GetTexDataAsAlpha8(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel2);
					}
				}
			}
		}
	}

	public unsafe void GetTexDataAsRGBA32(out byte* out_pixels, out int out_width, out int out_height)
	{
		int* out_bytes_per_pixel = null;
		fixed (byte** out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					ImGuiNative.ImFontAtlas_GetTexDataAsRGBA32(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel);
				}
			}
		}
	}

	public unsafe void GetTexDataAsRGBA32(out byte* out_pixels, out int out_width, out int out_height, out int out_bytes_per_pixel)
	{
		fixed (byte** out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					fixed (int* out_bytes_per_pixel2 = &out_bytes_per_pixel)
					{
						ImGuiNative.ImFontAtlas_GetTexDataAsRGBA32(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel2);
					}
				}
			}
		}
	}

	public unsafe void GetTexDataAsRGBA32(out IntPtr out_pixels, out int out_width, out int out_height)
	{
		int* out_bytes_per_pixel = null;
		fixed (IntPtr* out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					ImGuiNative.ImFontAtlas_GetTexDataAsRGBA32(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel);
				}
			}
		}
	}

	public unsafe void GetTexDataAsRGBA32(out IntPtr out_pixels, out int out_width, out int out_height, out int out_bytes_per_pixel)
	{
		fixed (IntPtr* out_pixels2 = &out_pixels)
		{
			fixed (int* out_width2 = &out_width)
			{
				fixed (int* out_height2 = &out_height)
				{
					fixed (int* out_bytes_per_pixel2 = &out_bytes_per_pixel)
					{
						ImGuiNative.ImFontAtlas_GetTexDataAsRGBA32(NativePtr, out_pixels2, out_width2, out_height2, out_bytes_per_pixel2);
					}
				}
			}
		}
	}

	public unsafe bool IsBuilt()
	{
		return ImGuiNative.ImFontAtlas_IsBuilt(NativePtr) != 0;
	}

	public unsafe void SetTexID(IntPtr id)
	{
		ImGuiNative.ImFontAtlas_SetTexID(NativePtr, id);
	}
}
public struct ImFontAtlasCustomRect
{
	public ushort Width;

	public ushort Height;

	public ushort X;

	public ushort Y;

	public uint GlyphID;

	public float GlyphAdvanceX;

	public Vector2 GlyphOffset;

	public unsafe ImFont* Font;
}
public struct ImFontAtlasCustomRectPtr
{
	public unsafe ImFontAtlasCustomRect* NativePtr { get; }

	public unsafe ref ushort Width => ref Unsafe.AsRef<ushort>(&NativePtr->Width);

	public unsafe ref ushort Height => ref Unsafe.AsRef<ushort>(&NativePtr->Height);

	public unsafe ref ushort X => ref Unsafe.AsRef<ushort>(&NativePtr->X);

	public unsafe ref ushort Y => ref Unsafe.AsRef<ushort>(&NativePtr->Y);

	public unsafe ref uint GlyphID => ref Unsafe.AsRef<uint>(&NativePtr->GlyphID);

	public unsafe ref float GlyphAdvanceX => ref Unsafe.AsRef<float>(&NativePtr->GlyphAdvanceX);

	public unsafe ref Vector2 GlyphOffset => ref Unsafe.AsRef<Vector2>(&NativePtr->GlyphOffset);

	public unsafe ImFontPtr Font => new ImFontPtr(NativePtr->Font);

	public unsafe ImFontAtlasCustomRectPtr(ImFontAtlasCustomRect* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImFontAtlasCustomRectPtr(IntPtr nativePtr)
	{
		NativePtr = (ImFontAtlasCustomRect*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImFontAtlasCustomRectPtr(ImFontAtlasCustomRect* nativePtr)
	{
		return new ImFontAtlasCustomRectPtr(nativePtr);
	}

	public unsafe static implicit operator ImFontAtlasCustomRect*(ImFontAtlasCustomRectPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImFontAtlasCustomRectPtr(IntPtr nativePtr)
	{
		return new ImFontAtlasCustomRectPtr(nativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImFontAtlasCustomRect_destroy(NativePtr);
	}

	public unsafe bool IsPacked()
	{
		return ImGuiNative.ImFontAtlasCustomRect_IsPacked(NativePtr) != 0;
	}
}
[Flags]
public enum ImFontAtlasFlags
{
	None = 0,
	NoPowerOfTwoHeight = 1,
	NoMouseCursors = 2,
	NoBakedLines = 4
}
public struct ImFontConfig
{
	public unsafe void* FontData;

	public int FontDataSize;

	public byte FontDataOwnedByAtlas;

	public int FontNo;

	public float SizePixels;

	public int OversampleH;

	public int OversampleV;

	public byte PixelSnapH;

	public Vector2 GlyphExtraSpacing;

	public Vector2 GlyphOffset;

	public unsafe ushort* GlyphRanges;

	public float GlyphMinAdvanceX;

	public float GlyphMaxAdvanceX;

	public byte MergeMode;

	public uint FontBuilderFlags;

	public float RasterizerMultiply;

	public float RasterizerDensity;

	public ushort EllipsisChar;

	public unsafe fixed byte Name[40];

	public unsafe ImFont* DstFont;
}
public struct ImFontConfigPtr
{
	public unsafe ImFontConfig* NativePtr { get; }

	public unsafe IntPtr FontData
	{
		get
		{
			return (IntPtr)NativePtr->FontData;
		}
		set
		{
			NativePtr->FontData = (void*)value;
		}
	}

	public unsafe ref int FontDataSize => ref Unsafe.AsRef<int>(&NativePtr->FontDataSize);

	public unsafe ref bool FontDataOwnedByAtlas => ref Unsafe.AsRef<bool>(&NativePtr->FontDataOwnedByAtlas);

	public unsafe ref int FontNo => ref Unsafe.AsRef<int>(&NativePtr->FontNo);

	public unsafe ref float SizePixels => ref Unsafe.AsRef<float>(&NativePtr->SizePixels);

	public unsafe ref int OversampleH => ref Unsafe.AsRef<int>(&NativePtr->OversampleH);

	public unsafe ref int OversampleV => ref Unsafe.AsRef<int>(&NativePtr->OversampleV);

	public unsafe ref bool PixelSnapH => ref Unsafe.AsRef<bool>(&NativePtr->PixelSnapH);

	public unsafe ref Vector2 GlyphExtraSpacing => ref Unsafe.AsRef<Vector2>(&NativePtr->GlyphExtraSpacing);

	public unsafe ref Vector2 GlyphOffset => ref Unsafe.AsRef<Vector2>(&NativePtr->GlyphOffset);

	public unsafe IntPtr GlyphRanges
	{
		get
		{
			return (IntPtr)NativePtr->GlyphRanges;
		}
		set
		{
			NativePtr->GlyphRanges = (ushort*)(void*)value;
		}
	}

	public unsafe ref float GlyphMinAdvanceX => ref Unsafe.AsRef<float>(&NativePtr->GlyphMinAdvanceX);

	public unsafe ref float GlyphMaxAdvanceX => ref Unsafe.AsRef<float>(&NativePtr->GlyphMaxAdvanceX);

	public unsafe ref bool MergeMode => ref Unsafe.AsRef<bool>(&NativePtr->MergeMode);

	public unsafe ref uint FontBuilderFlags => ref Unsafe.AsRef<uint>(&NativePtr->FontBuilderFlags);

	public unsafe ref float RasterizerMultiply => ref Unsafe.AsRef<float>(&NativePtr->RasterizerMultiply);

	public unsafe ref float RasterizerDensity => ref Unsafe.AsRef<float>(&NativePtr->RasterizerDensity);

	public unsafe ref ushort EllipsisChar => ref Unsafe.AsRef<ushort>(&NativePtr->EllipsisChar);

	public unsafe RangeAccessor<byte> Name => new RangeAccessor<byte>(NativePtr->Name, 40);

	public unsafe ImFontPtr DstFont => new ImFontPtr(NativePtr->DstFont);

	public unsafe ImFontConfigPtr(ImFontConfig* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImFontConfigPtr(IntPtr nativePtr)
	{
		NativePtr = (ImFontConfig*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImFontConfigPtr(ImFontConfig* nativePtr)
	{
		return new ImFontConfigPtr(nativePtr);
	}

	public unsafe static implicit operator ImFontConfig*(ImFontConfigPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImFontConfigPtr(IntPtr nativePtr)
	{
		return new ImFontConfigPtr(nativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImFontConfig_destroy(NativePtr);
	}
}
public struct ImFontGlyph
{
	public uint Colored;

	public uint Visible;

	public uint Codepoint;

	public float AdvanceX;

	public float X0;

	public float Y0;

	public float X1;

	public float Y1;

	public float U0;

	public float V0;

	public float U1;

	public float V1;
}
public struct ImFontGlyphPtr
{
	public unsafe ImFontGlyph* NativePtr { get; }

	public unsafe ref uint Colored => ref Unsafe.AsRef<uint>(&NativePtr->Colored);

	public unsafe ref uint Visible => ref Unsafe.AsRef<uint>(&NativePtr->Visible);

	public unsafe ref uint Codepoint => ref Unsafe.AsRef<uint>(&NativePtr->Codepoint);

	public unsafe ref float AdvanceX => ref Unsafe.AsRef<float>(&NativePtr->AdvanceX);

	public unsafe ref float X0 => ref Unsafe.AsRef<float>(&NativePtr->X0);

	public unsafe ref float Y0 => ref Unsafe.AsRef<float>(&NativePtr->Y0);

	public unsafe ref float X1 => ref Unsafe.AsRef<float>(&NativePtr->X1);

	public unsafe ref float Y1 => ref Unsafe.AsRef<float>(&NativePtr->Y1);

	public unsafe ref float U0 => ref Unsafe.AsRef<float>(&NativePtr->U0);

	public unsafe ref float V0 => ref Unsafe.AsRef<float>(&NativePtr->V0);

	public unsafe ref float U1 => ref Unsafe.AsRef<float>(&NativePtr->U1);

	public unsafe ref float V1 => ref Unsafe.AsRef<float>(&NativePtr->V1);

	public unsafe ImFontGlyphPtr(ImFontGlyph* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImFontGlyphPtr(IntPtr nativePtr)
	{
		NativePtr = (ImFontGlyph*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImFontGlyphPtr(ImFontGlyph* nativePtr)
	{
		return new ImFontGlyphPtr(nativePtr);
	}

	public unsafe static implicit operator ImFontGlyph*(ImFontGlyphPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImFontGlyphPtr(IntPtr nativePtr)
	{
		return new ImFontGlyphPtr(nativePtr);
	}
}
public struct ImFontGlyphRangesBuilder
{
	public ImVector UsedChars;
}
public struct ImFontGlyphRangesBuilderPtr
{
	public unsafe ImFontGlyphRangesBuilder* NativePtr { get; }

	public unsafe ImVector<uint> UsedChars => new ImVector<uint>(NativePtr->UsedChars);

	public unsafe ImFontGlyphRangesBuilderPtr(ImFontGlyphRangesBuilder* nativePtr)
	{
		NativePtr = nativePtr;
	}

	public unsafe ImFontGlyphRangesBuilderPtr(IntPtr nativePtr)
	{
		NativePtr = (ImFontGlyphRangesBuilder*)(void*)nativePtr;
	}

	public unsafe static implicit operator ImFontGlyphRangesBuilderPtr(ImFontGlyphRangesBuilder* nativePtr)
	{
		return new ImFontGlyphRangesBuilderPtr(nativePtr);
	}

	public unsafe static implicit operator ImFontGlyphRangesBuilder*(ImFontGlyphRangesBuilderPtr wrappedPtr)
	{
		return wrappedPtr.NativePtr;
	}

	public static implicit operator ImFontGlyphRangesBuilderPtr(IntPtr nativePtr)
	{
		return new ImFontGlyphRangesBuilderPtr(nativePtr);
	}

	public unsafe void AddChar(ushort c)
	{
		ImGuiNative.ImFontGlyphRangesBuilder_AddChar(NativePtr, c);
	}

	public unsafe void AddRanges(IntPtr ranges)
	{
		ushort* ranges2 = (ushort*)ranges.ToPointer();
		ImGuiNative.ImFontGlyphRangesBuilder_AddRanges(NativePtr, ranges2);
	}

	public unsafe void AddText(string text)
	{
		int num = 0;
		byte* ptr;
		if (text != null)
		{
			num = Encoding.UTF8.GetByteCount(text);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(text, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiNative.ImFontGlyphRangesBuilder_AddText(NativePtr, ptr, ptr + num);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe void BuildRanges(out ImVector out_ranges)
	{
		fixed (ImVector* out_ranges2 = &out_ranges)
		{
			ImGuiNative.ImFontGlyphRangesBuilder_BuildRanges(NativePtr, out_ranges2);
		}
	}

	public unsafe void Clear()
	{
		ImGuiNative.ImFontGlyphRangesBuilder_Clear(NativePtr);
	}

	public unsafe void Destroy()
	{
		ImGuiNative.ImFontGlyphRangesBuilder_destroy(NativePtr);
	}

	public unsafe bool GetBit(uint n)
	{
		return ImGuiNative.ImFontGlyphRangesBuilder_GetBit(NativePtr, n) != 0;
	}

	public unsafe void SetBit(uint n)
	{
		ImGuiNative.ImFontGlyphRangesBuilder_SetBit(NativePtr, n);
	}
}
public static class ImGui
{
	public unsafe static ImGuiPayloadPtr AcceptDragDropPayload(string type)
	{
		int num = 0;
		byte* ptr;
		if (type != null)
		{
			num = Encoding.UTF8.GetByteCount(type);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(type, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiDragDropFlags flags = ImGuiDragDropFlags.None;
		ImGuiPayload* nativePtr = ImGuiNative.igAcceptDragDropPayload(ptr, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImGuiPayloadPtr(nativePtr);
	}

	public unsafe static ImGuiPayloadPtr AcceptDragDropPayload(string type, ImGuiDragDropFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (type != null)
		{
			num = Encoding.UTF8.GetByteCount(type);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(type, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiPayload* nativePtr = ImGuiNative.igAcceptDragDropPayload(ptr, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return new ImGuiPayloadPtr(nativePtr);
	}

	public static void AlignTextToFramePadding()
	{
		ImGuiNative.igAlignTextToFramePadding();
	}

	public unsafe static bool ArrowButton(string str_id, ImGuiDir dir)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igArrowButton(ptr, dir);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool Begin(string name)
	{
		int num = 0;
		byte* ptr;
		if (name != null)
		{
			num = Encoding.UTF8.GetByteCount(name);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(name, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte* p_open = null;
		ImGuiWindowFlags flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBegin(ptr, p_open, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool Begin(string name, ref bool p_open)
	{
		int num = 0;
		byte* ptr;
		if (name != null)
		{
			num = Encoding.UTF8.GetByteCount(name);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(name, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte b = (p_open ? ((byte)1) : ((byte)0));
		byte* p_open2 = &b;
		ImGuiWindowFlags flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBegin(ptr, p_open2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		p_open = b != 0;
		return num2 != 0;
	}

	public unsafe static bool Begin(string name, ref bool p_open, ImGuiWindowFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (name != null)
		{
			num = Encoding.UTF8.GetByteCount(name);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(name, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte b = (p_open ? ((byte)1) : ((byte)0));
		byte* p_open2 = &b;
		byte num2 = ImGuiNative.igBegin(ptr, p_open2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		p_open = b != 0;
		return num2 != 0;
	}

	public unsafe static bool BeginChild(string str_id)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		Vector2 size = default(Vector2);
		ImGuiChildFlags child_flags = ImGuiChildFlags.None;
		ImGuiWindowFlags window_flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBeginChild_Str(ptr, size, child_flags, window_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginChild(string str_id, Vector2 size)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiChildFlags child_flags = ImGuiChildFlags.None;
		ImGuiWindowFlags window_flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBeginChild_Str(ptr, size, child_flags, window_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginChild(string str_id, Vector2 size, ImGuiChildFlags child_flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiWindowFlags window_flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBeginChild_Str(ptr, size, child_flags, window_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginChild(string str_id, Vector2 size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginChild_Str(ptr, size, child_flags, window_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public static bool BeginChild(uint id)
	{
		Vector2 size = default(Vector2);
		ImGuiChildFlags child_flags = ImGuiChildFlags.None;
		ImGuiWindowFlags window_flags = ImGuiWindowFlags.None;
		return ImGuiNative.igBeginChild_ID(id, size, child_flags, window_flags) != 0;
	}

	public static bool BeginChild(uint id, Vector2 size)
	{
		ImGuiChildFlags child_flags = ImGuiChildFlags.None;
		ImGuiWindowFlags window_flags = ImGuiWindowFlags.None;
		return ImGuiNative.igBeginChild_ID(id, size, child_flags, window_flags) != 0;
	}

	public static bool BeginChild(uint id, Vector2 size, ImGuiChildFlags child_flags)
	{
		ImGuiWindowFlags window_flags = ImGuiWindowFlags.None;
		return ImGuiNative.igBeginChild_ID(id, size, child_flags, window_flags) != 0;
	}

	public static bool BeginChild(uint id, Vector2 size, ImGuiChildFlags child_flags, ImGuiWindowFlags window_flags)
	{
		return ImGuiNative.igBeginChild_ID(id, size, child_flags, window_flags) != 0;
	}

	public unsafe static bool BeginCombo(string label, string preview_value)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		int num2 = 0;
		byte* ptr2;
		if (preview_value != null)
		{
			num2 = Encoding.UTF8.GetByteCount(preview_value);
			ptr2 = ((num2 <= 2048) ? stackalloc byte[(int)(uint)(num2 + 1)] : Util.Allocate(num2 + 1));
			int utf2 = Util.GetUtf8(preview_value, ptr2, num2);
			ptr2[utf2] = 0;
		}
		else
		{
			ptr2 = null;
		}
		ImGuiComboFlags flags = ImGuiComboFlags.None;
		byte num3 = ImGuiNative.igBeginCombo(ptr, ptr2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		if (num2 > 2048)
		{
			Util.Free(ptr2);
		}
		return num3 != 0;
	}

	public unsafe static bool BeginCombo(string label, string preview_value, ImGuiComboFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		int num2 = 0;
		byte* ptr2;
		if (preview_value != null)
		{
			num2 = Encoding.UTF8.GetByteCount(preview_value);
			ptr2 = ((num2 <= 2048) ? stackalloc byte[(int)(uint)(num2 + 1)] : Util.Allocate(num2 + 1));
			int utf2 = Util.GetUtf8(preview_value, ptr2, num2);
			ptr2[utf2] = 0;
		}
		else
		{
			ptr2 = null;
		}
		byte num3 = ImGuiNative.igBeginCombo(ptr, ptr2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		if (num2 > 2048)
		{
			Util.Free(ptr2);
		}
		return num3 != 0;
	}

	public static void BeginDisabled()
	{
		ImGuiNative.igBeginDisabled(1);
	}

	public static void BeginDisabled(bool disabled)
	{
		ImGuiNative.igBeginDisabled(disabled ? ((byte)1) : ((byte)0));
	}

	public static bool BeginDragDropSource()
	{
		return ImGuiNative.igBeginDragDropSource(ImGuiDragDropFlags.None) != 0;
	}

	public static bool BeginDragDropSource(ImGuiDragDropFlags flags)
	{
		return ImGuiNative.igBeginDragDropSource(flags) != 0;
	}

	public static bool BeginDragDropTarget()
	{
		return ImGuiNative.igBeginDragDropTarget() != 0;
	}

	public static void BeginGroup()
	{
		ImGuiNative.igBeginGroup();
	}

	public static bool BeginItemTooltip()
	{
		return ImGuiNative.igBeginItemTooltip() != 0;
	}

	public unsafe static bool BeginListBox(string label)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginListBox(ptr, default(Vector2));
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginListBox(string label, Vector2 size)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginListBox(ptr, size);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public static bool BeginMainMenuBar()
	{
		return ImGuiNative.igBeginMainMenuBar() != 0;
	}

	public unsafe static bool BeginMenu(string label)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte enabled = 1;
		byte num2 = ImGuiNative.igBeginMenu(ptr, enabled);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginMenu(string label, bool enabled)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte enabled2 = (enabled ? ((byte)1) : ((byte)0));
		byte num2 = ImGuiNative.igBeginMenu(ptr, enabled2);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public static bool BeginMenuBar()
	{
		return ImGuiNative.igBeginMenuBar() != 0;
	}

	public unsafe static bool BeginPopup(string str_id)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiWindowFlags flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBeginPopup(ptr, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopup(string str_id, ImGuiWindowFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginPopup(ptr, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupContextItem()
	{
		byte* str_id = null;
		ImGuiPopupFlags popup_flags = ImGuiPopupFlags.MouseButtonRight;
		return ImGuiNative.igBeginPopupContextItem(str_id, popup_flags) != 0;
	}

	public unsafe static bool BeginPopupContextItem(string str_id)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiPopupFlags popup_flags = ImGuiPopupFlags.MouseButtonRight;
		byte num2 = ImGuiNative.igBeginPopupContextItem(ptr, popup_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupContextItem(string str_id, ImGuiPopupFlags popup_flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginPopupContextItem(ptr, popup_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupContextVoid()
	{
		byte* str_id = null;
		ImGuiPopupFlags popup_flags = ImGuiPopupFlags.MouseButtonRight;
		return ImGuiNative.igBeginPopupContextVoid(str_id, popup_flags) != 0;
	}

	public unsafe static bool BeginPopupContextVoid(string str_id)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiPopupFlags popup_flags = ImGuiPopupFlags.MouseButtonRight;
		byte num2 = ImGuiNative.igBeginPopupContextVoid(ptr, popup_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupContextVoid(string str_id, ImGuiPopupFlags popup_flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginPopupContextVoid(ptr, popup_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupContextWindow()
	{
		byte* str_id = null;
		ImGuiPopupFlags popup_flags = ImGuiPopupFlags.MouseButtonRight;
		return ImGuiNative.igBeginPopupContextWindow(str_id, popup_flags) != 0;
	}

	public unsafe static bool BeginPopupContextWindow(string str_id)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiPopupFlags popup_flags = ImGuiPopupFlags.MouseButtonRight;
		byte num2 = ImGuiNative.igBeginPopupContextWindow(ptr, popup_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupContextWindow(string str_id, ImGuiPopupFlags popup_flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginPopupContextWindow(ptr, popup_flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupModal(string name)
	{
		int num = 0;
		byte* ptr;
		if (name != null)
		{
			num = Encoding.UTF8.GetByteCount(name);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(name, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte* p_open = null;
		ImGuiWindowFlags flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBeginPopupModal(ptr, p_open, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginPopupModal(string name, ref bool p_open)
	{
		int num = 0;
		byte* ptr;
		if (name != null)
		{
			num = Encoding.UTF8.GetByteCount(name);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(name, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte b = (p_open ? ((byte)1) : ((byte)0));
		byte* p_open2 = &b;
		ImGuiWindowFlags flags = ImGuiWindowFlags.None;
		byte num2 = ImGuiNative.igBeginPopupModal(ptr, p_open2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		p_open = b != 0;
		return num2 != 0;
	}

	public unsafe static bool BeginPopupModal(string name, ref bool p_open, ImGuiWindowFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (name != null)
		{
			num = Encoding.UTF8.GetByteCount(name);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(name, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte b = (p_open ? ((byte)1) : ((byte)0));
		byte* p_open2 = &b;
		byte num2 = ImGuiNative.igBeginPopupModal(ptr, p_open2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		p_open = b != 0;
		return num2 != 0;
	}

	public unsafe static bool BeginTabBar(string str_id)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiTabBarFlags flags = ImGuiTabBarFlags.None;
		byte num2 = ImGuiNative.igBeginTabBar(ptr, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginTabBar(string str_id, ImGuiTabBarFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginTabBar(ptr, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginTabItem(string label)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte* p_open = null;
		ImGuiTabItemFlags flags = ImGuiTabItemFlags.None;
		byte num2 = ImGuiNative.igBeginTabItem(ptr, p_open, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginTabItem(string label, ref bool p_open)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte b = (p_open ? ((byte)1) : ((byte)0));
		byte* p_open2 = &b;
		ImGuiTabItemFlags flags = ImGuiTabItemFlags.None;
		byte num2 = ImGuiNative.igBeginTabItem(ptr, p_open2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		p_open = b != 0;
		return num2 != 0;
	}

	public unsafe static bool BeginTabItem(string label, ref bool p_open, ImGuiTabItemFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte b = (p_open ? ((byte)1) : ((byte)0));
		byte* p_open2 = &b;
		byte num2 = ImGuiNative.igBeginTabItem(ptr, p_open2, flags);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		p_open = b != 0;
		return num2 != 0;
	}

	public unsafe static bool BeginTable(string str_id, int column)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiTableFlags flags = ImGuiTableFlags.None;
		Vector2 outer_size = default(Vector2);
		float inner_width = 0f;
		byte num2 = ImGuiNative.igBeginTable(ptr, column, flags, outer_size, inner_width);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginTable(string str_id, int column, ImGuiTableFlags flags)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		Vector2 outer_size = default(Vector2);
		float inner_width = 0f;
		byte num2 = ImGuiNative.igBeginTable(ptr, column, flags, outer_size, inner_width);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginTable(string str_id, int column, ImGuiTableFlags flags, Vector2 outer_size)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		float inner_width = 0f;
		byte num2 = ImGuiNative.igBeginTable(ptr, column, flags, outer_size, inner_width);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool BeginTable(string str_id, int column, ImGuiTableFlags flags, Vector2 outer_size, float inner_width)
	{
		int num = 0;
		byte* ptr;
		if (str_id != null)
		{
			num = Encoding.UTF8.GetByteCount(str_id);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(str_id, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igBeginTable(ptr, column, flags, outer_size, inner_width);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public static bool BeginTooltip()
	{
		return ImGuiNative.igBeginTooltip() != 0;
	}

	public static void Bullet()
	{
		ImGuiNative.igBullet();
	}

	public unsafe static void BulletText(string fmt)
	{
		int num = 0;
		byte* ptr;
		if (fmt != null)
		{
			num = Encoding.UTF8.GetByteCount(fmt);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(fmt, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		ImGuiNative.igBulletText(ptr);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
	}

	public unsafe static bool Button(string label)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igButton(ptr, default(Vector2));
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public unsafe static bool Button(string label, Vector2 size)
	{
		int num = 0;
		byte* ptr;
		if (label != null)
		{
			num = Encoding.UTF8.GetByteCount(label);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(label, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte num2 = ImGuiNative.igButton(ptr, size);
		if (num > 2048)
		{
			Util.Free(ptr);
		}
		return num2 != 0;
	}

	public static float CalcItemWidth()
	{
		return ImGuiNative.igCalcItemWidth();
	}

	public unsafe static Vector2 CalcTextSize(string text)
	{
		int num = 0;
		byte* ptr;
		if (text != null)
		{
			num = Encoding.UTF8.GetByteCount(text);
			ptr = ((num <= 2048) ? stackalloc byte[(int)(uint)(num + 1)] : Util.Allocate(num + 1));
			int utf = Util.GetUtf8(text, ptr, num);
			ptr[utf] = 0;
		}
		else
		{
			ptr = null;
		}
		byte hide_text_after_double_hash = 0;
		float wrap_width = -1f;
		Vector2 result = default(Vector2);
		ImGuiNative.igCalcTextSize(&result, ptr, ptr + num, hide_text_after_double_hash, wrap_wid

plugins/OverlayDearImGui.Shared/SharpDX.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq.Expressions;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using SharpDX;
using SharpDX.Collections;
using SharpDX.Diagnostics;
using SharpDX.Direct3D;
using SharpDX.Mathematics.Interop;

[assembly: InternalsVisibleTo("SharpDX.DirectSound")]
[assembly: InternalsVisibleTo("SharpDX.RawInput")]
[assembly: InternalsVisibleTo("SharpDX.DirectInput")]
[assembly: InternalsVisibleTo("SharpDX.Direct2D1")]
[assembly: InternalsVisibleTo("SharpDX.Direct3D11.Effects")]
[assembly: InternalsVisibleTo("SharpDX.Direct3D12")]
[assembly: InternalsVisibleTo("SharpDX.XAPO")]
[assembly: InternalsVisibleTo("SharpDX.Direct3D11")]
[assembly: InternalsVisibleTo("SharpDX.Direct3D9")]
[assembly: InternalsVisibleTo("SharpDX.Desktop")]
[assembly: InternalsVisibleTo("SharpDX.D3DCompiler")]
[assembly: InternalsVisibleTo("SharpDX.DXGI")]
[assembly: InternalsVisibleTo("SharpDX.Animation")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("SharpDX.Direct3D10")]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: InternalsVisibleTo("SharpDX.XAudio2")]
[assembly: InternalsVisibleTo("SharpDX.WIC")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/xiaoxiao921/SharpDX")]
[assembly: AssemblyTitle("SharpDX")]
[assembly: AssemblyProduct("SharpDX")]
[assembly: AssemblyDescription("Core assembly for all SharpDX assemblies.")]
[assembly: AssemblyCopyright("Copyright (c) 2010-2016 Alexandre Mutel")]
[assembly: AssemblyConfiguration("Release")]
[assembly: InternalsVisibleTo("SharpDX.XACT3")]
[assembly: AssemblyCompany("Alexandre Mutel")]
[assembly: AssemblyInformationalVersion("4.2.1-beta0+7abb72df54")]
[assembly: AssemblyFileVersion("4.2.1.34")]
[assembly: ComVisible(false)]
[assembly: InternalsVisibleTo("SharpDX.DirectManipulation")]
[assembly: InternalsVisibleTo("SharpDX.DirectComposition")]
[assembly: InternalsVisibleTo("SharpDX.MediaFoundation")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("4.2.0.0")]
[module: UnverifiableCode]
internal class <Module>
{
	static <Module>()
	{
		Interop.ModuleInit();
		ModuleInit.Setup();
	}
}
internal sealed class ThisAssembly
{
	internal const string AssemblyVersion = "4.2.0.0";

	internal const string AssemblyFileVersion = "4.2.1.34";

	internal const string AssemblyInformationalVersion = "4.2.1-beta0+7abb72df54";

	internal const string AssemblyName = "SharpDX";

	internal const string AssemblyTitle = "SharpDX";

	internal const string AssemblyConfiguration = "Release";

	internal const string GitCommitId = "7abb72df544eaede656c546ee71a8ad1be9dd19b";

	internal const string RootNamespace = "SharpDX";

	private ThisAssembly()
	{
	}
}
namespace SharpDX
{
	[CompilerGenerated]
	internal class AssemblyDoc
	{
	}
	public abstract class CallbackBase : DisposeBase, ICallbackable, IDisposable
	{
		private int refCount = 1;

		IDisposable ICallbackable.Shadow { get; set; }

		protected override void Dispose(bool disposing)
		{
			if (disposing)
			{
				Release();
			}
		}

		public int AddReference()
		{
			int num = refCount;
			while (true)
			{
				if (num == 0)
				{
					throw new ObjectDisposedException("Cannot add a reference to a nonreferenced item");
				}
				int num2 = Interlocked.CompareExchange(ref refCount, num + 1, num);
				if (num2 == num)
				{
					break;
				}
				num = num2;
			}
			return num + 1;
		}

		public int Release()
		{
			int num = refCount;
			while (true)
			{
				int num2 = Interlocked.CompareExchange(ref refCount, num - 1, num);
				if (num2 == num)
				{
					break;
				}
				num = num2;
			}
			if (num == 1)
			{
				((ICallbackable)this).Shadow.Dispose();
				((ICallbackable)this).Shadow = null;
			}
			return num - 1;
		}

		public Result QueryInterface(ref Guid guid, out IntPtr comObject)
		{
			ShadowContainer shadowContainer = (ShadowContainer)((ICallbackable)this).Shadow;
			comObject = shadowContainer.Find(guid);
			if (comObject == IntPtr.Zero)
			{
				return Result.NoInterface;
			}
			return Result.Ok;
		}
	}
	public class ComArray : DisposeBase, IEnumerable
	{
		protected ComObject[] values;

		private IntPtr nativeBuffer;

		public IntPtr NativePointer => nativeBuffer;

		public int Length
		{
			get
			{
				if (values != null)
				{
					return values.Length;
				}
				return 0;
			}
		}

		public ComArray(params ComObject[] array)
		{
			values = array;
			nativeBuffer = IntPtr.Zero;
			if (values != null)
			{
				int num = array.Length;
				values = new ComObject[num];
				nativeBuffer = Utilities.AllocateMemory(num * Utilities.SizeOf<IntPtr>());
				for (int i = 0; i < num; i++)
				{
					Set(i, array[i]);
				}
			}
		}

		public ComArray(int size)
		{
			values = new ComObject[size];
			nativeBuffer = Utilities.AllocateMemory(size * Utilities.SizeOf<IntPtr>());
		}

		public ComObject Get(int index)
		{
			return values[index];
		}

		internal unsafe void SetFromNative(int index, ComObject value)
		{
			values[index] = value;
			value.NativePointer = *(IntPtr*)((byte*)(void*)nativeBuffer + (nint)index * (nint)sizeof(IntPtr));
		}

		public unsafe void Set(int index, ComObject value)
		{
			values[index] = value;
			*(IntPtr*)((byte*)(void*)nativeBuffer + (nint)index * (nint)sizeof(IntPtr)) = value.NativePointer;
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing)
			{
				values = null;
			}
			Utilities.FreeMemory(nativeBuffer);
			nativeBuffer = IntPtr.Zero;
		}

		public IEnumerator GetEnumerator()
		{
			return values.GetEnumerator();
		}
	}
	public class ComArray<T> : ComArray, IEnumerable<T>, IEnumerable where T : ComObject
	{
		private struct ArrayEnumerator<T1> : IEnumerator<T1>, IEnumerator, IDisposable where T1 : ComObject
		{
			private readonly IEnumerator enumerator;

			public T1 Current => (T1)enumerator.Current;

			object IEnumerator.Current => Current;

			public ArrayEnumerator(IEnumerator enumerator)
			{
				this.enumerator = enumerator;
			}

			public void Dispose()
			{
			}

			public bool MoveNext()
			{
				return enumerator.MoveNext();
			}

			public void Reset()
			{
				enumerator.Reset();
			}
		}

		public T this[int i]
		{
			get
			{
				return (T)Get(i);
			}
			set
			{
				Set(i, value);
			}
		}

		public ComArray(params T[] array)
			: base(array)
		{
		}

		public ComArray(int size)
			: base(size)
		{
		}

		public new IEnumerator<T> GetEnumerator()
		{
			return new ArrayEnumerator<T>(values.GetEnumerator());
		}
	}
	[Guid("00000000-0000-0000-C000-000000000046")]
	public class ComObject : CppObject, IUnknown, ICallbackable, IDisposable
	{
		public static Action<string> LogMemoryLeakWarning = delegate
		{
		};

		public ComObject(object iunknowObject)
		{
			base.NativePointer = Marshal.GetIUnknownForObject(iunknowObject);
		}

		protected ComObject()
		{
		}

		public virtual void QueryInterface(Guid guid, out IntPtr outPtr)
		{
			((IUnknown)this).QueryInterface(ref guid, out outPtr).CheckError();
		}

		public virtual IntPtr QueryInterfaceOrNull(Guid guid)
		{
			IntPtr comObject = IntPtr.Zero;
			((IUnknown)this).QueryInterface(ref guid, out comObject);
			return comObject;
		}

		public static bool EqualsComObject<T>(T left, T right) where T : ComObject
		{
			if (object.Equals(left, right))
			{
				return true;
			}
			if (left == null || right == null)
			{
				return false;
			}
			return left.NativePointer == right.NativePointer;
		}

		public virtual T QueryInterface<T>() where T : ComObject
		{
			QueryInterface(Utilities.GetGuidFromType(typeof(T)), out var outPtr);
			return CppObject.FromPointer<T>(outPtr);
		}

		internal virtual T QueryInterfaceUnsafe<T>()
		{
			QueryInterface(Utilities.GetGuidFromType(typeof(T)), out var outPtr);
			return CppObject.FromPointerUnsafe<T>(outPtr);
		}

		public static T As<T>(object comObject) where T : ComObject
		{
			using ComObject comObject2 = new ComObject(Marshal.GetIUnknownForObject(comObject));
			return comObject2.QueryInterface<T>();
		}

		public static T As<T>(IntPtr iunknownPtr) where T : ComObject
		{
			using ComObject comObject = new ComObject(iunknownPtr);
			return comObject.QueryInterface<T>();
		}

		internal static T AsUnsafe<T>(IntPtr iunknownPtr)
		{
			using ComObject comObject = new ComObject(iunknownPtr);
			return comObject.QueryInterfaceUnsafe<T>();
		}

		public static T QueryInterface<T>(object comObject) where T : ComObject
		{
			using ComObject comObject2 = new ComObject(Marshal.GetIUnknownForObject(comObject));
			return comObject2.QueryInterface<T>();
		}

		public static T QueryInterfaceOrNull<T>(IntPtr comPointer) where T : ComObject
		{
			if (comPointer == IntPtr.Zero)
			{
				return null;
			}
			Guid iid = Utilities.GetGuidFromType(typeof(T));
			if (!((Result)Marshal.QueryInterface(comPointer, ref iid, out var ppv)).Failure)
			{
				return CppObject.FromPointerUnsafe<T>(ppv);
			}
			return null;
		}

		public virtual T QueryInterfaceOrNull<T>() where T : ComObject
		{
			return CppObject.FromPointer<T>(QueryInterfaceOrNull(Utilities.GetGuidFromType(typeof(T))));
		}

		protected void QueryInterfaceFrom<T>(T fromObject) where T : ComObject
		{
			fromObject.QueryInterface(Utilities.GetGuidFromType(GetType()), out var outPtr);
			base.NativePointer = outPtr;
		}

		Result IUnknown.QueryInterface(ref Guid guid, out IntPtr comObject)
		{
			return Marshal.QueryInterface(base.NativePointer, ref guid, out comObject);
		}

		int IUnknown.AddReference()
		{
			if (base.NativePointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("COM Object pointer is null");
			}
			return Marshal.AddRef(base.NativePointer);
		}

		int IUnknown.Release()
		{
			if (base.NativePointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("COM Object pointer is null");
			}
			return Marshal.Release(base.NativePointer);
		}

		protected unsafe override void Dispose(bool disposing)
		{
			if (base.NativePointer != IntPtr.Zero)
			{
				if (!disposing && Configuration.EnableTrackingReleaseOnFinalizer && !Configuration.EnableReleaseOnFinalizer)
				{
					ObjectReference arg = ObjectTracker.Find(this);
					LogMemoryLeakWarning?.Invoke($"Warning: Live ComObject [0x{base.NativePointer.ToInt64():X}], potential memory leak: {arg}");
				}
				if (disposing || Configuration.EnableReleaseOnFinalizer)
				{
					((IUnknown)this).Release();
				}
				if (Configuration.EnableObjectTracking)
				{
					ObjectTracker.UnTrack(this);
				}
				_nativePointer = null;
			}
			base.Dispose(disposing);
		}

		protected override void NativePointerUpdating()
		{
			if (Configuration.EnableObjectTracking)
			{
				ObjectTracker.UnTrack(this);
			}
		}

		protected override void NativePointerUpdated(IntPtr oldNativePointer)
		{
			if (Configuration.EnableObjectTracking)
			{
				ObjectTracker.Track(this);
			}
		}

		public ComObject(IntPtr nativePtr)
			: base(nativePtr)
		{
		}

		public static explicit operator ComObject(IntPtr nativePtr)
		{
			if (!(nativePtr == IntPtr.Zero))
			{
				return new ComObject(nativePtr);
			}
			return null;
		}
	}
	internal abstract class ComObjectShadow : CppObjectShadow
	{
		internal class ComObjectVtbl : CppObjectVtbl
		{
			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			public delegate int QueryInterfaceDelegate(IntPtr thisObject, IntPtr guid, out IntPtr output);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			public delegate int AddRefDelegate(IntPtr thisObject);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			public delegate int ReleaseDelegate(IntPtr thisObject);

			public ComObjectVtbl(int numberOfCallbackMethods)
				: base(numberOfCallbackMethods + 3)
			{
				AddMethod(new QueryInterfaceDelegate(QueryInterfaceImpl));
				AddMethod(new AddRefDelegate(AddRefImpl));
				AddMethod(new ReleaseDelegate(ReleaseImpl));
			}

			protected unsafe static int QueryInterfaceImpl(IntPtr thisObject, IntPtr guid, out IntPtr output)
			{
				ComObjectShadow comObjectShadow = CppObjectShadow.ToShadow<ComObjectShadow>(thisObject);
				if (comObjectShadow == null)
				{
					output = IntPtr.Zero;
					return Result.NoInterface.Code;
				}
				return comObjectShadow.QueryInterfaceImpl(ref *(Guid*)(void*)guid, out output);
			}

			protected static int AddRefImpl(IntPtr thisObject)
			{
				return CppObjectShadow.ToShadow<ComObjectShadow>(thisObject)?.AddRefImpl() ?? 0;
			}

			protected static int ReleaseImpl(IntPtr thisObject)
			{
				return CppObjectShadow.ToShadow<ComObjectShadow>(thisObject)?.ReleaseImpl() ?? 0;
			}
		}

		public static Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046");

		protected int QueryInterfaceImpl(ref Guid guid, out IntPtr output)
		{
			ComObjectShadow comObjectShadow = (ComObjectShadow)((ShadowContainer)base.Callback.Shadow).FindShadow(guid);
			if (comObjectShadow != null)
			{
				((IUnknown)base.Callback).AddReference();
				output = comObjectShadow.NativePointer;
				return Result.Ok.Code;
			}
			output = IntPtr.Zero;
			return Result.NoInterface.Code;
		}

		protected virtual int AddRefImpl()
		{
			return ((IUnknown)base.Callback).AddReference();
		}

		protected virtual int ReleaseImpl()
		{
			return ((IUnknown)base.Callback).Release();
		}
	}
	public static class Configuration
	{
		public static bool EnableObjectTracking = false;

		public static bool EnableReleaseOnFinalizer = false;

		public static bool EnableTrackingReleaseOnFinalizer = true;

		public static bool ThrowOnShaderCompileError = true;

		public static bool UseThreadStaticObjectTracking = false;
	}
	public class CppObject : DisposeBase, ICallbackable, IDisposable
	{
		protected internal unsafe void* _nativePointer;

		public object Tag { get; set; }

		public unsafe IntPtr NativePointer
		{
			get
			{
				return (IntPtr)_nativePointer;
			}
			set
			{
				void* ptr = (void*)value;
				if (_nativePointer != ptr)
				{
					NativePointerUpdating();
					void* nativePointer = _nativePointer;
					_nativePointer = ptr;
					NativePointerUpdated((IntPtr)nativePointer);
				}
			}
		}

		IDisposable ICallbackable.Shadow
		{
			get
			{
				throw new InvalidOperationException("Invalid access to Callback. This is used internally.");
			}
			set
			{
				throw new InvalidOperationException("Invalid access to Callback. This is used internally.");
			}
		}

		public CppObject(IntPtr pointer)
		{
			NativePointer = pointer;
		}

		protected CppObject()
		{
		}

		public static explicit operator IntPtr(CppObject cppObject)
		{
			return cppObject?.NativePointer ?? IntPtr.Zero;
		}

		protected void FromTemp(CppObject temp)
		{
			NativePointer = temp.NativePointer;
			temp.NativePointer = IntPtr.Zero;
		}

		protected void FromTemp(IntPtr temp)
		{
			NativePointer = temp;
		}

		protected virtual void NativePointerUpdating()
		{
		}

		protected virtual void NativePointerUpdated(IntPtr oldNativePointer)
		{
		}

		protected override void Dispose(bool disposing)
		{
		}

		public static T FromPointer<T>(IntPtr comObjectPtr) where T : CppObject
		{
			if (!(comObjectPtr == IntPtr.Zero))
			{
				return (T)Activator.CreateInstance(typeof(T), comObjectPtr);
			}
			return null;
		}

		internal static T FromPointerUnsafe<T>(IntPtr comObjectPtr)
		{
			if (!(comObjectPtr == IntPtr.Zero))
			{
				return (T)Activator.CreateInstance(typeof(T), comObjectPtr);
			}
			return (T)(object)null;
		}

		public static IntPtr ToCallbackPtr<TCallback>(ICallbackable callback) where TCallback : ICallbackable
		{
			if (callback == null)
			{
				return IntPtr.Zero;
			}
			if (callback is CppObject)
			{
				return ((CppObject)callback).NativePointer;
			}
			ShadowContainer shadowContainer = callback.Shadow as ShadowContainer;
			if (shadowContainer == null)
			{
				shadowContainer = new ShadowContainer();
				shadowContainer.Initialize(callback);
			}
			return shadowContainer.Find(typeof(TCallback));
		}
	}
	internal abstract class CppObjectShadow : CppObject
	{
		public ICallbackable Callback { get; private set; }

		protected abstract CppObjectVtbl GetVtbl { get; }

		public unsafe virtual void Initialize(ICallbackable callbackInstance)
		{
			Callback = callbackInstance;
			base.NativePointer = Marshal.AllocHGlobal(IntPtr.Size * 2);
			GCHandle value = GCHandle.Alloc(this);
			Marshal.WriteIntPtr(base.NativePointer, GetVtbl.Pointer);
			*(IntPtr*)((byte*)(void*)base.NativePointer + sizeof(IntPtr)) = GCHandle.ToIntPtr(value);
		}

		protected unsafe override void Dispose(bool disposing)
		{
			if (base.NativePointer != IntPtr.Zero)
			{
				GCHandle.FromIntPtr(*(IntPtr*)((byte*)(void*)base.NativePointer + sizeof(IntPtr))).Free();
				Marshal.FreeHGlobal(base.NativePointer);
				base.NativePointer = IntPtr.Zero;
			}
			Callback = null;
			base.Dispose(disposing);
		}

		internal unsafe static T ToShadow<T>(IntPtr thisPtr) where T : CppObjectShadow
		{
			return (T)GCHandle.FromIntPtr(*(IntPtr*)((byte*)(void*)thisPtr + sizeof(IntPtr))).Target;
		}
	}
	internal class CppObjectVtbl
	{
		private readonly List<Delegate> methods;

		private readonly IntPtr vtbl;

		public IntPtr Pointer => vtbl;

		public CppObjectVtbl(int numberOfCallbackMethods)
		{
			vtbl = Marshal.AllocHGlobal(IntPtr.Size * numberOfCallbackMethods);
			methods = new List<Delegate>();
		}

		public unsafe void AddMethod(Delegate method)
		{
			int count = methods.Count;
			methods.Add(method);
			*(IntPtr*)((byte*)(void*)vtbl + (nint)count * (nint)sizeof(IntPtr)) = Marshal.GetFunctionPointerForDelegate(method);
		}
	}
	public struct DataBox
	{
		public IntPtr DataPointer;

		public int RowPitch;

		public int SlicePitch;

		public bool IsEmpty
		{
			get
			{
				if (DataPointer == IntPtr.Zero && RowPitch == 0)
				{
					return SlicePitch == 0;
				}
				return false;
			}
		}

		public DataBox(IntPtr datapointer, int rowPitch, int slicePitch)
		{
			DataPointer = datapointer;
			RowPitch = rowPitch;
			SlicePitch = slicePitch;
		}

		public DataBox(IntPtr dataPointer)
		{
			DataPointer = dataPointer;
			RowPitch = 0;
			SlicePitch = 0;
		}
	}
	public class DataBuffer : DisposeBase
	{
		private unsafe sbyte* _buffer;

		private GCHandle _gCHandle;

		private readonly bool _ownsBuffer;

		private readonly int _size;

		private Blob _blob;

		public unsafe IntPtr DataPointer => new IntPtr(_buffer);

		public int Size => _size;

		public unsafe static DataBuffer Create<T>(T[] userBuffer, int index = 0, bool pinBuffer = true) where T : struct
		{
			if (userBuffer == null)
			{
				throw new ArgumentNullException("userBuffer");
			}
			if (index < 0 || index > userBuffer.Length)
			{
				throw new ArgumentException("Index is out of range [0, userBuffer.Length-1]", "index");
			}
			int num = Utilities.SizeOf(userBuffer);
			int num2 = index * Utilities.SizeOf<T>();
			if (pinBuffer)
			{
				GCHandle handle = GCHandle.Alloc(userBuffer, GCHandleType.Pinned);
				return new DataBuffer(num2 + (byte*)(void*)handle.AddrOfPinnedObject(), num - num2, handle);
			}
			fixed (T* ptr = &userBuffer[0])
			{
				return new DataBuffer(num2 + (byte*)(void*)(IntPtr)ptr, num - num2, makeCopy: true);
			}
		}

		public unsafe DataBuffer(int sizeInBytes)
		{
			_buffer = (sbyte*)(void*)Utilities.AllocateMemory(sizeInBytes);
			_size = sizeInBytes;
			_ownsBuffer = true;
		}

		public DataBuffer(DataPointer dataPointer)
			: this(dataPointer.Pointer, dataPointer.Size)
		{
		}

		public unsafe DataBuffer(IntPtr userBuffer, int sizeInBytes)
			: this((void*)userBuffer, sizeInBytes, makeCopy: false)
		{
		}

		internal unsafe DataBuffer(void* buffer, int sizeInBytes, GCHandle handle)
		{
			_buffer = (sbyte*)buffer;
			_size = sizeInBytes;
			_gCHandle = handle;
			_ownsBuffer = false;
		}

		internal unsafe DataBuffer(void* buffer, int sizeInBytes, bool makeCopy)
		{
			if (makeCopy)
			{
				_buffer = (sbyte*)(void*)Utilities.AllocateMemory(sizeInBytes);
				Utilities.CopyMemory((IntPtr)_buffer, (IntPtr)buffer, sizeInBytes);
			}
			else
			{
				_buffer = (sbyte*)buffer;
			}
			_size = sizeInBytes;
			_ownsBuffer = makeCopy;
		}

		internal unsafe DataBuffer(Blob buffer)
		{
			_buffer = (sbyte*)(void*)buffer.GetBufferPointer();
			_size = buffer.GetBufferSize();
			_blob = buffer;
		}

		protected unsafe override void Dispose(bool disposing)
		{
			if (disposing && _blob != null)
			{
				_blob.Dispose();
				_blob = null;
			}
			if (_gCHandle.IsAllocated)
			{
				_gCHandle.Free();
			}
			if (_ownsBuffer && _buffer != null)
			{
				Utilities.FreeMemory((IntPtr)_buffer);
				_buffer = null;
			}
		}

		public unsafe void Clear(byte value = 0)
		{
			Utilities.ClearMemory((IntPtr)_buffer, value, Size);
		}

		public unsafe T Get<T>(int positionInBytes) where T : struct
		{
			T data = default(T);
			Utilities.Read((IntPtr)(_buffer + positionInBytes), ref data);
			return data;
		}

		public unsafe void Get<T>(int positionInBytes, out T value) where T : struct
		{
			Utilities.ReadOut<T>((IntPtr)(_buffer + positionInBytes), out value);
		}

		public unsafe T[] GetRange<T>(int positionInBytes, int count) where T : struct
		{
			T[] array = new T[count];
			Utilities.Read((IntPtr)(_buffer + positionInBytes), array, 0, count);
			return array;
		}

		public unsafe void GetRange<T>(int positionInBytes, T[] buffer, int offset, int count) where T : struct
		{
			Utilities.Read((IntPtr)(_buffer + positionInBytes), buffer, offset, count);
		}

		public unsafe void Set<T>(int positionInBytes, ref T value) where T : struct
		{
			Unsafe.Write(_buffer + positionInBytes, value);
		}

		public unsafe void Set<T>(int positionInBytes, T value) where T : struct
		{
			Unsafe.Write(_buffer + positionInBytes, value);
		}

		public unsafe void Set(int positionInBytes, bool value)
		{
			*(int*)(_buffer + positionInBytes) = (value ? 1 : 0);
		}

		public void Set<T>(int positionInBytes, T[] data) where T : struct
		{
			Set(positionInBytes, data, 0, data.Length);
		}

		public unsafe void Set(int positionInBytes, IntPtr source, long count)
		{
			Utilities.CopyMemory((IntPtr)(_buffer + positionInBytes), source, (int)count);
		}

		public unsafe void Set<T>(int positionInBytes, T[] data, int offset, int count) where T : struct
		{
			Utilities.Write((IntPtr)(_buffer + positionInBytes), data, offset, count);
		}

		public static implicit operator DataPointer(DataBuffer from)
		{
			return new DataPointer(from.DataPointer, from.Size);
		}
	}
	public struct DataPointer : IEquatable<DataPointer>
	{
		public static readonly DataPointer Zero = new DataPointer(IntPtr.Zero, 0);

		public IntPtr Pointer;

		public int Size;

		public bool IsEmpty => Equals(Zero);

		public DataPointer(IntPtr pointer, int size)
		{
			Pointer = pointer;
			Size = size;
		}

		public unsafe DataPointer(void* pointer, int size)
		{
			Pointer = (IntPtr)pointer;
			Size = size;
		}

		public bool Equals(DataPointer other)
		{
			if (Pointer.Equals((object?)(nint)other.Pointer))
			{
				return Size == other.Size;
			}
			return false;
		}

		public override bool Equals(object obj)
		{
			if (obj == null)
			{
				return false;
			}
			if (obj is DataPointer)
			{
				return Equals((DataPointer)obj);
			}
			return false;
		}

		public override int GetHashCode()
		{
			return (Pointer.GetHashCode() * 397) ^ Size;
		}

		public DataStream ToDataStream()
		{
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			return new DataStream(this);
		}

		public DataBuffer ToDataBuffer()
		{
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			return new DataBuffer(this);
		}

		public byte[] ToArray()
		{
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			if (Size < 0)
			{
				throw new InvalidOperationException("Size cannot be < 0");
			}
			byte[] array = new byte[Size];
			Utilities.Read(Pointer, array, 0, Size);
			return array;
		}

		public T[] ToArray<T>() where T : struct
		{
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			T[] array = new T[Size / Utilities.SizeOf<T>()];
			CopyTo(array, 0, array.Length);
			return array;
		}

		public void CopyTo<T>(T[] buffer, int offset, int count) where T : struct
		{
			if (buffer == null)
			{
				throw new ArgumentNullException("buffer");
			}
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			if (offset < 0)
			{
				throw new ArgumentOutOfRangeException("offset", "Must be >= 0");
			}
			if (count <= 0)
			{
				throw new ArgumentOutOfRangeException("count", "Must be > 0");
			}
			if (count * Utilities.SizeOf<T>() > Size)
			{
				throw new ArgumentOutOfRangeException("buffer", "Total buffer size cannot be larger than size of this data pointer");
			}
			Utilities.Read(Pointer, buffer, offset, count);
		}

		public void CopyFrom<T>(T[] buffer) where T : struct
		{
			if (buffer == null)
			{
				throw new ArgumentNullException("buffer");
			}
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			CopyFrom(buffer, 0, buffer.Length);
		}

		public void CopyFrom<T>(T[] buffer, int offset, int count) where T : struct
		{
			if (buffer == null)
			{
				throw new ArgumentNullException("buffer");
			}
			if (Pointer == IntPtr.Zero)
			{
				throw new InvalidOperationException("DataPointer is Zero");
			}
			if (offset < 0)
			{
				throw new ArgumentOutOfRangeException("offset", "Must be >= 0");
			}
			if (count <= 0)
			{
				throw new ArgumentOutOfRangeException("count", "Must be > 0");
			}
			if (count * Utilities.SizeOf<T>() > Size)
			{
				throw new ArgumentOutOfRangeException("buffer", "Total buffer size cannot be larger than size of this data pointer");
			}
			Utilities.Write(Pointer, buffer, offset, count);
		}

		public static bool operator ==(DataPointer left, DataPointer right)
		{
			return left.Equals(right);
		}

		public static bool operator !=(DataPointer left, DataPointer right)
		{
			return !left.Equals(right);
		}
	}
	public struct DataRectangle
	{
		public IntPtr DataPointer;

		public int Pitch;

		public DataRectangle(IntPtr dataPointer, int pitch)
		{
			DataPointer = dataPointer;
			Pitch = pitch;
		}
	}
	public class DataStream : Stream
	{
		private unsafe byte* _buffer;

		private readonly bool _canRead;

		private readonly bool _canWrite;

		private GCHandle _gCHandle;

		private Blob _blob;

		private readonly bool _ownsBuffer;

		private long _position;

		private readonly long _size;

		public override bool CanRead => _canRead;

		public override bool CanSeek => true;

		public override bool CanWrite => _canWrite;

		public unsafe IntPtr DataPointer => new IntPtr(_buffer);

		public override long Length => _size;

		public override long Position
		{
			get
			{
				return _position;
			}
			set
			{
				Seek(value, SeekOrigin.Begin);
			}
		}

		public unsafe IntPtr PositionPointer => (IntPtr)(_buffer + _position);

		public long RemainingLength => _size - _position;

		public unsafe DataStream(Blob buffer)
		{
			_buffer = (byte*)(void*)buffer.GetBufferPointer();
			_size = buffer.GetBufferSize();
			_canRead = true;
			_canWrite = true;
			_blob = buffer;
		}

		public unsafe static DataStream Create<T>(T[] userBuffer, bool canRead, bool canWrite, int index = 0, bool pinBuffer = true) where T : struct
		{
			if (userBuffer == null)
			{
				throw new ArgumentNullException("userBuffer");
			}
			if (index < 0 || index > userBuffer.Length)
			{
				throw new ArgumentException("Index is out of range [0, userBuffer.Length-1]", "index");
			}
			int num = Utilities.SizeOf(userBuffer);
			int num2 = index * Utilities.SizeOf<T>();
			if (pinBuffer)
			{
				GCHandle handle = GCHandle.Alloc(userBuffer, GCHandleType.Pinned);
				return new DataStream(num2 + (byte*)(void*)handle.AddrOfPinnedObject(), num - num2, canRead, canWrite, handle);
			}
			fixed (T* ptr = &userBuffer[0])
			{
				return new DataStream(num2 + (byte*)(void*)(IntPtr)ptr, num - num2, canRead, canWrite, makeCopy: true);
			}
		}

		public unsafe DataStream(int sizeInBytes, bool canRead, bool canWrite)
		{
			_buffer = (byte*)(void*)Utilities.AllocateMemory(sizeInBytes);
			_size = sizeInBytes;
			_ownsBuffer = true;
			_canRead = canRead;
			_canWrite = canWrite;
		}

		public DataStream(DataPointer dataPointer)
			: this(dataPointer.Pointer, dataPointer.Size, canRead: true, canWrite: true)
		{
		}

		public unsafe DataStream(IntPtr userBuffer, long sizeInBytes, bool canRead, bool canWrite)
		{
			_buffer = (byte*)userBuffer.ToPointer();
			_size = sizeInBytes;
			_canRead = canRead;
			_canWrite = canWrite;
		}

		internal unsafe DataStream(void* dataPointer, int sizeInBytes, bool canRead, bool canWrite, GCHandle handle)
		{
			_gCHandle = handle;
			_buffer = (byte*)dataPointer;
			_size = sizeInBytes;
			_canRead = canRead;
			_canWrite = canWrite;
			_ownsBuffer = false;
		}

		internal unsafe DataStream(void* buffer, int sizeInBytes, bool canRead, bool canWrite, bool makeCopy)
		{
			if (makeCopy)
			{
				_buffer = (byte*)(void*)Utilities.AllocateMemory(sizeInBytes);
				Utilities.CopyMemory((IntPtr)_buffer, (IntPtr)buffer, sizeInBytes);
			}
			else
			{
				_buffer = (byte*)buffer;
			}
			_size = sizeInBytes;
			_canRead = canRead;
			_canWrite = canWrite;
			_ownsBuffer = makeCopy;
		}

		~DataStream()
		{
			Dispose(disposing: false);
		}

		protected unsafe override void Dispose(bool disposing)
		{
			if (disposing && _blob != null)
			{
				_blob.Dispose();
				_blob = null;
			}
			if (_gCHandle.IsAllocated)
			{
				_gCHandle.Free();
			}
			if (_ownsBuffer && _buffer != null)
			{
				Utilities.FreeMemory((IntPtr)_buffer);
				_buffer = null;
			}
		}

		public override void Flush()
		{
			throw new NotSupportedException("DataStream objects cannot be flushed.");
		}

		public unsafe T Read<T>() where T : struct
		{
			if (!_canRead)
			{
				throw new NotSupportedException();
			}
			byte* ptr = _buffer + _position;
			T data = default(T);
			_position = (byte*)(void*)Utilities.ReadAndPosition((IntPtr)ptr, ref data) - _buffer;
			return data;
		}

		public unsafe override int ReadByte()
		{
			if (_position >= Length)
			{
				return -1;
			}
			return _buffer[_position++];
		}

		public override int Read(byte[] buffer, int offset, int count)
		{
			int count2 = (int)Math.Min(RemainingLength, count);
			return ReadRange(buffer, offset, count2);
		}

		public unsafe void Read(IntPtr buffer, int offset, int count)
		{
			Utilities.CopyMemory(new IntPtr((byte*)(void*)buffer + offset), (IntPtr)(_buffer + _position), count);
			_position += count;
		}

		public unsafe T[] ReadRange<T>(int count) where T : struct
		{
			if (!_canRead)
			{
				throw new NotSupportedException();
			}
			byte* ptr = _buffer + _position;
			T[] array = new T[count];
			_position = (byte*)(void*)Utilities.Read((IntPtr)ptr, array, 0, count) - _buffer;
			return array;
		}

		public unsafe int ReadRange<T>(T[] buffer, int offset, int count) where T : struct
		{
			if (!_canRead)
			{
				throw new NotSupportedException();
			}
			long position = _position;
			_position = (byte*)(void*)Utilities.Read((IntPtr)(_buffer + _position), buffer, offset, count) - _buffer;
			return (int)(_position - position);
		}

		public override long Seek(long offset, SeekOrigin origin)
		{
			long num = 0L;
			switch (origin)
			{
			case SeekOrigin.Begin:
				num = offset;
				break;
			case SeekOrigin.Current:
				num = _position + offset;
				break;
			case SeekOrigin.End:
				num = _size - offset;
				break;
			}
			if (num < 0)
			{
				throw new InvalidOperationException("Cannot seek beyond the beginning of the stream.");
			}
			if (num > _size)
			{
				throw new InvalidOperationException("Cannot seek beyond the end of the stream.");
			}
			_position = num;
			return _position;
		}

		public override void SetLength(long value)
		{
			throw new NotSupportedException("DataStream objects cannot be resized.");
		}

		public unsafe void Write<T>(T value) where T : struct
		{
			if (!_canWrite)
			{
				throw new NotSupportedException();
			}
			_position = (byte*)(void*)Utilities.WriteAndPosition((IntPtr)(_buffer + _position), ref value) - _buffer;
		}

		public override void Write(byte[] buffer, int offset, int count)
		{
			WriteRange(buffer, offset, count);
		}

		public unsafe void Write(IntPtr buffer, int offset, int count)
		{
			Utilities.CopyMemory((IntPtr)(_buffer + _position), new IntPtr((byte*)(void*)buffer + offset), count);
			_position += count;
		}

		public void WriteRange<T>(T[] data) where T : struct
		{
			WriteRange(data, 0, data.Length);
		}

		public unsafe void WriteRange(IntPtr source, long count)
		{
			if (!_canWrite)
			{
				throw new NotSupportedException();
			}
			Utilities.CopyMemory((IntPtr)(_buffer + _position), source, (int)count);
			_position += count;
		}

		public unsafe void WriteRange<T>(T[] data, int offset, int count) where T : struct
		{
			if (!_canWrite)
			{
				throw new NotSupportedException();
			}
			_position = (byte*)(void*)Utilities.Write((IntPtr)(_buffer + _position), data, offset, count) - _buffer;
		}

		public static implicit operator DataPointer(DataStream from)
		{
			return new DataPointer(from.PositionPointer, (int)from.RemainingLength);
		}
	}
	public class CompilationException : SharpDXException
	{
		public CompilationException(string message)
			: base(message)
		{
		}

		public CompilationException(Result errorCode, string message)
			: base(errorCode, message)
		{
		}
	}
	public abstract class CompilationResultBase<T> : DisposeBase where T : class, IDisposable
	{
		public T Bytecode { get; private set; }

		public Result ResultCode { get; private set; }

		public bool HasErrors => ResultCode.Failure;

		public string Message { get; private set; }

		protected CompilationResultBase(T bytecode, Result resultCode, string message = null)
		{
			Bytecode = bytecode;
			ResultCode = resultCode;
			Message = message;
		}

		protected override void Dispose(bool disposing)
		{
			if (disposing && Bytecode != null)
			{
				Bytecode.Dispose();
				Bytecode = null;
			}
		}
	}
	public abstract class DisposeBase : IDisposable
	{
		public bool IsDisposed { get; private set; }

		public event EventHandler<EventArgs> Disposing;

		public event EventHandler<EventArgs> Disposed;

		~DisposeBase()
		{
			CheckAndDispose(disposing: false);
		}

		public void Dispose()
		{
			CheckAndDispose(disposing: true);
		}

		private void CheckAndDispose(bool disposing)
		{
			if (!IsDisposed)
			{
				this.Disposing?.Invoke(this, DisposeEventArgs.Get(disposing));
				Dispose(disposing);
				GC.SuppressFinalize(this);
				IsDisposed = true;
				this.Disposed?.Invoke(this, DisposeEventArgs.Get(disposing));
			}
		}

		protected abstract void Dispose(bool disposing);
	}
	public class DisposeCollector : DisposeBase
	{
		private List<object> disposables;

		public int Count => disposables.Count;

		public void DisposeAndClear(bool disposeManagedResources = true)
		{
			if (disposables == null)
			{
				return;
			}
			for (int num = disposables.Count - 1; num >= 0; num--)
			{
				object obj = disposables[num];
				if (obj is IDisposable disposable)
				{
					if (disposeManagedResources)
					{
						disposable.Dispose();
					}
				}
				else
				{
					Utilities.FreeMemory((IntPtr)obj);
				}
				disposables.RemoveAt(num);
			}
			disposables.Clear();
		}

		protected override void Dispose(bool disposeManagedResources)
		{
			DisposeAndClear(disposeManagedResources);
			disposables = null;
		}

		public T Collect<T>(T toDispose)
		{
			if (!(toDispose is IDisposable) && !(toDispose is IntPtr))
			{
				throw new ArgumentException("Argument must be IDisposable or IntPtr");
			}
			if (toDispose is IntPtr && !Utilities.IsMemoryAligned((IntPtr)(object)toDispose))
			{
				throw new ArgumentException("Memory pointer is invalid. Memory must have been allocated with Utilties.AllocateMemory");
			}
			if (!object.Equals(toDispose, default(T)))
			{
				if (disposables == null)
				{
					disposables = new List<object>();
				}
				if (!disposables.Contains(toDispose))
				{
					disposables.Add(toDispose);
				}
			}
			return toDispose;
		}

		public void RemoveAndDispose<T>(ref T objectToDispose)
		{
			if (disposables != null)
			{
				Remove(objectToDispose);
				if ((object)objectToDispose is IDisposable disposable)
				{
					disposable.Dispose();
				}
				else
				{
					Utilities.FreeMemory((IntPtr)(object)objectToDispose);
				}
				objectToDispose = default(T);
			}
		}

		public void Remove<T>(T toDisposeArg)
		{
			if (disposables != null && disposables.Contains(toDisposeArg))
			{
				disposables.Remove(toDisposeArg);
			}
		}
	}
	public class DisposeEventArgs : EventArgs
	{
		public static readonly DisposeEventArgs DisposingEventArgs = new DisposeEventArgs(disposing: true);

		public static readonly DisposeEventArgs NotDisposingEventArgs = new DisposeEventArgs(disposing: false);

		public readonly bool Disposing;

		private DisposeEventArgs(bool disposing)
		{
			Disposing = disposing;
		}

		public static DisposeEventArgs Get(bool disposing)
		{
			if (!disposing)
			{
				return NotDisposingEventArgs;
			}
			return DisposingEventArgs;
		}
	}
	[StructLayout(LayoutKind.Sequential)]
	internal class FunctionCallback
	{
		public IntPtr Pointer;

		public FunctionCallback(IntPtr pointer)
		{
			Pointer = pointer;
		}

		public unsafe FunctionCallback(void* pointer)
		{
			Pointer = new IntPtr(pointer);
		}

		public static explicit operator IntPtr(FunctionCallback value)
		{
			return value.Pointer;
		}

		public static implicit operator FunctionCallback(IntPtr value)
		{
			return new FunctionCallback(value);
		}

		public unsafe static implicit operator void*(FunctionCallback value)
		{
			return (void*)value.Pointer;
		}

		public unsafe static explicit operator FunctionCallback(void* value)
		{
			return new FunctionCallback(value);
		}

		public override string ToString()
		{
			return string.Format(CultureInfo.CurrentCulture, "{0}", Pointer);
		}

		public string ToString(string format)
		{
			if (format == null)
			{
				return ToString();
			}
			return string.Format(CultureInfo.CurrentCulture, "{0}", Pointer.ToString(format));
		}

		public override int GetHashCode()
		{
			return Pointer.ToInt32();
		}

		public bool Equals(FunctionCallback other)
		{
			return Pointer == other.Pointer;
		}

		public override bool Equals(object value)
		{
			if (value == null)
			{
				return false;
			}
			if ((object)value.GetType() != typeof(FunctionCallback))
			{
				return false;
			}
			return Equals((FunctionCallback)value);
		}
	}
	public interface ICallbackable : IDisposable
	{
		IDisposable Shadow { get; set; }
	}
	[Shadow(typeof(InspectableShadow))]
	[Guid("AF86E2E0-B12D-4c6a-9C5A-D7AA65101E90")]
	public interface IInspectable : ICallbackable, IDisposable
	{
	}
	internal class InspectableShadow : ComObjectShadow
	{
		public class InspectableProviderVtbl : ComObjectVtbl
		{
			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private unsafe delegate int GetIidsDelegate(IntPtr thisPtr, int* iidCount, IntPtr* iids);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate int GetRuntimeClassNameDelegate(IntPtr thisPtr, IntPtr className);

			private enum TrustLevel
			{
				BaseTrust,
				PartialTrust,
				FullTrust
			}

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate int GetTrustLevelDelegate(IntPtr thisPtr, IntPtr trustLevel);

			public InspectableProviderVtbl()
				: base(3)
			{
				AddMethod(new GetIidsDelegate(GetIids));
				AddMethod(new GetRuntimeClassNameDelegate(GetRuntimeClassName));
				AddMethod(new GetTrustLevelDelegate(GetTrustLevel));
			}

			private unsafe static int GetIids(IntPtr thisPtr, int* iidCount, IntPtr* iids)
			{
				try
				{
					ShadowContainer shadowContainer = (ShadowContainer)((IInspectable)CppObjectShadow.ToShadow<InspectableShadow>(thisPtr).Callback).Shadow;
					int num = shadowContainer.Guids.Length;
					iids = (IntPtr*)(void*)Marshal.AllocCoTaskMem(IntPtr.Size * num);
					*iidCount = num;
					for (int i = 0; i < num; i++)
					{
						iids[i] = shadowContainer.Guids[i];
					}
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}

			private static int GetRuntimeClassName(IntPtr thisPtr, IntPtr className)
			{
				try
				{
					_ = (IInspectable)CppObjectShadow.ToShadow<InspectableShadow>(thisPtr).Callback;
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}

			private static int GetTrustLevel(IntPtr thisPtr, IntPtr trustLevel)
			{
				try
				{
					_ = (IInspectable)CppObjectShadow.ToShadow<InspectableShadow>(thisPtr).Callback;
					Marshal.WriteInt32(trustLevel, 2);
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}
		}

		private static readonly InspectableProviderVtbl Vtbl = new InspectableProviderVtbl();

		protected override CppObjectVtbl GetVtbl => Vtbl;

		public static IntPtr ToIntPtr(IInspectable callback)
		{
			return CppObject.ToCallbackPtr<IInspectable>(callback);
		}
	}
	internal class Interop
	{
		public unsafe static void* Fixed<T>(ref T data)
		{
			throw new NotImplementedException();
		}

		public unsafe static void* Fixed<T>(T[] data)
		{
			throw new NotImplementedException();
		}

		public unsafe static void* Cast<T>(ref T data) where T : struct
		{
			return Unsafe.AsPointer(ref data);
		}

		public unsafe static void* CastOut<T>(out T data) where T : struct
		{
			return Unsafe.AsPointer(ref data);
		}

		public static TCAST[] CastArray<TCAST, T>(T[] arrayData) where TCAST : struct where T : struct
		{
			return (TCAST[])(object)arrayData;
		}

		public unsafe static void memcpy(void* pDest, void* pSrc, int count)
		{
			// IL cpblk instruction
			Unsafe.CopyBlockUnaligned(pDest, pSrc, count);
		}

		public unsafe static void memset(void* pDest, byte value, int count)
		{
			// IL initblk instruction
			Unsafe.InitBlockUnaligned(pDest, value, count);
		}

		public unsafe static void* Read<T>(void* pSrc, ref T data) where T : struct
		{
			fixed (T* ptr = &data)
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>();
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(ref reference, pSrc, num);
				return num + (byte*)pSrc;
			}
		}

		public unsafe static T ReadInline<T>(void* pSrc) where T : struct
		{
			throw new NotImplementedException();
		}

		public unsafe static void WriteInline<T>(void* pDest, ref T data) where T : struct
		{
			throw new NotImplementedException();
		}

		public unsafe static void CopyInline<T>(ref T data, void* pSrc) where T : struct
		{
			throw new NotImplementedException();
		}

		public unsafe static void CopyInline<T>(void* pDest, ref T srcData) where T : struct
		{
			throw new NotImplementedException();
		}

		public unsafe static void CopyInlineOut<T>(out T data, void* pSrc) where T : struct
		{
			throw new NotImplementedException();
		}

		public unsafe static void* ReadOut<T>(void* pSrc, out T data) where T : struct
		{
			fixed (T* ptr = &data)
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>();
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(ref reference, pSrc, num);
				return num + (byte*)pSrc;
			}
		}

		public unsafe static void* Read<T>(void* pSrc, T[] data, int offset, int count) where T : struct
		{
			fixed (T* ptr = &data[offset])
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>() * count;
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(ref reference, pSrc, num);
				return num + (byte*)pSrc;
			}
		}

		public unsafe static void* Read2D<T>(void* pSrc, T[,] data, int offset, int count) where T : struct
		{
			fixed (T* ptr = &data[offset])
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>() * count;
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(ref reference, pSrc, num);
				return num + (byte*)pSrc;
			}
		}

		public static int SizeOf<T>()
		{
			throw new NotImplementedException();
		}

		public unsafe static void* Write<T>(void* pDest, ref T data) where T : struct
		{
			fixed (T* ptr = &data)
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>();
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(pDest, ref reference, num);
				return num + (byte*)pDest;
			}
		}

		public unsafe static void* Write<T>(void* pDest, T[] data, int offset, int count) where T : struct
		{
			fixed (T* ptr = &data[offset])
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>() * count;
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(pDest, ref reference, num);
				return num + (byte*)pDest;
			}
		}

		public unsafe static void* Write2D<T>(void* pDest, T[,] data, int offset, int count) where T : struct
		{
			fixed (T* ptr = &data[offset])
			{
				ref ? reference = ref *(?*)ptr;
				int num = Unsafe.SizeOf<T>() * count;
				// IL cpblk instruction
				Unsafe.CopyBlockUnaligned(pDest, ref reference, num);
				return num + (byte*)pDest;
			}
		}

		[Tag("SharpDX.ModuleInit")]
		public static void ModuleInit()
		{
		}
	}
	[Guid("00000000-0000-0000-C000-000000000046")]
	public interface IUnknown : ICallbackable, IDisposable
	{
		Result QueryInterface(ref Guid guid, out IntPtr comObject);

		int AddReference();

		int Release();
	}
	internal class ModuleInit
	{
		[Tag("SharpDX.ModuleInit")]
		internal static void Setup()
		{
			ResultDescriptor.RegisterProvider(typeof(Result));
		}
	}
	[CompilerGenerated]
	internal class NamespaceDoc
	{
	}
	public struct PointerSize : IEquatable<PointerSize>
	{
		private IntPtr _size;

		public static readonly PointerSize Zero = new PointerSize(0);

		public PointerSize(IntPtr size)
		{
			_size = size;
		}

		private unsafe PointerSize(void* size)
		{
			_size = new IntPtr(size);
		}

		public PointerSize(int size)
		{
			_size = new IntPtr(size);
		}

		public PointerSize(long size)
		{
			_size = new IntPtr(size);
		}

		public override string ToString()
		{
			return string.Format(CultureInfo.CurrentCulture, "{0}", _size);
		}

		public string ToString(string format)
		{
			if (format == null)
			{
				return ToString();
			}
			return string.Format(CultureInfo.CurrentCulture, "{0}", _size.ToString(format));
		}

		public override int GetHashCode()
		{
			return _size.GetHashCode();
		}

		public bool Equals(PointerSize other)
		{
			return _size.Equals((object?)(nint)other._size);
		}

		public override bool Equals(object value)
		{
			if (value == null)
			{
				return false;
			}
			if (value is PointerSize)
			{
				return Equals((PointerSize)value);
			}
			return false;
		}

		public static PointerSize operator +(PointerSize left, PointerSize right)
		{
			return new PointerSize(left._size.ToInt64() + right._size.ToInt64());
		}

		public static PointerSize operator +(PointerSize value)
		{
			return value;
		}

		public static PointerSize operator -(PointerSize left, PointerSize right)
		{
			return new PointerSize(left._size.ToInt64() - right._size.ToInt64());
		}

		public static PointerSize operator -(PointerSize value)
		{
			return new PointerSize(-value._size.ToInt64());
		}

		public static PointerSize operator *(int scale, PointerSize value)
		{
			return new PointerSize(scale * value._size.ToInt64());
		}

		public static PointerSize operator *(PointerSize value, int scale)
		{
			return new PointerSize(scale * value._size.ToInt64());
		}

		public static PointerSize operator /(PointerSize value, int scale)
		{
			return new PointerSize(value._size.ToInt64() / scale);
		}

		public static bool operator ==(PointerSize left, PointerSize right)
		{
			return left.Equals(right);
		}

		public static bool operator !=(PointerSize left, PointerSize right)
		{
			return !left.Equals(right);
		}

		public static implicit operator int(PointerSize value)
		{
			return value._size.ToInt32();
		}

		public static implicit operator long(PointerSize value)
		{
			return value._size.ToInt64();
		}

		public static implicit operator PointerSize(int value)
		{
			return new PointerSize(value);
		}

		public static implicit operator PointerSize(long value)
		{
			return new PointerSize(value);
		}

		public static implicit operator PointerSize(IntPtr value)
		{
			return new PointerSize(value);
		}

		public static implicit operator IntPtr(PointerSize value)
		{
			return value._size;
		}

		public unsafe static implicit operator PointerSize(void* value)
		{
			return new PointerSize(value);
		}

		public unsafe static implicit operator void*(PointerSize value)
		{
			return (void*)value._size;
		}
	}
	public struct Result : IEquatable<Result>
	{
		private int _code;

		public static readonly Result Ok = new Result(0);

		public static readonly Result False = new Result(1);

		public static readonly ResultDescriptor Abort = new ResultDescriptor(-2147467260, "General", "E_ABORT", "Operation aborted");

		public static readonly ResultDescriptor AccessDenied = new ResultDescriptor(-2147024891, "General", "E_ACCESSDENIED", "General access denied error");

		public static readonly ResultDescriptor Fail = new ResultDescriptor(-2147467259, "General", "E_FAIL", "Unspecified error");

		public static readonly ResultDescriptor Handle = new ResultDescriptor(-2147024890, "General", "E_HANDLE", "Invalid handle");

		public static readonly ResultDescriptor InvalidArg = new ResultDescriptor(-2147024809, "General", "E_INVALIDARG", "Invalid Arguments");

		public static readonly ResultDescriptor NoInterface = new ResultDescriptor(-2147467262, "General", "E_NOINTERFACE", "No such interface supported");

		public static readonly ResultDescriptor NotImplemented = new ResultDescriptor(-2147467263, "General", "E_NOTIMPL", "Not implemented");

		public static readonly ResultDescriptor OutOfMemory = new ResultDescriptor(-2147024882, "General", "E_OUTOFMEMORY", "Out of memory");

		public static readonly ResultDescriptor InvalidPointer = new ResultDescriptor(-2147467261, "General", "E_POINTER", "Invalid pointer");

		public static readonly ResultDescriptor UnexpectedFailure = new ResultDescriptor(-2147418113, "General", "E_UNEXPECTED", "Catastrophic failure");

		public static readonly ResultDescriptor WaitAbandoned = new ResultDescriptor(128, "General", "WAIT_ABANDONED", "WaitAbandoned");

		public static readonly ResultDescriptor WaitTimeout = new ResultDescriptor(258, "General", "WAIT_TIMEOUT", "WaitTimeout");

		public static readonly ResultDescriptor Pending = new ResultDescriptor(-2147483638, "General", "E_PENDING", "Pending");

		public int Code => _code;

		public bool Success => Code >= 0;

		public bool Failure => Code < 0;

		public Result(int code)
		{
			_code = code;
		}

		public Result(uint code)
		{
			_code = (int)code;
		}

		public static explicit operator int(Result result)
		{
			return result.Code;
		}

		public static explicit operator uint(Result result)
		{
			return (uint)result.Code;
		}

		public static implicit operator Result(int result)
		{
			return new Result(result);
		}

		public static implicit operator Result(uint result)
		{
			return new Result(result);
		}

		public bool Equals(Result other)
		{
			return Code == other.Code;
		}

		public override bool Equals(object obj)
		{
			if (!(obj is Result))
			{
				return false;
			}
			return Equals((Result)obj);
		}

		public override int GetHashCode()
		{
			return Code;
		}

		public static bool operator ==(Result left, Result right)
		{
			return left.Code == right.Code;
		}

		public static bool operator !=(Result left, Result right)
		{
			return left.Code != right.Code;
		}

		public override string ToString()
		{
			return string.Format(CultureInfo.InvariantCulture, "HRESULT = 0x{0:X}", _code);
		}

		public void CheckError()
		{
			if (_code < 0)
			{
				throw new SharpDXException(this);
			}
		}

		public static Result GetResultFromException(Exception ex)
		{
			return new Result(Marshal.GetHRForException(ex));
		}

		public static Result GetResultFromWin32Error(int win32Error)
		{
			return (int)((win32Error <= 0) ? win32Error : ((win32Error & 0xFFFF) | 0x70000 | 0x80000000u));
		}
	}
	public sealed class ResultDescriptor
	{
		private static readonly object LockDescriptor = new object();

		private static readonly List<Type> RegisteredDescriptorProvider = new List<Type>();

		private static readonly Dictionary<Result, ResultDescriptor> Descriptors = new Dictionary<Result, ResultDescriptor>();

		private const string UnknownText = "Unknown";

		public Result Result { get; private set; }

		public int Code => Result.Code;

		public string Module { get; private set; }

		public string NativeApiCode { get; private set; }

		public string ApiCode { get; private set; }

		public string Description { get; set; }

		public ResultDescriptor(Result code, string module, string nativeApiCode, string apiCode, string description = null)
		{
			Result = code;
			Module = module;
			NativeApiCode = nativeApiCode;
			ApiCode = apiCode;
			Description = description;
		}

		public bool Equals(ResultDescriptor other)
		{
			if (other == null)
			{
				return false;
			}
			if ((object)this == other)
			{
				return true;
			}
			return other.Result.Equals(Result);
		}

		public override bool Equals(object obj)
		{
			if (obj == null)
			{
				return false;
			}
			if (this == obj)
			{
				return true;
			}
			if (obj.GetType() != typeof(ResultDescriptor))
			{
				return false;
			}
			return Equals((ResultDescriptor)obj);
		}

		public override int GetHashCode()
		{
			return Result.GetHashCode();
		}

		public override string ToString()
		{
			return $"HRESULT: [0x{Result.Code:X}], Module: [{Module}], ApiCode: [{NativeApiCode}/{ApiCode}], Message: {Description}";
		}

		public static implicit operator Result(ResultDescriptor result)
		{
			return result.Result;
		}

		public static explicit operator int(ResultDescriptor result)
		{
			return result.Result.Code;
		}

		public static explicit operator uint(ResultDescriptor result)
		{
			return (uint)result.Result.Code;
		}

		public static bool operator ==(ResultDescriptor left, Result right)
		{
			if (left == null)
			{
				return false;
			}
			return left.Result.Code == right.Code;
		}

		public static bool operator !=(ResultDescriptor left, Result right)
		{
			if (left == null)
			{
				return false;
			}
			return left.Result.Code != right.Code;
		}

		public static void RegisterProvider(Type descriptorsProviderType)
		{
			lock (LockDescriptor)
			{
				if (!RegisteredDescriptorProvider.Contains(descriptorsProviderType))
				{
					RegisteredDescriptorProvider.Add(descriptorsProviderType);
				}
			}
		}

		public static ResultDescriptor Find(Result result)
		{
			ResultDescriptor value;
			lock (LockDescriptor)
			{
				if (RegisteredDescriptorProvider.Count > 0)
				{
					foreach (Type item in RegisteredDescriptorProvider)
					{
						AddDescriptorsFromType(item);
					}
					RegisteredDescriptorProvider.Clear();
				}
				if (!Descriptors.TryGetValue(result, out value))
				{
					value = new ResultDescriptor(result, "Unknown", "Unknown", "Unknown");
				}
				if (value.Description == null)
				{
					string descriptionFromResultCode = GetDescriptionFromResultCode(result.Code);
					value.Description = descriptionFromResultCode ?? "Unknown";
				}
			}
			return value;
		}

		private static void AddDescriptorsFromType(Type type)
		{
			foreach (FieldInfo declaredField in type.GetTypeInfo().DeclaredFields)
			{
				if (declaredField.FieldType == typeof(ResultDescriptor) && declaredField.IsPublic && declaredField.IsStatic)
				{
					ResultDescriptor resultDescriptor = (ResultDescriptor)declaredField.GetValue(null);
					if (!Descriptors.ContainsKey(resultDescriptor.Result))
					{
						Descriptors.Add(resultDescriptor.Result, resultDescriptor);
					}
				}
			}
		}

		private static string GetDescriptionFromResultCode(int resultCode)
		{
			IntPtr lpBuffer = IntPtr.Zero;
			FormatMessageW(4864, IntPtr.Zero, resultCode, 0, ref lpBuffer, 0, IntPtr.Zero);
			string? result = Marshal.PtrToStringUni(lpBuffer);
			Marshal.FreeHGlobal(lpBuffer);
			return result;
		}

		[DllImport("kernel32.dll")]
		private static extern uint FormatMessageW(int dwFlags, IntPtr lpSource, int dwMessageId, int dwLanguageId, ref IntPtr lpBuffer, int nSize, IntPtr Arguments);
	}
	public class ServiceEventArgs : EventArgs
	{
		public Type ServiceType { get; private set; }

		public object Instance { get; private set; }

		public ServiceEventArgs(Type serviceType, object serviceInstance)
		{
			ServiceType = serviceType;
			Instance = serviceInstance;
		}
	}
	[AttributeUsage(AttributeTargets.Interface)]
	internal class ShadowAttribute : Attribute
	{
		private Type type;

		public Type Type => type;

		public ShadowAttribute(Type typeOfTheAssociatedShadow)
		{
			type = typeOfTheAssociatedShadow;
		}

		public static ShadowAttribute Get(Type type)
		{
			return type.GetTypeInfo().GetCustomAttribute<ShadowAttribute>();
		}
	}
	internal class ShadowContainer : DisposeBase
	{
		private readonly Dictionary<Guid, CppObjectShadow> guidToShadow = new Dictionary<Guid, CppObjectShadow>();

		private static readonly Dictionary<Type, List<Type>> typeToShadowTypes = new Dictionary<Type, List<Type>>();

		private IntPtr guidPtr;

		public IntPtr[] Guids { get; private set; }

		public unsafe void Initialize(ICallbackable callbackable)
		{
			callbackable.Shadow = this;
			Type type = callbackable.GetType();
			List<Type> value;
			lock (typeToShadowTypes)
			{
				if (!typeToShadowTypes.TryGetValue(type, out value))
				{
					IEnumerable<Type> implementedInterfaces = type.GetTypeInfo().ImplementedInterfaces;
					value = new List<Type>();
					value.AddRange(implementedInterfaces);
					typeToShadowTypes.Add(type, value);
					foreach (Type item in implementedInterfaces)
					{
						if (ShadowAttribute.Get(item) == null)
						{
							value.Remove(item);
							continue;
						}
						foreach (Type implementedInterface in item.GetTypeInfo().ImplementedInterfaces)
						{
							value.Remove(implementedInterface);
						}
					}
				}
			}
			CppObjectShadow cppObjectShadow = null;
			foreach (Type item2 in value)
			{
				CppObjectShadow cppObjectShadow2 = (CppObjectShadow)Activator.CreateInstance(ShadowAttribute.Get(item2).Type);
				cppObjectShadow2.Initialize(callbackable);
				if (cppObjectShadow == null)
				{
					cppObjectShadow = cppObjectShadow2;
					guidToShadow.Add(ComObjectShadow.IID_IUnknown, cppObjectShadow);
				}
				guidToShadow.Add(Utilities.GetGuidFromType(item2), cppObjectShadow2);
				foreach (Type implementedInterface2 in item2.GetTypeInfo().ImplementedInterfaces)
				{
					if (ShadowAttribute.Get(implementedInterface2) != null)
					{
						guidToShadow.Add(Utilities.GetGuidFromType(implementedInterface2), cppObjectShadow2);
					}
				}
			}
			int num = 0;
			foreach (Guid key in guidToShadow.Keys)
			{
				if (key != Utilities.GetGuidFromType(typeof(IInspectable)) && key != Utilities.GetGuidFromType(typeof(IUnknown)))
				{
					num++;
				}
			}
			guidPtr = Marshal.AllocHGlobal(Utilities.SizeOf<Guid>() * num);
			Guids = new IntPtr[num];
			int num2 = 0;
			Guid* ptr = (Guid*)(void*)guidPtr;
			foreach (Guid key2 in guidToShadow.Keys)
			{
				if (!(key2 == Utilities.GetGuidFromType(typeof(IInspectable))) && !(key2 == Utilities.GetGuidFromType(typeof(IUnknown))))
				{
					ptr[num2] = key2;
					Guids[num2] = new IntPtr(ptr + num2);
					num2++;
				}
			}
		}

		internal IntPtr Find(Type type)
		{
			return Find(Utilities.GetGuidFromType(type));
		}

		internal IntPtr Find(Guid guidType)
		{
			return FindShadow(guidType)?.NativePointer ?? IntPtr.Zero;
		}

		internal CppObjectShadow FindShadow(Guid guidType)
		{
			guidToShadow.TryGetValue(guidType, out var value);
			return value;
		}

		protected override void Dispose(bool disposing)
		{
			if (!disposing)
			{
				return;
			}
			foreach (CppObjectShadow value in guidToShadow.Values)
			{
				value.Dispose();
			}
			guidToShadow.Clear();
			if (guidPtr != IntPtr.Zero)
			{
				Marshal.FreeHGlobal(guidPtr);
				guidPtr = IntPtr.Zero;
			}
		}
	}
	public class SharpDXException : Exception
	{
		private ResultDescriptor descriptor;

		public Result ResultCode => descriptor.Result;

		public ResultDescriptor Descriptor => descriptor;

		public SharpDXException()
			: base("A SharpDX exception occurred.")
		{
			descriptor = ResultDescriptor.Find(Result.Fail);
			base.HResult = (int)Result.Fail;
		}

		public SharpDXException(Result result)
			: this(ResultDescriptor.Find(result))
		{
			base.HResult = (int)result;
		}

		public SharpDXException(ResultDescriptor descriptor)
			: base(descriptor.ToString())
		{
			this.descriptor = descriptor;
			base.HResult = (int)descriptor.Result;
		}

		public SharpDXException(Result result, string message)
			: base(message)
		{
			descriptor = ResultDescriptor.Find(result);
			base.HResult = (int)result;
		}

		public SharpDXException(Result result, string message, params object[] args)
			: base(string.Format(CultureInfo.InvariantCulture, message, args))
		{
			descriptor = ResultDescriptor.Find(result);
			base.HResult = (int)result;
		}

		public SharpDXException(string message, params object[] args)
			: this(Result.Fail, message, args)
		{
		}

		public SharpDXException(string message, Exception innerException, params object[] args)
			: base(string.Format(CultureInfo.InvariantCulture, message, args), innerException)
		{
			descriptor = ResultDescriptor.Find(Result.Fail);
			base.HResult = (int)Result.Fail;
		}
	}
	public struct Size2 : IEquatable<Size2>
	{
		public static readonly Size2 Zero = new Size2(0, 0);

		public static readonly Size2 Empty = Zero;

		public int Width;

		public int Height;

		public Size2(int width, int height)
		{
			Width = width;
			Height = height;
		}

		public bool Equals(Size2 other)
		{
			if (other.Width == Width)
			{
				return other.Height == Height;
			}
			return false;
		}

		public override bool Equals(object obj)
		{
			if (!(obj is Size2))
			{
				return false;
			}
			return Equals((Size2)obj);
		}

		public override int GetHashCode()
		{
			return (Width * 397) ^ Height;
		}

		public static bool operator ==(Size2 left, Size2 right)
		{
			return left.Equals(right);
		}

		public static bool operator !=(Size2 left, Size2 right)
		{
			return !left.Equals(right);
		}

		public override string ToString()
		{
			return $"({Width},{Height})";
		}
	}
	public struct Size2F : IEquatable<Size2F>
	{
		public static readonly Size2F Zero = new Size2F(0f, 0f);

		public static readonly Size2F Empty = Zero;

		public float Width;

		public float Height;

		public Size2F(float width, float height)
		{
			Width = width;
			Height = height;
		}

		public bool Equals(Size2F other)
		{
			if (other.Width == Width)
			{
				return other.Height == Height;
			}
			return false;
		}

		public override bool Equals(object obj)
		{
			if (!(obj is Size2F))
			{
				return false;
			}
			return Equals((Size2F)obj);
		}

		public override int GetHashCode()
		{
			return (Width.GetHashCode() * 397) ^ Height.GetHashCode();
		}

		public static bool operator ==(Size2F left, Size2F right)
		{
			return left.Equals(right);
		}

		public static bool operator !=(Size2F left, Size2F right)
		{
			return !left.Equals(right);
		}

		public override string ToString()
		{
			return $"({Width},{Height})";
		}
	}
	[AttributeUsage(AttributeTargets.All)]
	public class TagAttribute : Attribute
	{
		public string Value { get; private set; }

		public TagAttribute(string value)
		{
			Value = value;
		}
	}
	public delegate void GetValueFastDelegate<T>(object obj, out T value);
	public delegate void SetValueFastDelegate<T>(object obj, ref T value);
	public static class Utilities
	{
		[Flags]
		public enum CLSCTX : uint
		{
			ClsctxInprocServer = 1u,
			ClsctxInprocHandler = 2u,
			ClsctxLocalServer = 4u,
			ClsctxInprocServer16 = 8u,
			ClsctxRemoteServer = 0x10u,
			ClsctxInprocHandler16 = 0x20u,
			ClsctxReserved1 = 0x40u,
			ClsctxReserved2 = 0x80u,
			ClsctxReserved3 = 0x100u,
			ClsctxReserved4 = 0x200u,
			ClsctxNoCodeDownload = 0x400u,
			ClsctxReserved5 = 0x800u,
			ClsctxNoCustomMarshal = 0x1000u,
			ClsctxEnableCodeDownload = 0x2000u,
			ClsctxNoFailureLog = 0x4000u,
			ClsctxDisableAaa = 0x8000u,
			ClsctxEnableAaa = 0x10000u,
			ClsctxFromDefaultContext = 0x20000u,
			ClsctxInproc = 3u,
			ClsctxServer = 0x15u,
			ClsctxAll = 0x17u
		}

		public enum CoInit
		{
			MultiThreaded = 0,
			ApartmentThreaded = 2,
			DisableOle1Dde = 4,
			SpeedOverMemory = 8
		}

		internal struct Buffer<TElement>
		{
			internal TElement[] items;

			internal int count;

			internal Buffer(IEnumerable<TElement> source)
			{
				TElement[] array = null;
				int num = 0;
				if (source is ICollection<TElement> collection)
				{
					num = collection.Count;
					if (num > 0)
					{
						array = new TElement[num];
						collection.CopyTo(array, 0);
					}
				}
				else
				{
					foreach (TElement item in source)
					{
						if (array == null)
						{
							array = new TElement[4];
						}
						else if (array.Length == num)
						{
							TElement[] array2 = new TElement[checked(num * 2)];
							Array.Copy(array, 0, array2, 0, num);
							array = array2;
						}
						array[num] = item;
						num++;
					}
				}
				items = array;
				count = num;
			}

			internal TElement[] ToArray()
			{
				if (count == 0)
				{
					return new TElement[0];
				}
				if (items.Length == count)
				{
					return items;
				}
				TElement[] array = new TElement[count];
				Array.Copy(items, 0, array, 0, count);
				return array;
			}
		}

		public unsafe static void CopyMemory(IntPtr dest, IntPtr src, int sizeInBytesToCopy)
		{
			Interop.memcpy((void*)dest, (void*)src, sizeInBytesToCopy);
		}

		public unsafe static bool CompareMemory(IntPtr from, IntPtr against, int sizeToCompare)
		{
			byte* ptr = (byte*)(void*)from;
			byte* ptr2 = (byte*)(void*)against;
			for (int num = sizeToCompare >> 3; num > 0; num--)
			{
				if (*(long*)ptr != *(long*)ptr2)
				{
					return false;
				}
				ptr += 8;
				ptr2 += 8;
			}
			for (int num = sizeToCompare & 7; num > 0; num--)
			{
				if (*ptr != *ptr2)
				{
					return false;
				}
				ptr++;
				ptr2++;
			}
			return true;
		}

		public unsafe static void ClearMemory(IntPtr dest, byte value, int sizeInBytesToClear)
		{
			Interop.memset((void*)dest, value, sizeInBytesToClear);
		}

		public static int SizeOf<T>() where T : struct
		{
			return Unsafe.SizeOf<T>();
		}

		public static int SizeOf<T>(T[] array) where T : struct
		{
			if (array != null)
			{
				return array.Length * Unsafe.SizeOf<T>();
			}
			return 0;
		}

		public unsafe static void Pin<T>(ref T source, Action<IntPtr> pinAction) where T : struct
		{
			fixed (T* ptr = &source)
			{
				pinAction((IntPtr)ptr);
			}
		}

		public unsafe static void Pin<T>(T[] source, Action<IntPtr> pinAction) where T : struct
		{
			//The blocks IL_0019 are reachable both inside and outside the pinned region starting at IL_000b. ILSpy has duplicated these blocks in order to place them both within and outside the `fixed` statement.
			IntPtr obj;
			if (source != null)
			{
				fixed (T* ptr = &source[0])
				{
					obj = (IntPtr)ptr;
					pinAction(obj);
					return;
				}
			}
			obj = IntPtr.Zero;
			pinAction(obj);
		}

		public unsafe static byte[] ToByteArray<T>(T[] source) where T : struct
		{
			if (source == null)
			{
				return null;
			}
			byte[] array = new byte[SizeOf<T>() * source.Length];
			if (source.Length == 0)
			{
				return array;
			}
			fixed (byte* ptr = array)
			{
				void* pDest = ptr;
				Interop.Write(pDest, source, 0, source.Length);
			}
			return array;
		}

		public static void Swap<T>(ref T left, ref T right)
		{
			T val = left;
			left = right;
			right = val;
		}

		public unsafe static T Read<T>(IntPtr source) where T : struct
		{
			return Unsafe.Read<T>((void*)source);
		}

		public unsafe static void Read<T>(IntPtr source, ref T data) where T : struct
		{
			data = Unsafe.Read<T>((void*)source);
		}

		public unsafe static void ReadOut<T>(IntPtr source, out T data) where T : struct
		{
			data = Unsafe.Read<T>((void*)source);
		}

		public unsafe static IntPtr ReadAndPosition<T>(IntPtr source, ref T data) where T : struct
		{
			return (IntPtr)Interop.Read((void*)source, ref data);
		}

		public unsafe static IntPtr Read<T>(IntPtr source, T[] data, int offset, int count) where T : struct
		{
			return (IntPtr)Interop.Read((void*)source, data, offset, count);
		}

		public unsafe static void Write<T>(IntPtr destination, ref T data) where T : struct
		{
			Unsafe.Write((void*)destination, data);
		}

		public unsafe static IntPtr WriteAndPosition<T>(IntPtr destination, ref T data) where T : struct
		{
			return (IntPtr)Interop.Write((void*)destination, ref data);
		}

		public unsafe static IntPtr Write<T>(IntPtr destination, T[] data, int offset, int count) where T : struct
		{
			return (IntPtr)Interop.Write((void*)destination, data, offset, count);
		}

		public unsafe static void ConvertToIntArray(bool[] array, int* dest)
		{
			for (int i = 0; i < array.Length; i++)
			{
				dest[i] = (array[i] ? 1 : 0);
			}
		}

		public static RawBool[] ConvertToIntArray(bool[] array)
		{
			RawBool[] array2 = new RawBool[array.Length];
			for (int i = 0; i < array2.Length; i++)
			{
				array2[i] = array[i];
			}
			return array2;
		}

		public unsafe static bool[] ConvertToBoolArray(int* array, int length)
		{
			bool[] array2 = new bool[length];
			for (int i = 0; i < array2.Length; i++)
			{
				array2[i] = array[i] != 0;
			}
			return array2;
		}

		public static bool[] ConvertToBoolArray(RawBool[] array)
		{
			bool[] array2 = new bool[array.Length];
			for (int i = 0; i < array2.Length; i++)
			{
				array2[i] = array[i];
			}
			return array2;
		}

		public static Guid GetGuidFromType(Type type)
		{
			return type.GetTypeInfo().GUID;
		}

		public static bool IsAssignableToGenericType(Type givenType, Type genericType)
		{
			foreach (Type implementedInterface in givenType.GetTypeInfo().ImplementedInterfaces)
			{
				if (implementedInterface.GetTypeInfo().IsGenericType && implementedInterface.GetGenericTypeDefinition() == genericType)
				{
					return true;
				}
			}
			if (givenType.GetTypeInfo().IsGenericType && givenType.GetGenericTypeDefinition() == genericType)
			{
				return true;
			}
			Type baseType = givenType.GetTypeInfo().BaseType;
			if (baseType == null)
			{
				return false;
			}
			return IsAssignableToGenericType(baseType, genericType);
		}

		public unsafe static IntPtr AllocateMemory(int sizeInBytes, int align = 16)
		{
			int num = align - 1;
			IntPtr intPtr = Marshal.AllocHGlobal(sizeInBytes + num + IntPtr.Size);
			long num2 = (long)((byte*)(void*)intPtr + sizeof(void*) + num) & (long)(~num);
			*(IntPtr*)((nint)num2 + (nint)(-1) * (nint)sizeof(IntPtr)) = intPtr;
			return new IntPtr((void*)num2);
		}

		public static IntPtr AllocateClearedMemory(int sizeInBytes, byte clearValue = 0, int align = 16)
		{
			IntPtr intPtr = AllocateMemory(sizeInBytes, align);
			ClearMemory(intPtr, clearValue, sizeInBytes);
			return intPtr;
		}

		public static bool IsMemoryAligned(IntPtr memoryPtr, int align = 16)
		{
			return (memoryPtr.ToInt64() & (align - 1)) == 0;
		}

		public unsafe static void FreeMemory(IntPtr alignedBuffer)
		{
			if (!(alignedBuffer == IntPtr.Zero))
			{
				Marshal.FreeHGlobal(*(IntPtr*)((byte*)(void*)alignedBuffer + (nint)(-1) * (nint)sizeof(IntPtr)));
			}
		}

		public static string PtrToStringAnsi(IntPtr pointer, int maxLength)
		{
			string text = Marshal.PtrToStringAnsi(pointer);
			if (text != null && text.Length > maxLength)
			{
				text = text.Substring(0, maxLength);
			}
			return text;
		}

		public static string PtrToStringUni(IntPtr pointer, int maxLength)
		{
			string text = Marshal.PtrToStringUni(pointer);
			if (text != null && text.Length > maxLength)
			{
				text = text.Substring(0, maxLength);
			}
			return text;
		}

		public static IntPtr StringToHGlobalAnsi(string s)
		{
			return Marshal.StringToHGlobalAnsi(s);
		}

		public static IntPtr StringToHGlobalUni(string s)
		{
			return Marshal.StringToHGlobalUni(s);
		}

		public static IntPtr StringToCoTaskMemUni(string s)
		{
			if (s == null)
			{
				return IntPtr.Zero;
			}
			int num = (s.Length + 1) * 2;
			if (num < s.Length)
			{
				throw new ArgumentOutOfRangeException("s");
			}
			IntPtr intPtr = Marshal.AllocCoTaskMem(num);
			if (intPtr == IntPtr.Zero)
			{
				throw new OutOfMemoryException();
			}
			CopyStringToUnmanaged(intPtr, s);
			return intPtr;
		}

		private unsafe static void CopyStringToUnmanaged(IntPtr ptr, string str)
		{
			fixed (char* value = str)
			{
				CopyMemory(ptr, new IntPtr(value), (str.Length + 1) * 2);
			}
		}

		public static IntPtr GetIUnknownForObject(object obj)
		{
			if (obj != null)
			{
				return Marshal.GetIUnknownForObject(obj);
			}
			return IntPtr.Zero;
		}

		public static object GetObjectForIUnknown(IntPtr iunknownPtr)
		{
			if (!(iunknownPtr == IntPtr.Zero))
			{
				return Marshal.GetObjectForIUnknown(iunknownPtr);
			}
			return null;
		}

		public static string Join<T>(string separator, T[] array)
		{
			StringBuilder stringBuilder = new StringBuilder();
			if (array != null)
			{
				for (int i = 0; i < array.Length; i++)
				{
					if (i > 0)
					{
						stringBuilder.Append(separator);
					}
					stringBuilder.Append(array[i]);
				}
			}
			return stringBuilder.ToString();
		}

		public static string Join(string separator, IEnumerable elements)
		{
			List<string> list = new List<string>();
			foreach (object element in elements)
			{
				list.Add(element.ToString());
			}
			StringBuilder stringBuilder = new StringBuilder();
			for (int i = 0; i < list.Count; i++)
			{
				string value = list[i];
				if (i > 0)
				{
					stringBuilder.Append(separator);
				}
				stringBuilder.Append(value);
			}
			return stringBuilder.ToString();
		}

		public static string Join(string separator, IEnumerator elements)
		{
			List<string> list = new List<string>();
			while (elements.MoveNext())
			{
				list.Add(elements.Current.ToString());
			}
			StringBuilder stringBuilder = new StringBuilder();
			for (int i = 0; i < list.Count; i++)
			{
				string value = list[i];
				if (i > 0)
				{
					stringBuilder.Append(separator);
				}
				stringBuilder.Append(value);
			}
			return stringBuilder.ToString();
		}

		public static string BlobToString(Blob blob)
		{
			if (blob == null)
			{
				return null;
			}
			string? result = Marshal.PtrToStringAnsi(blob.BufferPointer);
			blob.Dispose();
			return result;
		}

		public unsafe static IntPtr IntPtrAdd(IntPtr ptr, int offset)
		{
			return new IntPtr((byte*)(void*)ptr + offset);
		}

		public static byte[] ReadStream(Stream stream)
		{
			int readLength = 0;
			return ReadStream(stream, ref readLength);
		}

		public static byte[] ReadStream(Stream stream, ref int readLength)
		{
			if (readLength == 0)
			{
				readLength = (int)(stream.Length - stream.Position);
			}
			int num = readLength;
			if (num == 0)
			{
				return new byte[0];
			}
			byte[] array = new byte[num];
			int num2 = 0;
			if (num > 0)
			{
				do
				{
					num2 += stream.Read(array, num2, readLength - num2);
				}
				while (num2 < readLength);
			}
			return array;
		}

		public static bool Compare(IEnumerable left, IEnumerable right)
		{
			if (left == right)
			{
				return true;
			}
			if (left == null || right == null)
			{
				return false;
			}
			return Compare(left.GetEnumerator(), right.GetEnumerator());
		}

		public static bool Compare(IEnumerator leftIt, IEnumerator rightIt)
		{
			if (leftIt == rightIt)
			{
				return true;
			}
			if (leftIt == null || rightIt == null)
			{
				return false;
			}
			bool flag;
			bool flag2;
			while (true)
			{
				flag = leftIt.MoveNext();
				flag2 = rightIt.MoveNext();
				if (!flag || !flag2)
				{
					break;
				}
				if (!object.Equals(leftIt.Current, rightIt.Current))
				{
					return false;
				}
			}
			if (flag != flag2)
			{
				return false;
			}
			return true;
		}

		public static bool Compare(ICollection left, ICollection right)
		{
			if (left == right)
			{
				return true;
			}
			if (left == null || right == null)
			{
				return false;
			}
			if (left.Count != right.Count)
			{
				return false;
			}
			int num = 0;
			IEnumerator enumerator = left.GetEnumerator();
			IEnumerator enumerator2 = right.GetEnumerator();
			while (enumerator.MoveNext() && enumerator2.MoveNext())
			{
				if (!object.Equals(enumerator.Current, enumerator2.Current))
				{
					return false;
				}
				num++;
			}
			if (num != left.Count)
			{
				return false;
			}
			return true;
		}

		public static T GetCustomAttribute<T>(MemberInfo memberInfo, bool inherited = false) where T : Attribute
		{
			return memberInfo.GetCustomAttribute<T>(inherited);
		}

		public static IEnumerable<T> GetCustomAttributes<T>(MemberInfo memberInfo, bool inherited = false) where T : Attribute
		{
			return memberInfo.GetCustomAttributes<T>(inherited);
		}

		public static bool IsAssignableFrom(Type toType, Type fromType)
		{
			return toType.GetTypeInfo().IsAssignableFrom(fromType.GetTypeInfo());
		}

		public static bool IsEnum(Type typeToTest)
		{
			return typeToTest.GetTypeInfo().IsEnum;
		}

		public static bool IsValueType(Type typeToTest)
		{
			return typeToTest.GetTypeInfo().IsValueType;
		}

		private static MethodInfo GetMethod(Type type, string name, Type[] typeArgs)
		{
			foreach (MethodInfo declaredMethod in type.GetTypeInfo().GetDeclaredMethods(name))
			{
				if (declaredMethod.GetParameters().Length != typeArgs.Length)
				{
					continue;
				}
				ParameterInfo[] parameters = declaredMethod.GetParameters();
				bool flag = true;
				for (int i = 0; i < typeArgs.Length; i++)
				{
					if (parameters[i].ParameterType != typeArgs[i])
					{
						flag = false;
						break;
					}
				}
				if (flag)
				{
					return declaredMethod;
				}
			}
			return null;
		}

		public static GetValueFastDelegate<T> BuildPropertyGetter<T>(Type customEffectType, PropertyInfo propertyInfo)
		{
			ParameterExpression parameterExpression = Expression.Parameter(typeof(T).MakeByRefType());
			ParameterExpression parameterExpression2 = Expression.Parameter(typeof(object));
			MemberExpression memberExpression = Expression.Property(Expression.Convert(parameterExpression2, customEffectType), propertyInfo);
			Expression right = ((!(propertyInfo.PropertyType == typeof(bool))) ? ((Expression)Expression.Convert(memberExpression, typeof(T))) : ((Expression)Expression.Condition(memberExpression, Expression.Constant(1), Expression.Constant(0))));
			return Expression.Lambda<GetValueFastDelegate<T>>(Expression.Assign(parameterExpression, right), new ParameterExpression[2] { parameterExpression2, parameterExpression }).Compile();
		}

		public static SetValueFastDelegate<T> BuildPropertySetter<T>(Type customEffectType, PropertyInfo propertyInfo)
		{
			ParameterExpression parameterExpression = Expression.Parameter(typeof(T).MakeByRefType());
			ParameterExpression parameterExpression2 = Expression.Parameter(typeof(object));
			MemberExpression left = Expression.Property(Expression.Convert(parameterExpression2, customEffectType), propertyInfo);
			Expression right = ((!(propertyInfo.PropertyType == typeof(bool))) ? ((Expression)Expression.Convert(parameterExpression, propertyInfo.PropertyType)) : ((Expression)Expression.NotEqual(parameterExpression, Expression.Constant(0))));
			return Expression.Lambda<SetValueFastDelegate<T>>(Expression.Assign(left, right), new ParameterExpression[2] { parameterExpression2, parameterExpression }).Compile();
		}

		private static MethodInfo FindExplicitConverstion(Type sourceType, Type targetType)
		{
			if (sourceType == targetType)
			{
				return null;
			}
			List<MethodInfo> list = new List<MethodInfo>();
			Type type = sourceType;
			while (type != null)
			{
				list.AddRange(type.GetTypeInfo().DeclaredMethods);
				type = type.GetTypeInfo().BaseType;
			}
			type = targetType;
			while (type != null)
			{
				list.AddRange(type.GetTypeInfo().DeclaredMethods);
				type = type.GetTypeInfo().BaseType;
			}
			foreach (MethodInfo item in list)
			{
				if (item.Name == "op_Explicit" && item.ReturnType == targetType && IsAssignableFrom(item.GetParameters()[0].ParameterType, sourceType))
				{
					return item;
				}
			}
			return null;
		}

		[DllImport("ole32.dll", ExactSpelling = true)]
		private static extern Result CoCreateInstance([In][MarshalAs(UnmanagedType.LPStruct)] Guid rclsid, IntPtr pUnkOuter, CLSCTX dwClsContext, [In][MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr comObject);

		internal static void CreateComInstance(Guid clsid, CLSCTX clsctx, Guid riid, ComObject comObject)
		{
			CoCreateInstance(clsid, IntPtr.Zero, clsctx, riid, out var comObject2).CheckError();
			comObject.NativePointer = comObject2;
		}

		internal static bool TryCreateComInstance(Guid clsid, CLSCTX clsctx, Guid riid, ComObject comObject)
		{
			IntPtr comObject2;
			Result result = CoCreateInstance(clsid, IntPtr.Zero, clsctx, riid, out comObject2);
			comObject.NativePointer = comObject2;
			return result.Success;
		}

		[DllImport("kernel32.dll", SetLastError = true)]
		internal static extern bool CloseHandle(IntPtr handle);

		public static IntPtr GetProcAddress(IntPtr handle, string dllFunctionToImport)
		{
			IntPtr procAddress_ = GetProcAddress_(handle, dllFunctionToImport);
			if (procAddress_ == IntPtr.Zero)
			{
				throw new SharpDXException(dllFunctionToImport);
			}
			return procAddress_;
		}

		[DllImport("kernel32", CharSet = CharSet.Ansi, EntryPoint = "GetProcAddress", ExactSpelling = true, SetLastError = true)]
		private static extern IntPtr GetProcAddress_(IntPtr hModule, string procName);

		public static int ComputeHashFNVModified(byte[] data)
		{
			uint num = 2166136261u;
			foreach (byte b in data)
			{
				num = (num ^ b) * 16777619;
			}
			num += num << 13;
			num ^= num >> 7;
			num += num << 3;
			num ^= num >> 17;
			return (int)(num + (num << 5));
		}

		public static void Dispose<T>(ref T comObject) where T : class, IDisposable
		{
			if (comObject != null)
			{
				comObject.Dispose();
				comObject = null;
			}
		}

		public static T[] ToArray<T>(IEnumerable<T> source)
		{
			return new Buffer<T>(source).ToArray();
		}

		public static bool Any<T>(IEnumerable<T> source)
		{
			return source.GetEnumerator().MoveNext();
		}

		public static IEnumerable<TResult> SelectMany<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, IEnumerable<TResult>> selector)
		{
			foreach (TSource item in source)
			{
				foreach (TResult item2 in selector(item))
				{
					yield return item2;
				}
			}
		}

		public static IEnumerable<TSource> Distinct<TSource>(IEnumerable<TSource> source, IEqualityComparer<TSource> comparer = null)
		{
			if (comparer == null)
			{
				comparer = EqualityComparer<TSource>.Default;
			}
			Dictionary<TSource, object> values = new Dictionary<TSource, object>(comparer);
			foreach (TSource item in source)
			{
				if (!values.ContainsKey(item))
				{
					values.Add(item, null);
					yield return item;
				}
			}
		}

		public static bool IsTypeInheritFrom(Type type, string parentType)
		{
			while (type != null)
			{
				if (type.FullName == parentType)
				{
					return true;
				}
				type = type.GetTypeInfo().BaseType;
			}
			return false;
		}
	}
}
namespace SharpDX.Win32
{
	public struct BitmapInfoHeader
	{
		public int SizeInBytes;

		public int Width;

		public int Height;

		public short PlaneCount;

		public short BitCount;

		public int Compression;

		public int SizeImage;

		public int XPixelsPerMeter;

		public int YPixelsPerMeter;

		public int ColorUsedCount;

		public int ColorImportantCount;
	}
	public class ComBaseStreamNative
	{
		public IDisposable Callback { get; set; }
	}
	internal class ComStreamBaseShadow : ComObjectShadow
	{
		internal class ComStreamBaseVtbl : ComObjectVtbl
		{
			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate int ReadDelegate(IntPtr thisPtr, IntPtr buffer, int sizeOfBytes, out int bytesRead);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate int WriteDelegate(IntPtr thisPtr, IntPtr buffer, int sizeOfBytes, out int bytesWrite);

			public ComStreamBaseVtbl(int numberOfMethods)
				: base(numberOfMethods + 2)
			{
				AddMethod(new ReadDelegate(ReadImpl));
				AddMethod(new WriteDelegate(WriteImpl));
			}

			private static int ReadImpl(IntPtr thisPtr, IntPtr buffer, int sizeOfBytes, out int bytesRead)
			{
				bytesRead = 0;
				try
				{
					IStream stream = (IStream)CppObjectShadow.ToShadow<ComStreamBaseShadow>(thisPtr).Callback;
					bytesRead = stream.Read(buffer, sizeOfBytes);
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}

			private static int WriteImpl(IntPtr thisPtr, IntPtr buffer, int sizeOfBytes, out int bytesWrite)
			{
				bytesWrite = 0;
				try
				{
					IStream stream = (IStream)CppObjectShadow.ToShadow<ComStreamBaseShadow>(thisPtr).Callback;
					bytesWrite = stream.Write(buffer, sizeOfBytes);
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}
		}

		private static readonly ComStreamBaseVtbl Vtbl = new ComStreamBaseVtbl(0);

		protected override CppObjectVtbl GetVtbl => Vtbl;
	}
	[Guid("0000000c-0000-0000-C000-000000000046")]
	internal class ComStreamProxy : CallbackBase, IStream, IStreamBase, IUnknown, ICallbackable, IDisposable
	{
		private Stream sourceStream;

		private byte[] tempBuffer = new byte[4096];

		public ComStreamProxy(Stream sourceStream)
		{
			this.sourceStream = sourceStream;
		}

		public unsafe int Read(IntPtr buffer, int numberOfBytesToRead)
		{
			int num = 0;
			while (numberOfBytesToRead > 0)
			{
				int count = Math.Min(numberOfBytesToRead, tempBuffer.Length);
				int num2 = sourceStream.Read(tempBuffer, 0, count);
				if (num2 == 0)
				{
					return num;
				}
				Utilities.Write(new IntPtr(num + (byte*)(void*)buffer), tempBuffer, 0, num2);
				numberOfBytesToRead -= num2;
				num += num2;
			}
			return num;
		}

		public unsafe int Write(IntPtr buffer, int numberOfBytesToWrite)
		{
			int num = 0;
			while (numberOfBytesToWrite > 0)
			{
				int num2 = Math.Min(numberOfBytesToWrite, tempBuffer.Length);
				Utilities.Read(new IntPtr(num + (byte*)(void*)buffer), tempBuffer, 0, num2);
				sourceStream.Write(tempBuffer, 0, num2);
				numberOfBytesToWrite -= num2;
				num += num2;
			}
			return num;
		}

		public long Seek(long offset, SeekOrigin origin)
		{
			return sourceStream.Seek(offset, origin);
		}

		public void SetSize(long newSize)
		{
		}

		public unsafe long CopyTo(IStream streamDest, long numberOfBytesToCopy, out long bytesWritten)
		{
			bytesWritten = 0L;
			fixed (byte* ptr = tempBuffer)
			{
				void* ptr2 = ptr;
				while (numberOfBytesToCopy > 0)
				{
					int count = (int)Math.Min(numberOfBytesToCopy, tempBuffer.Length);
					int num = sourceStream.Read(tempBuffer, 0, count);
					if (num == 0)
					{
						break;
					}
					streamDest.Write((IntPtr)ptr2, num);
					numberOfBytesToCopy -= num;
					bytesWritten += num;
				}
			}
			return bytesWritten;
		}

		public void Commit(CommitFlags commitFlags)
		{
			sourceStream.Flush();
		}

		public void Revert()
		{
			throw new NotImplementedException();
		}

		public void LockRegion(long offset, long numberOfBytesToLock, LockType dwLockType)
		{
			throw new NotImplementedException();
		}

		public void UnlockRegion(long offset, long numberOfBytesToLock, LockType dwLockType)
		{
			throw new NotImplementedException();
		}

		public StorageStatistics GetStatistics(StorageStatisticsFlags storageStatisticsFlags)
		{
			long num = sourceStream.Length;
			if (num == 0L)
			{
				num = 2147483647L;
			}
			StorageStatistics result = default(StorageStatistics);
			result.Type = 2;
			result.CbSize = num;
			result.GrfLocksSupported = 2;
			result.GrfMode = 2;
			return result;
		}

		public IStream Clone()
		{
			return new ComStreamProxy(sourceStream);
		}

		protected override void Dispose(bool disposing)
		{
			sourceStream = null;
			base.Dispose(disposing);
		}
	}
	internal class ComStreamShadow : ComStreamBaseShadow
	{
		private class ComStreamVtbl : ComStreamBaseVtbl
		{
			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate int SeekDelegate(IntPtr thisPtr, long offset, SeekOrigin origin, IntPtr newPosition);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result SetSizeDelegate(IntPtr thisPtr, long newSize);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate int CopyToDelegate(IntPtr thisPtr, IntPtr streamPointer, long numberOfBytes, out long numberOfBytesRead, out long numberOfBytesWritten);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result CommitDelegate(IntPtr thisPtr, CommitFlags flags);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result RevertDelegate(IntPtr thisPtr);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result LockRegionDelegate(IntPtr thisPtr, long offset, long numberOfBytes, LockType lockType);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result UnlockRegionDelegate(IntPtr thisPtr, long offset, long numberOfBytes, LockType lockType);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result StatDelegate(IntPtr thisPtr, ref StorageStatistics.__Native statisticsPtr, StorageStatisticsFlags flags);

			[UnmanagedFunctionPointer(CallingConvention.StdCall)]
			private delegate Result CloneDelegate(IntPtr thisPtr, out IntPtr streamPointer);

			public ComStreamVtbl()
				: base(9)
			{
				AddMethod(new SeekDelegate(SeekImpl));
				AddMethod(new SetSizeDelegate(SetSizeImpl));
				AddMethod(new CopyToDelegate(CopyToImpl));
				AddMethod(new CommitDelegate(CommitImpl));
				AddMethod(new RevertDelegate(RevertImpl));
				AddMethod(new LockRegionDelegate(LockRegionImpl));
				AddMethod(new UnlockRegionDelegate(UnlockRegionImpl));
				AddMethod(new StatDelegate(StatImpl));
				AddMethod(new CloneDelegate(CloneImpl));
			}

			private unsafe static int SeekImpl(IntPtr thisPtr, long offset, SeekOrigin origin, IntPtr newPosition)
			{
				try
				{
					long num = ((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).Seek(offset, origin);
					if (newPosition != IntPtr.Zero)
					{
						*(long*)(void*)newPosition = num;
					}
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}

			private static Result SetSizeImpl(IntPtr thisPtr, long newSize)
			{
				Result result = Result.Ok;
				try
				{
					((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).SetSize(newSize);
				}
				catch (SharpDXException ex)
				{
					result = ex.ResultCode;
				}
				catch (Exception)
				{
					result = Result.Fail.Code;
				}
				return result;
			}

			private static int CopyToImpl(IntPtr thisPtr, IntPtr streamPointer, long numberOfBytes, out long numberOfBytesRead, out long numberOfBytesWritten)
			{
				numberOfBytesRead = 0L;
				numberOfBytesWritten = 0L;
				try
				{
					IStream stream = (IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback;
					numberOfBytesRead = stream.CopyTo(new ComStream(streamPointer), numberOfBytes, out numberOfBytesWritten);
				}
				catch (Exception ex)
				{
					return (int)Result.GetResultFromException(ex);
				}
				return Result.Ok.Code;
			}

			private static Result CommitImpl(IntPtr thisPtr, CommitFlags flags)
			{
				Result result = Result.Ok;
				try
				{
					((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).Commit(flags);
				}
				catch (SharpDXException ex)
				{
					result = ex.ResultCode;
				}
				catch (Exception)
				{
					result = Result.Fail.Code;
				}
				return result;
			}

			private static Result RevertImpl(IntPtr thisPtr)
			{
				Result result = Result.Ok;
				try
				{
					((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).Revert();
				}
				catch (SharpDXException ex)
				{
					result = ex.ResultCode;
				}
				catch (Exception)
				{
					result = Result.Fail.Code;
				}
				return result;
			}

			private static Result LockRegionImpl(IntPtr thisPtr, long offset, long numberOfBytes, LockType lockType)
			{
				Result result = Result.Ok;
				try
				{
					((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).LockRegion(offset, numberOfBytes, lockType);
				}
				catch (SharpDXException ex)
				{
					result = ex.ResultCode;
				}
				catch (Exception)
				{
					result = Result.Fail.Code;
				}
				return result;
			}

			private static Result UnlockRegionImpl(IntPtr thisPtr, long offset, long numberOfBytes, LockType lockType)
			{
				Result result = Result.Ok;
				try
				{
					((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).UnlockRegion(offset, numberOfBytes, lockType);
				}
				catch (SharpDXException ex)
				{
					result = ex.ResultCode;
				}
				catch (Exception)
				{
					result = Result.Fail.Code;
				}
				return result;
			}

			private static Result StatImpl(IntPtr thisPtr, ref StorageStatistics.__Native statisticsPtr, StorageStatisticsFlags flags)
			{
				try
				{
					((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).GetStatistics(flags).__MarshalTo(ref statisticsPtr);
				}
				catch (SharpDXException ex)
				{
					return ex.ResultCode;
				}
				catch (Exception)
				{
					return Result.Fail.Code;
				}
				return Result.Ok;
			}

			private static Result CloneImpl(IntPtr thisPtr, out IntPtr streamPointer)
			{
				streamPointer = IntPtr.Zero;
				Result result = Result.Ok;
				try
				{
					IStream stream = ((IStream)CppObjectShadow.ToShadow<ComStreamShadow>(thisPtr).Callback).Clone();
					streamPointer = ToIntPtr(stream);
				}
				catch (SharpDXException ex)
				{
					result = ex.ResultCode;
				}
				catch (Exception)
				{
					result = Result.Fail.Code;
				}
				return result;
			}
		}

		private static readonly ComStreamVtbl Vtbl = new ComStreamVtbl();

		protected override CppObjectVtbl GetVtbl => Vtbl;

		public static IntPtr ToIntPtr(IStream stream)
		{
			return CppObject.ToCallbackPtr<IStream>(stream);
		}
	}
	internal class ComStringEnumerator : IEnumerator<string>, IEnumerator, IDisposable, IEnumerable<string>, IEnumerable
	{
		private readonly IEnumString enumString;

		private string current;

		public string Current => current;

		object IEnumerator.Current => Current;

		public ComStringEnumerator(IntPtr ptrToIEnumString)
		{
			enumString = (IEnumString)Marshal.GetObjectForIUnknown(ptrToIEnumString);
		}

		public void Dispose()
		{
		}

		public unsafe bool MoveNext()
		{
			string[] array = new string[1];
			int num = 0;
			bool flag = enumString.Next(1, array, new IntPtr(&num)) == Result.Ok.Code;
			current = (flag ? array[0] : null);
			return flag;
		}

		public void Reset()
		{
			enumString.Reset();
		}

		public IEnumerator<string> GetEnumerator()
		{
			return this;
		}

		IEnumerator IEnumerable.GetEnumerator()
		{
			return GetEnumerator();
		}
	}
	public class ErrorCodeHelper
	{
		public static Result ToResult(ErrorCode errorCode)
		{
			return ToResult((int)errorCode);
		}

		public static Result ToResult(int errorCode)
		{
			return new Result((errorCode <= 0) ? ((uint)errorCode) : (((uint)errorCode & 0xFFFFu) | 0x80070000u));
		}
	}
	[Shadow(typeof(ComStreamShadow))]
	[Guid("0000000c-0000-0000-C000-000000000046")]
	public interface IStream : IStreamBase, IUnknown, ICallbackable, IDisposable
	{
		long Seek(long offset, SeekOrigin origin);

		void SetSize(long newSize);

		long CopyTo(IStream streamDest, long numberOfBytesToCopy, out long bytesWritten);

		void Commit(CommitFlags commitFlags);

		void Revert();

		void LockRegion(long offset, long numberOfBytesToLock, LockType dwLockType);

		void UnlockRegion(long offset, long numberOfBytesToLock, LockType dwLockType);

		StorageStatistics GetStatistics(StorageStatisticsFlags storageStatisticsFlags);

		IStream Clone();
	}
	[Shadow(typeof(ComStreamBaseShadow))]
	[Guid("0c733a30-2a1c-11ce-ade5-00aa0044773d")]
	public interface IStreamBase : IUnknown, ICallbackable, IDisposable
	{
		int Read(IntPtr buffer, int numberOfBytesToRead);

		int Write(IntPtr buffer, int numberOfBytesToRead);
	}
	[CompilerGenerated]
	internal class NamespaceDoc
	{
	}
	public struct NativeMessage
	{
		public IntPtr handle;

		public uint msg;

		public IntPtr wParam;

		public IntPtr lParam;

		public uint time;

		public RawPoint p;
	}
	public class PropertyBag : ComObject
	{
		[StructLayout(LayoutKind.Sequential, Pack = 1)]
		private struct PROPBAG2 : IDisposable
		{
			internal uint type;

			internal ushort vt;

			internal ushort cfType;

			internal IntPtr dwHint;

			internal IntPtr pstrName;

			internal Guid clsid;

			public string Name
			{
				get
				{
					return Marshal.PtrToStringUni(pstrName);
				}
				set
				{
					pstrName = Marshal.StringToCoTaskMemUni(value);
				}
			}

			public void Dispose()
			{
				if (pstrName != IntPtr.Zero)
				{
					Marshal.FreeCoTaskMem(pstrName);
					pstrName = IntPtr.Zero;
				}
			}
		}

		[ComImport]
		[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
		[Guid("22F55882-280B-11D0-A8A9-00A0C90C2004")]
		private interface IPropertyBag2
		{
			[PreserveSig]
			Result Read([In] int cProperties, [In] ref PROPBAG2 pPropBag, IntPtr pErrLog, out object pvarValue, out Result phrError);

			[PreserveSig]
			Result Write([In] int cProperties, [In] ref PROPBAG2 pPropBag, ref object value);

			[PreserveSig]
			Result CountProperties(out int pcProperties);

			[PreserveSig]
			Result GetPropertyInfo([In] int iProperty, [In] int cProperties, out PROPBAG2 pPropBag, out int pcProperties);

			[PreserveSig]
			Result LoadObject([In][MarshalAs(UnmanagedType.LPWStr)] string pstrName, [In] uint dwHint, [In][MarshalAs(UnmanagedType.IUnknown)] object pUnkObject, IntPtr pErrLog);
		}

		private IPropertyBag2 nativePropertyBag;

		public int Count
		{
			get
			{
				CheckIfInitialized();
				nativePropertyBag.CountProperties(out var pcProperties);
				return pcProperties;
			}
		}

		public string[] Keys
		{
			get
			{
				CheckIfInitialized();
				List<string> list = new List<string>();
				for (int i = 0; i < Count; i++)
				{
					nativePropertyBag.GetPropertyInfo(i, 1, out var pPropBag, out var _);
					list.Add(pPropBag.Name);
				}
				return list.ToArray();
			}
		}

		public PropertyBag(IntPtr propertyBagPointer)
			: base(propertyBagPointer)
		{
		}

		protected override void NativePointerUpdated(IntPtr oldNativePointer)
		{
			base.NativePointerUpdated(oldNativePointer);
			if (base.NativePointer != IntPtr.Zero)
			{
				nativePropertyBag = (IPropertyBag2)Marshal.GetObjectForIUnknown(base.NativePointer);
			}
			else
			{
				nativePropertyBag = null;
			}
		}

		private void CheckIfInitialized()
		{
			if (nativePropertyBag == null)
			{
				throw new InvalidOperationException("This instance is not bound to an unmanaged IPropertyBag2");
			}
		}

		public object Get(string name)
		{
			CheckIfInitialized();
			PROPBAG2 pROPBAG = default(PROPBAG2);
			pROPBAG.Name = name;
			PROPBAG2 pPropBag = pROPBAG;
			if (nativePropertyBag.Read(1, ref pPropBag, IntPtr.Zero, out var pvarValue, out var phrError).Failure || phrError.Failure)
			{
				throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Property with name [{0}] is not valid for this instance", name));
			}
			pPropBag.Dispose();
			return pvarValue;
		}

		public T1 Get<T1, T2>(PropertyBagKey<T1, T2> propertyKey)
		{
			return (T1)Convert.ChangeType(Get(propertyKey.Name), typeof(T1));
		}

		public void Set(string name, object value)
		{
			CheckIfInitialized();
			object obj = Get(name);
			value = Convert.ChangeType(value, (obj == null) ? value.GetType() : obj.GetType());
			PROPBAG2 pROPBAG = default(PROPBAG2);
			pROPBAG.Name = name;
			PROPBAG2 pPropBag = pROPBAG;
			IPropertyBag2 propertyBag = nativePropertyBag;
			object value2 = value;
			propertyBag.Write(1, ref pPropBag, ref value2).CheckError();
			pPropBag.Dispose();
		}

		public void Set<T1, T2>(PropertyBagKey<T1, T2> propertyKey, T1 value)
		{
			Set(propertyKey.Name, value);
		}
	}
	public class PropertyBagKey<T1, T2>
	{
		public string Name { get; private set; }

		public PropertyBagKey(string name)
		{
			Name = name;
		}
	}
	public struct SecurityAttributes
	{
		public int Length;

		public IntPtr Descriptor;

		private int inheritHandle;

		public bool InheritHandle
		{
			get
			{
				return inheritHandle != 0;
			}
			set
			{
				inheritHandle = (value ? 1 : 0);
			}
		}
	}
	public struct Variant
	{
		[StructLayout(LayoutKind.Explicit)]
		private struct VariantValue
		{
			public struct CurrencyLowHigh
			{
				public uint LowValue;

				public int HighValue;
			}

			[StructLayout(LayoutKind.Explicit)]
			public struct CurrencyValue
			{
				[FieldOffset(0)]
				public CurrencyLowHigh LowHigh;

				[FieldOffset(0)]
				public long longValue;
			}

			public struct RecordValue
			

plugins/OverlayDearImGui.Shared/System.Runtime.CompilerServices.Unsafe.dll

Decompiled a month ago
using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;

[assembly: AssemblyCopyright("© Microsoft Corporation.  All rights reserved.")]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: AssemblyFileVersion("4.0.0.0")]
[assembly: AssemblyInformationalVersion("4.0.0.0")]
[assembly: AssemblyTitle("System.Runtime.CompilerServices.Unsafe")]
[assembly: AssemblyDescription("System.Runtime.CompilerServices.Unsafe")]
[assembly: AssemblyMetadata(".NETFrameworkAssembly", "")]
[assembly: AssemblyMetadata("Serviceable", "True")]
[assembly: CompilationRelaxations(8)]
[assembly: AssemblyCompany("Microsoft Corporation")]
[assembly: AssemblyProduct("Microsoft® .NET Framework")]
[assembly: CLSCompliant(false)]
[assembly: AssemblyVersion("4.0.3.0")]
namespace System.Runtime.CompilerServices
{
	public static class Unsafe : Object
	{
		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static T Read<T>(void* source)
		{
			return Unsafe.Read<T>(source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static T ReadUnaligned<T>(void* source)
		{
			return Unsafe.ReadUnaligned<T>(source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static T ReadUnaligned<T>(ref byte source)
		{
			return Unsafe.ReadUnaligned<T>(ref source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void Write<T>(void* destination, T value)
		{
			Unsafe.Write(destination, value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void WriteUnaligned<T>(void* destination, T value)
		{
			Unsafe.WriteUnaligned(destination, value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void WriteUnaligned<T>(ref byte destination, T value)
		{
			Unsafe.WriteUnaligned(ref destination, value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void Copy<T>(void* destination, ref T source)
		{
			Unsafe.Write(destination, source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void Copy<T>(ref T destination, void* source)
		{
			destination = Unsafe.Read<T>(source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void* AsPointer<T>(ref T value)
		{
			return Unsafe.AsPointer(ref value);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static int SizeOf<T>()
		{
			return Unsafe.SizeOf<T>();
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void CopyBlock(void* destination, void* source, uint byteCount)
		{
			// IL cpblk instruction
			Unsafe.CopyBlock(destination, source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void CopyBlock(ref byte destination, ref byte source, uint byteCount)
		{
			// IL cpblk instruction
			Unsafe.CopyBlock(ref destination, ref source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void CopyBlockUnaligned(void* destination, void* source, uint byteCount)
		{
			// IL cpblk instruction
			Unsafe.CopyBlockUnaligned(destination, source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void CopyBlockUnaligned(ref byte destination, ref byte source, uint byteCount)
		{
			// IL cpblk instruction
			Unsafe.CopyBlockUnaligned(ref destination, ref source, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void InitBlock(void* startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			Unsafe.InitBlock(startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void InitBlock(ref byte startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			Unsafe.InitBlock(ref startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static void InitBlockUnaligned(void* startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			Unsafe.InitBlockUnaligned(startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static void InitBlockUnaligned(ref byte startAddress, byte value, uint byteCount)
		{
			// IL initblk instruction
			Unsafe.InitBlockUnaligned(ref startAddress, value, byteCount);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static T As<T>(object o) where T : class
		{
			return (T)o;
		}

		[MethodImpl(256)]
		[NonVersionable]
		public unsafe static ref T AsRef<T>(void* source)
		{
			return ref *(T*)source;
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref TTo As<TFrom, TTo>(ref TFrom source)
		{
			return ref Unsafe.As<TFrom, TTo>(ref source);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Add<T>(ref T source, int elementOffset)
		{
			return ref Unsafe.Add(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Add<T>(ref T source, System.IntPtr elementOffset)
		{
			return ref Unsafe.Add(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T AddByteOffset<T>(ref T source, System.IntPtr byteOffset)
		{
			return ref Unsafe.AddByteOffset(ref source, byteOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Subtract<T>(ref T source, int elementOffset)
		{
			return ref Unsafe.Subtract(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T Subtract<T>(ref T source, System.IntPtr elementOffset)
		{
			return ref Unsafe.Subtract(ref source, elementOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static ref T SubtractByteOffset<T>(ref T source, System.IntPtr byteOffset)
		{
			return ref Unsafe.SubtractByteOffset(ref source, byteOffset);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static System.IntPtr ByteOffset<T>(ref T origin, ref T target)
		{
			return Unsafe.ByteOffset(target: ref target, origin: ref origin);
		}

		[MethodImpl(256)]
		[NonVersionable]
		public static bool AreSame<T>(ref T left, ref T right)
		{
			return Unsafe.AreSame(ref left, ref right);
		}
	}
}
namespace System.Runtime.Versioning
{
	[AttributeUsage(/*Could not decode attribute arguments.*/)]
	internal sealed class NonVersionableAttribute : Attribute
	{
	}
}

plugins/OverlayDearImGui.Shared/SharpDX.Direct3D11.dll

Decompiled a month ago
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using SharpDX.DXGI;
using SharpDX.Direct3D;
using SharpDX.Direct3D11;
using SharpDX.Mathematics.Interop;
using SharpDX.Win32;

[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/xiaoxiao921/SharpDX")]
[assembly: AssemblyTitle("SharpDX.Direct3D11")]
[assembly: AssemblyProduct("SharpDX.Direct3D11")]
[assembly: AssemblyDescription("Assembly providing DirectX - Direct3D11, Direct3D11.1 and Effects11 managed API.")]
[assembly: AssemblyCopyright("Copyright (c) 2010-2016 Alexandre Mutel")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCompany("Alexandre Mutel")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyInformationalVersion("4.2.1-beta0+7abb72df54")]
[assembly: AssemblyFileVersion("4.2.1.34")]
[assembly: ComVisible(false)]
[assembly: InternalsVisibleTo("SharpDX.Direct3D11.Effects")]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("4.2.0.0")]
[module: UnverifiableCode]
internal class <Module>
{
	static <Module>()
	{
		ModuleInit.Setup();
	}
}
internal sealed class ThisAssembly
{
	internal const string AssemblyVersion = "4.2.0.0";

	internal const string AssemblyFileVersion = "4.2.1.34";

	internal const string AssemblyInformationalVersion = "4.2.1-beta0+7abb72df54";

	internal const string AssemblyName = "SharpDX.Direct3D11";

	internal const string AssemblyTitle = "SharpDX.Direct3D11";

	internal const string AssemblyConfiguration = "Release";

	internal const string GitCommitId = "7abb72df544eaede656c546ee71a8ad1be9dd19b";

	internal const string RootNamespace = "SharpDX.Direct3D11";

	private ThisAssembly()
	{
	}
}
namespace SharpDX.Direct3D11;

[CompilerGenerated]
internal class AssemblyDoc
{
}
[Guid("75b68faa-347d-4159-8f45-a0640f01cd9a")]
public class BlendState : DeviceChild
{
	public BlendStateDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public BlendState(Device device, BlendStateDescription description)
		: base(IntPtr.Zero)
	{
		device.CreateBlendState(ref description, this);
	}

	public BlendState(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator BlendState(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new BlendState(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out BlendStateDescription descRef)
	{
		BlendStateDescription.__Native @ref = default(BlendStateDescription.__Native);
		descRef = default(BlendStateDescription);
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref);
		descRef.__MarshalFrom(ref @ref);
	}
}
[Guid("cc86fabe-da55-401d-85e7-e3c9de2877e9")]
public class BlendState1 : BlendState
{
	public BlendStateDescription1 Description1
	{
		get
		{
			GetDescription1(out var descRef);
			return descRef;
		}
	}

	public BlendState1(Device1 device, BlendStateDescription1 description)
		: base(IntPtr.Zero)
	{
		device.CreateBlendState1(ref description, this);
	}

	public BlendState1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator BlendState1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new BlendState1(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription1(out BlendStateDescription1 descRef)
	{
		BlendStateDescription1.__Native @ref = default(BlendStateDescription1.__Native);
		descRef = default(BlendStateDescription1);
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref);
		descRef.__MarshalFrom(ref @ref);
	}
}
public struct BlendStateDescription
{
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
	internal struct __Native
	{
		public RawBool AlphaToCoverageEnable;

		public RawBool IndependentBlendEnable;

		public RenderTargetBlendDescription RenderTarget;

		public RenderTargetBlendDescription __RenderTarget1;

		public RenderTargetBlendDescription __RenderTarget2;

		public RenderTargetBlendDescription __RenderTarget3;

		public RenderTargetBlendDescription __RenderTarget4;

		public RenderTargetBlendDescription __RenderTarget5;

		public RenderTargetBlendDescription __RenderTarget6;

		public RenderTargetBlendDescription __RenderTarget7;
	}

	public RawBool AlphaToCoverageEnable;

	public RawBool IndependentBlendEnable;

	internal RenderTargetBlendDescription[] _RenderTarget;

	public RenderTargetBlendDescription[] RenderTarget
	{
		get
		{
			return _RenderTarget ?? (_RenderTarget = new RenderTargetBlendDescription[8]);
		}
		private set
		{
			_RenderTarget = value;
		}
	}

	public static BlendStateDescription Default()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		BlendStateDescription blendStateDescription = default(BlendStateDescription);
		blendStateDescription.AlphaToCoverageEnable = RawBool.op_Implicit(false);
		blendStateDescription.IndependentBlendEnable = RawBool.op_Implicit(false);
		BlendStateDescription result = blendStateDescription;
		RenderTargetBlendDescription[] renderTarget = result.RenderTarget;
		for (int i = 0; i < renderTarget.Length; i++)
		{
			renderTarget[i].IsBlendEnabled = RawBool.op_Implicit(false);
			renderTarget[i].SourceBlend = BlendOption.One;
			renderTarget[i].DestinationBlend = BlendOption.Zero;
			renderTarget[i].BlendOperation = BlendOperation.Add;
			renderTarget[i].SourceAlphaBlend = BlendOption.One;
			renderTarget[i].DestinationAlphaBlend = BlendOption.Zero;
			renderTarget[i].AlphaBlendOperation = BlendOperation.Add;
			renderTarget[i].RenderTargetWriteMask = ColorWriteMaskFlags.All;
		}
		return result;
	}

	public BlendStateDescription Clone()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		BlendStateDescription blendStateDescription = default(BlendStateDescription);
		blendStateDescription.AlphaToCoverageEnable = AlphaToCoverageEnable;
		blendStateDescription.IndependentBlendEnable = IndependentBlendEnable;
		BlendStateDescription result = blendStateDescription;
		RenderTargetBlendDescription[] renderTarget = RenderTarget;
		RenderTargetBlendDescription[] renderTarget2 = result.RenderTarget;
		for (int i = 0; i < renderTarget.Length; i++)
		{
			renderTarget2[i] = renderTarget[i];
		}
		return result;
	}

	internal void __MarshalFree(ref __Native @ref)
	{
	}

	internal unsafe void __MarshalFrom(ref __Native @ref)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		AlphaToCoverageEnable = @ref.AlphaToCoverageEnable;
		IndependentBlendEnable = @ref.IndependentBlendEnable;
		fixed (RenderTargetBlendDescription* ptr = &RenderTarget[0])
		{
			void* ptr2 = ptr;
			fixed (RenderTargetBlendDescription* ptr3 = &@ref.RenderTarget)
			{
				void* ptr4 = ptr3;
				Utilities.CopyMemory((IntPtr)ptr2, (IntPtr)ptr4, 8 * Unsafe.SizeOf<RenderTargetBlendDescription>());
			}
		}
	}

	internal unsafe void __MarshalTo(ref __Native @ref)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		@ref.AlphaToCoverageEnable = AlphaToCoverageEnable;
		@ref.IndependentBlendEnable = IndependentBlendEnable;
		fixed (RenderTargetBlendDescription* ptr = &RenderTarget[0])
		{
			void* ptr2 = ptr;
			fixed (RenderTargetBlendDescription* ptr3 = &@ref.RenderTarget)
			{
				void* ptr4 = ptr3;
				Utilities.CopyMemory((IntPtr)ptr4, (IntPtr)ptr2, 8 * Unsafe.SizeOf<RenderTargetBlendDescription>());
			}
		}
	}
}
public struct BlendStateDescription1
{
	[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
	internal struct __Native
	{
		public RawBool AlphaToCoverageEnable;

		public RawBool IndependentBlendEnable;

		public RenderTargetBlendDescription1 RenderTarget;

		public RenderTargetBlendDescription1 __RenderTarget1;

		public RenderTargetBlendDescription1 __RenderTarget2;

		public RenderTargetBlendDescription1 __RenderTarget3;

		public RenderTargetBlendDescription1 __RenderTarget4;

		public RenderTargetBlendDescription1 __RenderTarget5;

		public RenderTargetBlendDescription1 __RenderTarget6;

		public RenderTargetBlendDescription1 __RenderTarget7;
	}

	public RawBool AlphaToCoverageEnable;

	public RawBool IndependentBlendEnable;

	internal RenderTargetBlendDescription1[] _RenderTarget;

	public RenderTargetBlendDescription1[] RenderTarget
	{
		get
		{
			return _RenderTarget ?? (_RenderTarget = new RenderTargetBlendDescription1[8]);
		}
		private set
		{
			_RenderTarget = value;
		}
	}

	public static BlendStateDescription1 Default()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0052: Unknown result type (might be due to invalid IL or missing references)
		BlendStateDescription1 blendStateDescription = default(BlendStateDescription1);
		blendStateDescription.AlphaToCoverageEnable = RawBool.op_Implicit(false);
		blendStateDescription.IndependentBlendEnable = RawBool.op_Implicit(false);
		BlendStateDescription1 result = blendStateDescription;
		RenderTargetBlendDescription1[] renderTarget = result.RenderTarget;
		for (int i = 0; i < renderTarget.Length; i++)
		{
			renderTarget[i].IsBlendEnabled = RawBool.op_Implicit(false);
			renderTarget[i].IsLogicOperationEnabled = RawBool.op_Implicit(false);
			renderTarget[i].SourceBlend = BlendOption.One;
			renderTarget[i].DestinationBlend = BlendOption.Zero;
			renderTarget[i].BlendOperation = BlendOperation.Add;
			renderTarget[i].SourceAlphaBlend = BlendOption.One;
			renderTarget[i].DestinationAlphaBlend = BlendOption.Zero;
			renderTarget[i].AlphaBlendOperation = BlendOperation.Add;
			renderTarget[i].RenderTargetWriteMask = ColorWriteMaskFlags.All;
			renderTarget[i].LogicOperation = LogicOperation.Noop;
		}
		return result;
	}

	public BlendStateDescription1 Clone()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		BlendStateDescription1 blendStateDescription = default(BlendStateDescription1);
		blendStateDescription.AlphaToCoverageEnable = AlphaToCoverageEnable;
		blendStateDescription.IndependentBlendEnable = IndependentBlendEnable;
		BlendStateDescription1 result = blendStateDescription;
		RenderTargetBlendDescription1[] renderTarget = RenderTarget;
		RenderTargetBlendDescription1[] renderTarget2 = result.RenderTarget;
		for (int i = 0; i < renderTarget.Length; i++)
		{
			renderTarget2[i] = renderTarget[i];
		}
		return result;
	}

	internal void __MarshalFree(ref __Native @ref)
	{
	}

	internal unsafe void __MarshalFrom(ref __Native @ref)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		AlphaToCoverageEnable = @ref.AlphaToCoverageEnable;
		IndependentBlendEnable = @ref.IndependentBlendEnable;
		fixed (RenderTargetBlendDescription1* ptr = &RenderTarget[0])
		{
			void* ptr2 = ptr;
			fixed (RenderTargetBlendDescription1* ptr3 = &@ref.RenderTarget)
			{
				void* ptr4 = ptr3;
				Utilities.CopyMemory((IntPtr)ptr2, (IntPtr)ptr4, 8 * Unsafe.SizeOf<RenderTargetBlendDescription1>());
			}
		}
	}

	internal unsafe void __MarshalTo(ref __Native @ref)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_000e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0013: Unknown result type (might be due to invalid IL or missing references)
		@ref.AlphaToCoverageEnable = AlphaToCoverageEnable;
		@ref.IndependentBlendEnable = IndependentBlendEnable;
		fixed (RenderTargetBlendDescription1* ptr = &RenderTarget[0])
		{
			void* ptr2 = ptr;
			fixed (RenderTargetBlendDescription1* ptr3 = &@ref.RenderTarget)
			{
				void* ptr4 = ptr3;
				Utilities.CopyMemory((IntPtr)ptr4, (IntPtr)ptr2, 8 * Unsafe.SizeOf<RenderTargetBlendDescription1>());
			}
		}
	}
}
[Guid("48570b85-d1ee-4fcd-a250-eb350722b037")]
public class Buffer : Resource
{
	public BufferDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public Buffer(Device device, BufferDescription description)
		: base(IntPtr.Zero)
	{
		device.CreateBuffer(ref description, null, this);
	}

	public Buffer(Device device, DataStream data, BufferDescription description)
		: base(IntPtr.Zero)
	{
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		device.CreateBuffer(ref description, (DataBox?)new DataBox(data.PositionPointer, 0, 0), this);
	}

	public Buffer(Device device, IntPtr dataPointer, BufferDescription description)
		: base(IntPtr.Zero)
	{
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		device.CreateBuffer(ref description, (dataPointer != IntPtr.Zero) ? new DataBox?(new DataBox(dataPointer, 0, 0)) : null, this);
	}

	public Buffer(Device device, int sizeInBytes, ResourceUsage usage, BindFlags bindFlags, CpuAccessFlags accessFlags, ResourceOptionFlags optionFlags, int structureByteStride)
		: base(IntPtr.Zero)
	{
		BufferDescription descRef = new BufferDescription
		{
			BindFlags = bindFlags,
			CpuAccessFlags = accessFlags,
			OptionFlags = optionFlags,
			SizeInBytes = sizeInBytes,
			Usage = usage,
			StructureByteStride = structureByteStride
		};
		device.CreateBuffer(ref descRef, null, this);
	}

	public Buffer(Device device, DataStream data, int sizeInBytes, ResourceUsage usage, BindFlags bindFlags, CpuAccessFlags accessFlags, ResourceOptionFlags optionFlags, int structureByteStride)
		: base(IntPtr.Zero)
	{
		//IL_0055: Unknown result type (might be due to invalid IL or missing references)
		BufferDescription descRef = new BufferDescription
		{
			BindFlags = bindFlags,
			CpuAccessFlags = accessFlags,
			OptionFlags = optionFlags,
			SizeInBytes = sizeInBytes,
			Usage = usage,
			StructureByteStride = structureByteStride
		};
		device.CreateBuffer(ref descRef, (DataBox?)new DataBox(data.PositionPointer, 0, 0), this);
	}

	public unsafe static Buffer Create<T>(Device device, BindFlags bindFlags, ref T data, int sizeInBytes = 0, ResourceUsage usage = ResourceUsage.Default, CpuAccessFlags accessFlags = CpuAccessFlags.None, ResourceOptionFlags optionFlags = ResourceOptionFlags.None, int structureByteStride = 0) where T : struct
	{
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		Buffer buffer = new Buffer(IntPtr.Zero);
		BufferDescription bufferDescription = default(BufferDescription);
		bufferDescription.BindFlags = bindFlags;
		bufferDescription.CpuAccessFlags = accessFlags;
		bufferDescription.OptionFlags = optionFlags;
		bufferDescription.SizeInBytes = ((sizeInBytes == 0) ? Utilities.SizeOf<T>() : sizeInBytes);
		bufferDescription.Usage = usage;
		bufferDescription.StructureByteStride = structureByteStride;
		BufferDescription descRef = bufferDescription;
		fixed (T* ptr = &data)
		{
			device.CreateBuffer(ref descRef, (DataBox?)new DataBox((IntPtr)ptr), buffer);
			return buffer;
		}
	}

	public unsafe static Buffer Create<T>(Device device, BindFlags bindFlags, T[] data, int sizeInBytes = 0, ResourceUsage usage = ResourceUsage.Default, CpuAccessFlags accessFlags = CpuAccessFlags.None, ResourceOptionFlags optionFlags = ResourceOptionFlags.None, int structureByteStride = 0) where T : struct
	{
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		Buffer buffer = new Buffer(IntPtr.Zero);
		BufferDescription bufferDescription = default(BufferDescription);
		bufferDescription.BindFlags = bindFlags;
		bufferDescription.CpuAccessFlags = accessFlags;
		bufferDescription.OptionFlags = optionFlags;
		bufferDescription.SizeInBytes = ((sizeInBytes == 0) ? (Utilities.SizeOf<T>() * data.Length) : sizeInBytes);
		bufferDescription.Usage = usage;
		bufferDescription.StructureByteStride = structureByteStride;
		BufferDescription descRef = bufferDescription;
		fixed (T* ptr = &data[0])
		{
			device.CreateBuffer(ref descRef, (DataBox?)new DataBox((IntPtr)ptr), buffer);
			return buffer;
		}
	}

	public unsafe static Buffer Create<T>(Device device, ref T data, BufferDescription description) where T : struct
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		Buffer buffer = new Buffer(IntPtr.Zero);
		if (description.SizeInBytes == 0)
		{
			description.SizeInBytes = Utilities.SizeOf<T>();
		}
		fixed (T* ptr = &data)
		{
			device.CreateBuffer(ref description, (DataBox?)new DataBox((IntPtr)ptr), buffer);
			return buffer;
		}
	}

	public unsafe static Buffer Create<T>(Device device, T[] data, BufferDescription description) where T : struct
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		Buffer buffer = new Buffer(IntPtr.Zero);
		if (description.SizeInBytes == 0)
		{
			description.SizeInBytes = Utilities.SizeOf<T>() * data.Length;
		}
		fixed (T* ptr = &data[0])
		{
			device.CreateBuffer(ref description, (DataBox?)new DataBox((IntPtr)ptr), buffer);
			return buffer;
		}
	}

	public Buffer(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Buffer(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Buffer(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out BufferDescription descRef)
	{
		descRef = default(BufferDescription);
		fixed (BufferDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2);
		}
	}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BufferDescription
{
	public int SizeInBytes;

	public ResourceUsage Usage;

	public BindFlags BindFlags;

	public CpuAccessFlags CpuAccessFlags;

	public ResourceOptionFlags OptionFlags;

	public int StructureByteStride;

	public BufferDescription(int sizeInBytes, ResourceUsage usage, BindFlags bindFlags, CpuAccessFlags cpuAccessFlags, ResourceOptionFlags optionFlags, int structureByteStride)
	{
		SizeInBytes = sizeInBytes;
		Usage = usage;
		BindFlags = bindFlags;
		CpuAccessFlags = cpuAccessFlags;
		OptionFlags = optionFlags;
		StructureByteStride = structureByteStride;
	}

	public BufferDescription(int sizeInBytes, BindFlags bindFlags, ResourceUsage usage)
	{
		this = default(BufferDescription);
		SizeInBytes = sizeInBytes;
		BindFlags = bindFlags;
		Usage = usage;
	}
}
[Guid("a6cd7faa-b0b7-4a2f-9436-8662a65797cb")]
public class ClassInstance : DeviceChild
{
	public unsafe string InstanceName
	{
		get
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			PointerSize bufferLengthRef = default(PointerSize);
			GetInstanceName(IntPtr.Zero, ref bufferLengthRef);
			sbyte* ptr = stackalloc sbyte[(int)(uint)PointerSize.op_Implicit(bufferLengthRef)];
			GetInstanceName((IntPtr)ptr, ref bufferLengthRef);
			return Marshal.PtrToStringAnsi((IntPtr)ptr);
		}
	}

	public unsafe string TypeName
	{
		get
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			PointerSize bufferLengthRef = default(PointerSize);
			GetInstanceName(IntPtr.Zero, ref bufferLengthRef);
			sbyte* ptr = stackalloc sbyte[(int)(uint)PointerSize.op_Implicit(bufferLengthRef)];
			GetTypeName((IntPtr)ptr, ref bufferLengthRef);
			return Marshal.PtrToStringAnsi((IntPtr)ptr);
		}
	}

	public ClassLinkage ClassLinkage
	{
		get
		{
			GetClassLinkage(out var linkageOut);
			return linkageOut;
		}
	}

	public ClassInstanceDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public ClassInstance(ClassLinkage linkage, string classTypeName, int constantBufferOffset, int constantVectorOffset, int textureOffset, int samplerOffset)
		: base(IntPtr.Zero)
	{
		linkage.CreateClassInstance(classTypeName, constantBufferOffset, constantVectorOffset, textureOffset, samplerOffset, this);
	}

	public ClassInstance(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator ClassInstance(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new ClassInstance(nativePtr);
		}
		return null;
	}

	internal unsafe void GetClassLinkage(out ClassLinkage linkageOut)
	{
		IntPtr zero = IntPtr.Zero;
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &zero);
		if (zero != IntPtr.Zero)
		{
			linkageOut = new ClassLinkage(zero);
		}
		else
		{
			linkageOut = null;
		}
	}

	internal unsafe void GetDescription(out ClassInstanceDescription descRef)
	{
		descRef = default(ClassInstanceDescription);
		fixed (ClassInstanceDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2);
		}
	}

	internal unsafe void GetInstanceName(IntPtr instanceNameRef, ref PointerSize bufferLengthRef)
	{
		fixed (PointerSize* ptr = &bufferLengthRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)instanceNameRef, ptr2);
		}
	}

	internal unsafe void GetTypeName(IntPtr typeNameRef, ref PointerSize bufferLengthRef)
	{
		fixed (PointerSize* ptr = &bufferLengthRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)typeNameRef, ptr2);
		}
	}
}
[Guid("ddf57cba-9543-46e4-a12b-f207a0fe7fed")]
public class ClassLinkage : DeviceChild
{
	public ClassLinkage(Device device)
		: base(IntPtr.Zero)
	{
		device.CreateClassLinkage(this);
	}

	public ClassLinkage(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator ClassLinkage(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new ClassLinkage(nativePtr);
		}
		return null;
	}

	public unsafe ClassInstance GetClassInstance(string classInstanceNameRef, int instanceIndex)
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr intPtr = Marshal.StringToHGlobalAnsi(classInstanceNameRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)intPtr, instanceIndex, &zero));
		ClassInstance result = ((!(zero != IntPtr.Zero)) ? null : new ClassInstance(zero));
		Marshal.FreeHGlobal(intPtr);
		((Result)(ref val)).CheckError();
		return result;
	}

	internal unsafe void CreateClassInstance(string classTypeNameRef, int constantBufferOffset, int constantVectorOffset, int textureOffset, int samplerOffset, ClassInstance instanceOut)
	{
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr intPtr = Marshal.StringToHGlobalAnsi(classTypeNameRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, int, int, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)intPtr, constantBufferOffset, constantVectorOffset, textureOffset, samplerOffset, &zero));
		((CppObject)instanceOut).NativePointer = zero;
		Marshal.FreeHGlobal(intPtr);
		((Result)(ref val)).CheckError();
	}
}
[Guid("4f5b196e-c2bd-495e-bd01-1fded38e4969")]
public class ComputeShader : DeviceChild
{
	public unsafe ComputeShader(Device device, byte[] shaderBytecode, ClassLinkage linkage = null)
		: base(IntPtr.Zero)
	{
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		if (shaderBytecode == null)
		{
			throw new ArgumentNullException("shaderBytecode", "ShaderBytecode cannot be null");
		}
		fixed (byte* ptr = shaderBytecode)
		{
			void* ptr2 = ptr;
			device.CreateComputeShader((IntPtr)ptr2, PointerSize.op_Implicit(shaderBytecode.Length), linkage, this);
		}
	}

	public ComputeShader(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator ComputeShader(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new ComputeShader(nativePtr);
		}
		return null;
	}
}
[Guid("6e8c49fb-a371-4770-b440-29086022b741")]
public class Counter : Asynchronous
{
	public CounterDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public Counter(Device device, CounterDescription description)
		: base(IntPtr.Zero)
	{
		device.CreateCounter(description, this);
	}

	public Counter(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Counter(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Counter(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out CounterDescription descRef)
	{
		descRef = default(CounterDescription);
		fixed (CounterDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2);
		}
	}
}
public class CounterMetadata
{
	public CounterType Type { get; internal set; }

	public int HardwareCounterCount { get; internal set; }

	public string Name { get; internal set; }

	public string Units { get; internal set; }

	public string Description { get; internal set; }
}
[Guid("03823efb-8d8f-4e1c-9aa2-f64bb2cbfdf1")]
public class DepthStencilState : DeviceChild
{
	public DepthStencilStateDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public DepthStencilState(Device device, DepthStencilStateDescription description)
		: base(IntPtr.Zero)
	{
		device.CreateDepthStencilState(ref description, this);
	}

	public DepthStencilState(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator DepthStencilState(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new DepthStencilState(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out DepthStencilStateDescription descRef)
	{
		descRef = default(DepthStencilStateDescription);
		fixed (DepthStencilStateDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2);
		}
	}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DepthStencilStateDescription
{
	public RawBool IsDepthEnabled;

	public DepthWriteMask DepthWriteMask;

	public Comparison DepthComparison;

	public RawBool IsStencilEnabled;

	public byte StencilReadMask;

	public byte StencilWriteMask;

	public DepthStencilOperationDescription FrontFace;

	public DepthStencilOperationDescription BackFace;

	public static DepthStencilStateDescription Default()
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		DepthStencilStateDescription result = default(DepthStencilStateDescription);
		result.IsDepthEnabled = RawBool.op_Implicit(true);
		result.DepthWriteMask = DepthWriteMask.All;
		result.DepthComparison = Comparison.Less;
		result.IsStencilEnabled = RawBool.op_Implicit(false);
		result.StencilReadMask = byte.MaxValue;
		result.StencilWriteMask = byte.MaxValue;
		result.FrontFace.Comparison = Comparison.Always;
		result.FrontFace.DepthFailOperation = StencilOperation.Keep;
		result.FrontFace.FailOperation = StencilOperation.Keep;
		result.FrontFace.PassOperation = StencilOperation.Keep;
		result.BackFace.Comparison = Comparison.Always;
		result.BackFace.DepthFailOperation = StencilOperation.Keep;
		result.BackFace.FailOperation = StencilOperation.Keep;
		result.BackFace.PassOperation = StencilOperation.Keep;
		return result;
	}
}
[Guid("9fdac92a-1876-48c3-afad-25b94f84a9b6")]
public class DepthStencilView : ResourceView
{
	public DepthStencilViewDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public DepthStencilView(Device device, Resource resource)
		: base(IntPtr.Zero)
	{
		device.CreateDepthStencilView(resource, null, this);
	}

	public DepthStencilView(Device device, Resource resource, DepthStencilViewDescription description)
		: base(IntPtr.Zero)
	{
		device.CreateDepthStencilView(resource, description, this);
	}

	public DepthStencilView(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator DepthStencilView(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new DepthStencilView(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out DepthStencilViewDescription descRef)
	{
		descRef = default(DepthStencilViewDescription);
		fixed (DepthStencilViewDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2);
		}
	}
}
[Guid("db6f6ddb-ac77-4e88-8253-819df9bbf140")]
public class Device : ComObject
{
	public const int MultisampleCountMaximum = 32;

	protected internal DeviceContext ImmediateContext__;

	public unsafe string DebugName
	{
		get
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			byte* ptr = stackalloc byte[1024];
			int dataSizeRef = 1023;
			Result privateData = GetPrivateData(CommonGuid.DebugObjectName, ref dataSizeRef, new IntPtr(ptr));
			if (((Result)(ref privateData)).Failure)
			{
				return string.Empty;
			}
			ptr[dataSizeRef] = 0;
			return Marshal.PtrToStringAnsi(new IntPtr(ptr));
		}
		set
		{
			if (string.IsNullOrEmpty(value))
			{
				SetPrivateData(CommonGuid.DebugObjectName, 0, IntPtr.Zero);
				return;
			}
			IntPtr dataRef = Utilities.StringToHGlobalAnsi(value);
			SetPrivateData(CommonGuid.DebugObjectName, value.Length, dataRef);
		}
	}

	public FeatureLevel FeatureLevel => GetFeatureLevel();

	public DeviceCreationFlags CreationFlags => GetCreationFlags();

	public Result DeviceRemovedReason => GetDeviceRemovedReason();

	public DeviceContext ImmediateContext
	{
		get
		{
			if (ImmediateContext__ == null)
			{
				GetImmediateContext(out ImmediateContext__);
			}
			return ImmediateContext__;
		}
	}

	public int ExceptionMode
	{
		get
		{
			return GetExceptionMode();
		}
		set
		{
			SetExceptionMode(value);
		}
	}

	public Device(DriverType driverType)
		: this(driverType, DeviceCreationFlags.None)
	{
	}//IL_0001: Unknown result type (might be due to invalid IL or missing references)


	public Device(Adapter adapter)
		: this(adapter, DeviceCreationFlags.None)
	{
	}

	public Device(DriverType driverType, DeviceCreationFlags flags)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		CreateDevice(null, driverType, flags, null);
	}

	public Device(Adapter adapter, DeviceCreationFlags flags)
	{
		CreateDevice(adapter, (DriverType)0, flags, null);
	}

	public Device(DriverType driverType, DeviceCreationFlags flags, params FeatureLevel[] featureLevels)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		CreateDevice(null, driverType, flags, featureLevels);
	}

	public Device(Adapter adapter, DeviceCreationFlags flags, params FeatureLevel[] featureLevels)
	{
		CreateDevice(adapter, (DriverType)0, flags, featureLevels);
	}

	public static void CreateWithSwapChain(DriverType driverType, DeviceCreationFlags flags, SwapChainDescription swapChainDescription, out Device device, out SwapChain swapChain)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		CreateWithSwapChain(null, driverType, flags, null, swapChainDescription, out device, out swapChain);
	}

	public static void CreateWithSwapChain(Adapter adapter, DeviceCreationFlags flags, SwapChainDescription swapChainDescription, out Device device, out SwapChain swapChain)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		CreateWithSwapChain(adapter, (DriverType)0, flags, null, swapChainDescription, out device, out swapChain);
	}

	public static void CreateWithSwapChain(DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, SwapChainDescription swapChainDescription, out Device device, out SwapChain swapChain)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		CreateWithSwapChain(null, driverType, flags, featureLevels, swapChainDescription, out device, out swapChain);
	}

	public static void CreateWithSwapChain(Adapter adapter, DeviceCreationFlags flags, FeatureLevel[] featureLevels, SwapChainDescription swapChainDescription, out Device device, out SwapChain swapChain)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		CreateWithSwapChain(adapter, (DriverType)0, flags, featureLevels, swapChainDescription, out device, out swapChain);
	}

	private static void CreateWithSwapChain(Adapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels, SwapChainDescription swapChainDescription, out Device device, out SwapChain swapChain)
	{
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Expected O, but got Unknown
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Expected O, but got Unknown
		device = ((adapter == null) ? new Device(driverType, flags, featureLevels) : new Device(adapter, flags, featureLevels));
		Factory1 val = new Factory1();
		try
		{
			swapChain = new SwapChain((Factory)(object)val, (ComObject)(object)device, swapChainDescription);
		}
		finally
		{
			((IDisposable)val)?.Dispose();
		}
	}

	public unsafe CounterMetadata GetCounterMetadata(CounterDescription counterDescription)
	{
		CounterMetadata counterMetadata = new CounterMetadata();
		int num = 0;
		int num2 = 0;
		int num3 = 0;
		CheckCounter(counterDescription, out var typeRef, out var activeCountersRef, IntPtr.Zero, new IntPtr(&num), IntPtr.Zero, new IntPtr(&num2), IntPtr.Zero, new IntPtr(&num3));
		sbyte* ptr = stackalloc sbyte[(int)(uint)num];
		sbyte* ptr2 = stackalloc sbyte[(int)(uint)num2];
		sbyte* ptr3 = stackalloc sbyte[(int)(uint)num3];
		CheckCounter(counterDescription, out typeRef, out activeCountersRef, new IntPtr(ptr), new IntPtr(&num), new IntPtr(ptr2), new IntPtr(&num2), new IntPtr(ptr3), new IntPtr(&num3));
		counterMetadata.Type = typeRef;
		counterMetadata.HardwareCounterCount = activeCountersRef;
		counterMetadata.Name = Marshal.PtrToStringAnsi((IntPtr)ptr, num);
		counterMetadata.Units = Marshal.PtrToStringAnsi((IntPtr)ptr2, num2);
		counterMetadata.Description = Marshal.PtrToStringAnsi((IntPtr)ptr3, num3);
		return counterMetadata;
	}

	public T OpenSharedResource<T>(IntPtr resourceHandle) where T : ComObject
	{
		OpenSharedResource(resourceHandle, Utilities.GetGuidFromType(typeof(T)), out var resourceOut);
		return CppObject.FromPointer<T>(resourceOut);
	}

	public unsafe ComputeShaderFormatSupport CheckComputeShaderFormatSupport(Format format)
	{
		//IL_000a: Unknown result type (might be due to invalid IL or missing references)
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataFormatSupport2 featureDataFormatSupport = default(FeatureDataFormatSupport2);
		featureDataFormatSupport.InFormat = format;
		Result val = CheckFeatureSupport(Feature.ComputeShaders, new IntPtr(&featureDataFormatSupport), Utilities.SizeOf<FeatureDataFormatSupport2>());
		if (((Result)(ref val)).Failure)
		{
			return ComputeShaderFormatSupport.None;
		}
		return featureDataFormatSupport.OutFormatSupport2;
	}

	public unsafe FeatureDataD3D11Options CheckD3D11Feature()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D11Options result = default(FeatureDataD3D11Options);
		Result val = CheckFeatureSupport(Feature.D3D11Options, new IntPtr(&result), Utilities.SizeOf<FeatureDataD3D11Options>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataD3D11Options);
		}
		return result;
	}

	public unsafe FeatureDataShaderMinimumPrecisionSupport CheckShaderMinimumPrecisionSupport()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataShaderMinimumPrecisionSupport result = default(FeatureDataShaderMinimumPrecisionSupport);
		Result val = CheckFeatureSupport(Feature.ShaderMinimumPrecisionSupport, new IntPtr(&result), Utilities.SizeOf<FeatureDataShaderMinimumPrecisionSupport>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataShaderMinimumPrecisionSupport);
		}
		return result;
	}

	public unsafe bool CheckFullNonPow2TextureSupport()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0028: Invalid comparison between Unknown and I4
		//IL_003e: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D9Options featureDataD3D9Options = default(FeatureDataD3D9Options);
		Result val = CheckFeatureSupport(Feature.D3D9Options, new IntPtr(&featureDataD3D9Options), Utilities.SizeOf<FeatureDataD3D9Options>());
		if ((int)FeatureLevel <= 37632)
		{
			return ((Result)(ref val)).Failure;
		}
		if (((Result)(ref val)).Failure)
		{
			return false;
		}
		return RawBool.op_Implicit(featureDataD3D9Options.FullNonPow2TextureSupport);
	}

	public unsafe bool CheckTileBasedDeferredRendererSupport()
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataArchitectureInformation featureDataArchitectureInformation = default(FeatureDataArchitectureInformation);
		Result val = CheckFeatureSupport(Feature.ArchitectureInformation, new IntPtr(&featureDataArchitectureInformation), Utilities.SizeOf<FeatureDataArchitectureInformation>());
		if (((Result)(ref val)).Failure)
		{
			return false;
		}
		return RawBool.op_Implicit(featureDataArchitectureInformation.TileBasedDeferredRenderer);
	}

	public unsafe FeatureDataD3D11Options1 CheckD3D112Feature()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D11Options1 result = default(FeatureDataD3D11Options1);
		Result val = CheckFeatureSupport(Feature.D3D11Options1, new IntPtr(&result), Utilities.SizeOf<FeatureDataD3D11Options1>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataD3D11Options1);
		}
		return result;
	}

	public unsafe FeatureDataD3D11Options2 CheckD3D113Features2()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D11Options2 result = default(FeatureDataD3D11Options2);
		Result val = CheckFeatureSupport(Feature.D3D11Options2, new IntPtr(&result), Utilities.SizeOf<FeatureDataD3D11Options2>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataD3D11Options2);
		}
		return result;
	}

	public unsafe FeatureDataD3D11Options3 CheckD3D113Features3()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D11Options3 result = default(FeatureDataD3D11Options3);
		Result val = CheckFeatureSupport(Feature.D3D11Options3, new IntPtr(&result), Utilities.SizeOf<FeatureDataD3D11Options3>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataD3D11Options3);
		}
		return result;
	}

	public unsafe FeatureDataD3D11Options4 CheckD3D113Features4()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D11Options4 result = default(FeatureDataD3D11Options4);
		Result val = CheckFeatureSupport(Feature.D3D11Options4, new IntPtr(&result), Utilities.SizeOf<FeatureDataD3D11Options4>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataD3D11Options4);
		}
		return result;
	}

	public unsafe FeatureDataD3D11Options5 CheckD3D113Feature5()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataD3D11Options5 result = default(FeatureDataD3D11Options5);
		Result val = CheckFeatureSupport(Feature.D3D11Options5, new IntPtr(&result), Utilities.SizeOf<FeatureDataD3D11Options5>());
		if (((Result)(ref val)).Failure)
		{
			return default(FeatureDataD3D11Options5);
		}
		return result;
	}

	public unsafe bool CheckFeatureSupport(Feature feature)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_006e: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		switch (feature)
		{
		case Feature.ShaderDoubles:
		{
			FeatureDataDoubles featureDataDoubles = default(FeatureDataDoubles);
			val = CheckFeatureSupport(Feature.ShaderDoubles, new IntPtr(&featureDataDoubles), Utilities.SizeOf<FeatureDataDoubles>());
			if (((Result)(ref val)).Failure)
			{
				return false;
			}
			return RawBool.op_Implicit(featureDataDoubles.DoublePrecisionFloatShaderOps);
		}
		case Feature.ComputeShaders:
		case Feature.D3D10XHardwareOptions:
		{
			FeatureDataD3D10XHardwareOptions featureDataD3D10XHardwareOptions = default(FeatureDataD3D10XHardwareOptions);
			val = CheckFeatureSupport(Feature.D3D10XHardwareOptions, new IntPtr(&featureDataD3D10XHardwareOptions), Utilities.SizeOf<FeatureDataD3D10XHardwareOptions>());
			if (((Result)(ref val)).Failure)
			{
				return false;
			}
			return RawBool.op_Implicit(featureDataD3D10XHardwareOptions.ComputeShadersPlusRawAndStructuredBuffersViaShader4X);
		}
		default:
			throw new SharpDXException("Unsupported Feature. Use specialized CheckXXX methods", Array.Empty<object>());
		}
	}

	public unsafe Result CheckThreadingSupport(out bool supportsConcurrentResources, out bool supportsCommandLists)
	{
		//IL_0017: Unknown result type (might be due to invalid IL or missing references)
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		FeatureDataThreading featureDataThreading = default(FeatureDataThreading);
		Result result = CheckFeatureSupport(Feature.Threading, new IntPtr(&featureDataThreading), Utilities.SizeOf<FeatureDataThreading>());
		if (((Result)(ref result)).Failure)
		{
			supportsConcurrentResources = false;
			supportsCommandLists = false;
		}
		else
		{
			supportsConcurrentResources = RawBool.op_Implicit(featureDataThreading.DriverConcurrentCreates);
			supportsCommandLists = RawBool.op_Implicit(featureDataThreading.DriverCommandLists);
		}
		return result;
	}

	public static bool IsSupportedFeatureLevel(FeatureLevel featureLevel)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Expected I4, but got Unknown
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		Device device = new Device(IntPtr.Zero);
		DeviceContext immediateContextOut = null;
		try
		{
			FeatureLevel featureLevelRef;
			Result val = D3D11.CreateDevice(null, (DriverType)1, IntPtr.Zero, DeviceCreationFlags.None, (FeatureLevel[])(object)new FeatureLevel[1] { (FeatureLevel)(int)featureLevel }, 1, 7, device, out featureLevelRef, out immediateContextOut);
			return ((Result)(ref val)).Success && featureLevelRef == featureLevel;
		}
		finally
		{
			if (immediateContextOut != null)
			{
				((DisposeBase)immediateContextOut).Dispose();
			}
			if (((CppObject)device).NativePointer != IntPtr.Zero)
			{
				((DisposeBase)device).Dispose();
			}
		}
	}

	public static bool IsSupportedFeatureLevel(Adapter adapter, FeatureLevel featureLevel)
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Expected I4, but got Unknown
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		Device device = new Device(IntPtr.Zero);
		DeviceContext immediateContextOut = null;
		try
		{
			FeatureLevel featureLevelRef;
			Result val = D3D11.CreateDevice(adapter, (DriverType)0, IntPtr.Zero, DeviceCreationFlags.None, (FeatureLevel[])(object)new FeatureLevel[1] { (FeatureLevel)(int)featureLevel }, 1, 7, device, out featureLevelRef, out immediateContextOut);
			return ((Result)(ref val)).Success && featureLevelRef == featureLevel;
		}
		finally
		{
			if (immediateContextOut != null)
			{
				((DisposeBase)immediateContextOut).Dispose();
			}
			if (((CppObject)device).NativePointer != IntPtr.Zero)
			{
				((DisposeBase)device).Dispose();
			}
		}
	}

	public static FeatureLevel GetSupportedFeatureLevel()
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		Device device = new Device(IntPtr.Zero);
		FeatureLevel featureLevelRef;
		DeviceContext immediateContextOut;
		Result val = D3D11.CreateDevice(null, (DriverType)1, IntPtr.Zero, DeviceCreationFlags.None, null, 0, 7, device, out featureLevelRef, out immediateContextOut);
		((Result)(ref val)).CheckError();
		((DisposeBase)immediateContextOut).Dispose();
		((DisposeBase)device).Dispose();
		return featureLevelRef;
	}

	public static FeatureLevel GetSupportedFeatureLevel(Adapter adapter)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		Device device = new Device(IntPtr.Zero);
		FeatureLevel featureLevelRef;
		DeviceContext immediateContextOut;
		Result val = D3D11.CreateDevice(adapter, (DriverType)0, IntPtr.Zero, DeviceCreationFlags.None, null, 0, 7, device, out featureLevelRef, out immediateContextOut);
		((Result)(ref val)).CheckError();
		((DisposeBase)immediateContextOut).Dispose();
		((DisposeBase)device).Dispose();
		return featureLevelRef;
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && ImmediateContext__ != null)
		{
			((DisposeBase)ImmediateContext__).Dispose();
			ImmediateContext__ = null;
		}
		((ComObject)this).Dispose(disposing);
	}

	private void CreateDevice(Adapter adapter, DriverType driverType, DeviceCreationFlags flags, FeatureLevel[] featureLevels)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		FeatureLevel featureLevelRef;
		Result val = D3D11.CreateDevice(adapter, driverType, IntPtr.Zero, flags, featureLevels, (featureLevels != null) ? featureLevels.Length : 0, 7, this, out featureLevelRef, out ImmediateContext__);
		((Result)(ref val)).CheckError();
		if (ImmediateContext__ != null)
		{
			((IUnknown)this).AddReference();
			ImmediateContext__.Device__ = this;
		}
	}

	public static Device CreateFromDirect3D12(ComObject d3D12Device, DeviceCreationFlags flags, FeatureLevel[] featureLevels, Adapter adapter, params ComObject[] commandQueues)
	{
		if (d3D12Device == null)
		{
			throw new ArgumentNullException("d3D12Device");
		}
		D3D11.On12CreateDevice((IUnknown)(object)d3D12Device, flags, featureLevels, (featureLevels != null) ? featureLevels.Length : 0, (IUnknown[])(object)commandQueues, commandQueues.Length, 0, out var deviceOut, out var immediateContextOut, out var _);
		((DisposeBase)immediateContextOut).Dispose();
		return deviceOut;
	}

	public Device(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Device(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Device(nativePtr);
		}
		return null;
	}

	internal unsafe void CreateBuffer(ref BufferDescription descRef, DataBox? initialDataRef, Buffer bufferOut)
	{
		//IL_0011: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		DataBox value = default(DataBox);
		if (initialDataRef.HasValue)
		{
			value = initialDataRef.Value;
		}
		Result val;
		fixed (BufferDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			void* nativePointer = ((CppObject)this)._nativePointer;
			DataBox* intPtr = ((!initialDataRef.HasValue) ? null : (&value));
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)3 * (nint)sizeof(void*))))(nativePointer, ptr2, intPtr, &zero));
		}
		((CppObject)bufferOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateTexture1D(ref Texture1DDescription descRef, DataBox[] initialDataRef, Texture1D texture1DOut)
	{
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (DataBox* ptr = initialDataRef)
		{
			void* ptr2 = ptr;
			fixed (Texture1DDescription* ptr3 = &descRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)4 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, &zero));
			}
		}
		((CppObject)texture1DOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateTexture2D(ref Texture2DDescription descRef, DataBox[] initialDataRef, Texture2D texture2DOut)
	{
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (DataBox* ptr = initialDataRef)
		{
			void* ptr2 = ptr;
			fixed (Texture2DDescription* ptr3 = &descRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)5 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, &zero));
			}
		}
		((CppObject)texture2DOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateTexture3D(ref Texture3DDescription descRef, DataBox[] initialDataRef, Texture3D texture3DOut)
	{
		//IL_0049: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (DataBox* ptr = initialDataRef)
		{
			void* ptr2 = ptr;
			fixed (Texture3DDescription* ptr3 = &descRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)6 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, &zero));
			}
		}
		((CppObject)texture3DOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateShaderResourceView(Resource resourceRef, ShaderResourceViewDescription? descRef, ShaderResourceView sRViewOut)
	{
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		ShaderResourceViewDescription value = default(ShaderResourceViewDescription);
		if (descRef.HasValue)
		{
			value = descRef.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		ShaderResourceViewDescription* intPtr2 = ((!descRef.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, &zero2));
		((CppObject)sRViewOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateUnorderedAccessView(Resource resourceRef, UnorderedAccessViewDescription? descRef, UnorderedAccessView uAViewOut)
	{
		//IL_005a: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		UnorderedAccessViewDescription value = default(UnorderedAccessViewDescription);
		if (descRef.HasValue)
		{
			value = descRef.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		UnorderedAccessViewDescription* intPtr2 = ((!descRef.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, &zero2));
		((CppObject)uAViewOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateRenderTargetView(Resource resourceRef, RenderTargetViewDescription? descRef, RenderTargetView rTViewOut)
	{
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		RenderTargetViewDescription value = default(RenderTargetViewDescription);
		if (descRef.HasValue)
		{
			value = descRef.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		RenderTargetViewDescription* intPtr2 = ((!descRef.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, &zero2));
		((CppObject)rTViewOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateDepthStencilView(Resource resourceRef, DepthStencilViewDescription? descRef, DepthStencilView depthStencilViewOut)
	{
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		DepthStencilViewDescription value = default(DepthStencilViewDescription);
		if (descRef.HasValue)
		{
			value = descRef.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		DepthStencilViewDescription* intPtr2 = ((!descRef.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, &zero2));
		((CppObject)depthStencilViewOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateInputLayout(InputElement[] inputElementDescsRef, int numElements, IntPtr shaderBytecodeWithInputSignatureRef, PointerSize bytecodeLength, InputLayout inputLayoutOut)
	{
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0083: Unknown result type (might be due to invalid IL or missing references)
		InputElement.__Native[] array = new InputElement.__Native[inputElementDescsRef.Length];
		IntPtr zero = IntPtr.Zero;
		for (int i = 0; i < inputElementDescsRef.Length; i++)
		{
			inputElementDescsRef[i].__MarshalTo(ref array[i]);
		}
		Result val;
		fixed (InputElement.__Native* ptr = array)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, numElements, (void*)shaderBytecodeWithInputSignatureRef, PointerSize.op_Implicit(bytecodeLength), &zero));
		}
		((CppObject)inputLayoutOut).NativePointer = zero;
		for (int j = 0; j < inputElementDescsRef.Length; j++)
		{
			inputElementDescsRef[j].__MarshalFree(ref array[j]);
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateVertexShader(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, ClassLinkage classLinkageRef, VertexShader vertexShaderOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), (void*)zero, &zero2));
		((CppObject)vertexShaderOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateGeometryShader(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, ClassLinkage classLinkageRef, GeometryShader geometryShaderOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), (void*)zero, &zero2));
		((CppObject)geometryShaderOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateGeometryShaderWithStreamOutput(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, StreamOutputElement[] sODeclarationRef, int numEntries, int[] bufferStridesRef, int numStrides, int rasterizedStream, ClassLinkage classLinkageRef, GeometryShader geometryShaderOut)
	{
		//IL_0097: Unknown result type (might be due to invalid IL or missing references)
		//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
		StreamOutputElement.__Native[] array = ((sODeclarationRef == null) ? null : new StreamOutputElement.__Native[sODeclarationRef.Length]);
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		if (sODeclarationRef != null)
		{
			for (int i = 0; i < sODeclarationRef.Length; i++)
			{
				sODeclarationRef?[i].__MarshalTo(ref array[i]);
			}
		}
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val;
		fixed (int* ptr = bufferStridesRef)
		{
			void* ptr2 = ptr;
			fixed (StreamOutputElement.__Native* ptr3 = array)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int, void*, int, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)14 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), ptr4, numEntries, ptr2, numStrides, rasterizedStream, (void*)zero, &zero2));
			}
		}
		((CppObject)geometryShaderOut).NativePointer = zero2;
		if (sODeclarationRef != null)
		{
			for (int j = 0; j < sODeclarationRef.Length; j++)
			{
				sODeclarationRef?[j].__MarshalFree(ref array[j]);
			}
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreatePixelShader(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, ClassLinkage classLinkageRef, PixelShader pixelShaderOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)15 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), (void*)zero, &zero2));
		((CppObject)pixelShaderOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateHullShader(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, ClassLinkage classLinkageRef, HullShader hullShaderOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)16 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), (void*)zero, &zero2));
		((CppObject)hullShaderOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateDomainShader(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, ClassLinkage classLinkageRef, DomainShader domainShaderOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)17 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), (void*)zero, &zero2));
		((CppObject)domainShaderOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateComputeShader(IntPtr shaderBytecodeRef, PointerSize bytecodeLength, ClassLinkage classLinkageRef, ComputeShader computeShaderOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_004b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<ClassLinkage>((ICallbackable)(object)classLinkageRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)18 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)shaderBytecodeRef, PointerSize.op_Implicit(bytecodeLength), (void*)zero, &zero2));
		((CppObject)computeShaderOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateClassLinkage(ClassLinkage linkageOut)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)19 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &zero));
		((CppObject)linkageOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateBlendState(ref BlendStateDescription blendStateDescRef, BlendState blendStateOut)
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		BlendStateDescription.__Native @ref = default(BlendStateDescription.__Native);
		IntPtr zero = IntPtr.Zero;
		blendStateDescRef.__MarshalTo(ref @ref);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)20 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref, &zero));
		((CppObject)blendStateOut).NativePointer = zero;
		blendStateDescRef.__MarshalFree(ref @ref);
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateDepthStencilState(ref DepthStencilStateDescription depthStencilDescRef, DepthStencilState depthStencilStateOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (DepthStencilStateDescription* ptr = &depthStencilDescRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)21 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, &zero));
		}
		((CppObject)depthStencilStateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateRasterizerState(ref RasterizerStateDescription rasterizerDescRef, RasterizerState rasterizerStateOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (RasterizerStateDescription* ptr = &rasterizerDescRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)22 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, &zero));
		}
		((CppObject)rasterizerStateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateSamplerState(ref SamplerStateDescription samplerDescRef, SamplerState samplerStateOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (SamplerStateDescription* ptr = &samplerDescRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)23 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, &zero));
		}
		((CppObject)samplerStateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateQuery(QueryDescription queryDescRef, Query queryOut)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)24 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &queryDescRef, &zero));
		((CppObject)queryOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreatePredicate(QueryDescription predicateDescRef, Predicate predicateOut)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)25 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &predicateDescRef, &zero));
		((CppObject)predicateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateCounter(CounterDescription counterDescRef, Counter counterOut)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)26 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &counterDescRef, &zero));
		((CppObject)counterOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateDeferredContext(int contextFlags, DeviceContext deferredContextOut)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)27 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, contextFlags, &zero));
		((CppObject)deferredContextOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void OpenSharedResource(IntPtr hResource, Guid returnedInterface, out IntPtr resourceOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &resourceOut)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)28 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)hResource, &returnedInterface, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe FormatSupport CheckFormatSupport(Format format)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Expected I4, but got Unknown
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		FormatSupport result = default(FormatSupport);
		Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)29 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)format, &result));
		return result;
	}

	public unsafe int CheckMultisampleQualityLevels(Format format, int sampleCount)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Expected I4, but got Unknown
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		int result = default(int);
		Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)30 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)format, sampleCount, &result));
		return result;
	}

	public unsafe CounterCapabilities GetCounterCapabilities()
	{
		CounterCapabilities result = default(CounterCapabilities);
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)31 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &result);
		return result;
	}

	internal unsafe void CheckCounter(CounterDescription descRef, out CounterType typeRef, out int activeCountersRef, IntPtr szName, IntPtr nameLengthRef, IntPtr szUnits, IntPtr unitsLengthRef, IntPtr szDescription, IntPtr descriptionLengthRef)
	{
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		//IL_005e: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &activeCountersRef)
		{
			void* ptr2 = ptr;
			fixed (CounterType* ptr3 = &typeRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)32 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &descRef, ptr4, ptr2, (void*)szName, (void*)nameLengthRef, (void*)szUnits, (void*)unitsLengthRef, (void*)szDescription, (void*)descriptionLengthRef));
			}
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe Result CheckFeatureSupport(Feature feature, IntPtr featureSupportDataRef, int featureSupportDataSize)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		return Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)33 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)feature, (void*)featureSupportDataRef, featureSupportDataSize));
	}

	public unsafe Result GetPrivateData(Guid guid, ref int dataSizeRef, IntPtr dataRef)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		Result result;
		fixed (int* ptr = &dataSizeRef)
		{
			void* ptr2 = ptr;
			result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)34 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &guid, ptr2, (void*)dataRef));
		}
		return result;
	}

	public unsafe void SetPrivateData(Guid guid, int dataSize, IntPtr dataRef)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)35 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &guid, dataSize, (void*)dataRef));
		((Result)(ref val)).CheckError();
	}

	public unsafe void SetPrivateDataInterface(Guid guid, IUnknown dataRef)
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		//IL_0039: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)dataRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)36 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &guid, (void*)zero));
		((Result)(ref val)).CheckError();
	}

	internal unsafe FeatureLevel GetFeatureLevel()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, FeatureLevel>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)37 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}

	internal unsafe DeviceCreationFlags GetCreationFlags()
	{
		return ((delegate* unmanaged[Stdcall]<void*, DeviceCreationFlags>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)38 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}

	internal unsafe Result GetDeviceRemovedReason()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		return Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)39 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer));
	}

	internal unsafe void GetImmediateContext(out DeviceContext immediateContextOut)
	{
		IntPtr zero = IntPtr.Zero;
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)40 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &zero);
		if (zero != IntPtr.Zero)
		{
			immediateContextOut = new DeviceContext(zero);
		}
		else
		{
			immediateContextOut = null;
		}
	}

	internal unsafe void SetExceptionMode(int raiseFlags)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)41 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, raiseFlags));
		((Result)(ref val)).CheckError();
	}

	internal unsafe int GetExceptionMode()
	{
		return ((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)42 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}
}
[Guid("a04bfb29-08ef-43d6-a49c-a9bdbdcbe686")]
public class Device1 : Device
{
	protected internal DeviceContext1 ImmediateContext1__;

	public DeviceContext1 ImmediateContext1
	{
		get
		{
			if (ImmediateContext1__ == null)
			{
				GetImmediateContext1(out ImmediateContext1__);
			}
			return ImmediateContext1__;
		}
	}

	public DeviceContextState CreateDeviceContextState<T>(CreateDeviceContextStateFlags flags, FeatureLevel[] featureLevelsRef, out FeatureLevel chosenFeatureLevelRef) where T : ComObject
	{
		DeviceContextState deviceContextState = new DeviceContextState(IntPtr.Zero);
		CreateDeviceContextState(flags, featureLevelsRef, featureLevelsRef.Length, 7, Utilities.GetGuidFromType(typeof(T)), out chosenFeatureLevelRef, deviceContextState);
		return deviceContextState;
	}

	public T OpenSharedResource1<T>(IntPtr resourceHandle) where T : ComObject
	{
		OpenSharedResource1(resourceHandle, Utilities.GetGuidFromType(typeof(T)), out var resourceOut);
		return CppObject.FromPointer<T>(resourceOut);
	}

	public T OpenSharedResource1<T>(string name, SharedResourceFlags desiredAccess) where T : ComObject
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		OpenSharedResourceByName(name, desiredAccess, Utilities.GetGuidFromType(typeof(T)), out var resourceOut);
		return CppObject.FromPointer<T>(resourceOut);
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && ImmediateContext1__ != null)
		{
			((DisposeBase)ImmediateContext1__).Dispose();
			ImmediateContext1__ = null;
		}
		base.Dispose(disposing);
	}

	public Device1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Device1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Device1(nativePtr);
		}
		return null;
	}

	internal unsafe void GetImmediateContext1(out DeviceContext1 immediateContextOut)
	{
		IntPtr zero = IntPtr.Zero;
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)43 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &zero);
		if (zero != IntPtr.Zero)
		{
			immediateContextOut = new DeviceContext1(zero);
		}
		else
		{
			immediateContextOut = null;
		}
	}

	internal unsafe void CreateDeferredContext1(int contextFlags, DeviceContext1 deferredContextOut)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)44 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, contextFlags, &zero));
		((CppObject)deferredContextOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateBlendState1(ref BlendStateDescription1 blendStateDescRef, BlendState1 blendStateOut)
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		BlendStateDescription1.__Native @ref = default(BlendStateDescription1.__Native);
		IntPtr zero = IntPtr.Zero;
		blendStateDescRef.__MarshalTo(ref @ref);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)45 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref, &zero));
		((CppObject)blendStateOut).NativePointer = zero;
		blendStateDescRef.__MarshalFree(ref @ref);
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateRasterizerState1(ref RasterizerStateDescription1 rasterizerDescRef, RasterizerState1 rasterizerStateOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (RasterizerStateDescription1* ptr = &rasterizerDescRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)46 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, &zero));
		}
		((CppObject)rasterizerStateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateDeviceContextState(CreateDeviceContextStateFlags flags, FeatureLevel[] featureLevelsRef, int featureLevels, int sDKVersion, Guid emulatedInterface, out FeatureLevel chosenFeatureLevelRef, DeviceContextState contextStateOut)
	{
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (FeatureLevel* ptr = &chosenFeatureLevelRef)
		{
			void* ptr2 = ptr;
			fixed (FeatureLevel* ptr3 = featureLevelsRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int, int, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)47 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)flags, ptr4, featureLevels, sDKVersion, &emulatedInterface, ptr2, &zero));
			}
		}
		((CppObject)contextStateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void OpenSharedResource1(IntPtr hResource, Guid returnedInterface, out IntPtr resourceOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &resourceOut)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)48 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)hResource, &returnedInterface, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void OpenSharedResourceByName(string lpName, SharedResourceFlags dwDesiredAccess, Guid returnedInterface, out IntPtr resourceOut)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Expected I4, but got Unknown
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &resourceOut)
		{
			void* ptr2 = ptr;
			fixed (char* ptr3 = lpName)
			{
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)49 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr3, (int)dwDesiredAccess, &returnedInterface, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("9d06dffa-d1e5-4d07-83a8-1bb123f2f841")]
public class Device2 : Device1
{
	protected internal DeviceContext2 ImmediateContext2__;

	public DeviceContext2 ImmediateContext2
	{
		get
		{
			if (ImmediateContext2__ == null)
			{
				GetImmediateContext2(out ImmediateContext2__);
			}
			return ImmediateContext2__;
		}
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && ImmediateContext2__ != null)
		{
			((DisposeBase)ImmediateContext2__).Dispose();
			ImmediateContext2__ = null;
		}
		base.Dispose(disposing);
	}

	public Device2(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Device2(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Device2(nativePtr);
		}
		return null;
	}

	internal unsafe void GetImmediateContext2(out DeviceContext2 immediateContextOut)
	{
		IntPtr zero = IntPtr.Zero;
		((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)50 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &zero);
		if (zero != IntPtr.Zero)
		{
			immediateContextOut = new DeviceContext2(zero);
		}
		else
		{
			immediateContextOut = null;
		}
	}

	internal unsafe void CreateDeferredContext2(int contextFlags, DeviceContext2 deferredContextOut)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)51 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, contextFlags, &zero));
		((CppObject)deferredContextOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetResourceTiling(Resource tiledResourceRef, out int numTilesForEntireResourceRef, out PackedMipDescription packedMipDescRef, out TileShape standardTileShapeForNonPackedMipsRef, ref int numSubresourceTilingsRef, int firstSubresourceTilingToGet, SubResourceTiling[] subresourceTilingsForNonPackedMipsRef)
	{
		IntPtr zero = IntPtr.Zero;
		packedMipDescRef = default(PackedMipDescription);
		standardTileShapeForNonPackedMipsRef = default(TileShape);
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)tiledResourceRef);
		fixed (SubResourceTiling* ptr = subresourceTilingsForNonPackedMipsRef)
		{
			void* ptr2 = ptr;
			fixed (int* ptr3 = &numSubresourceTilingsRef)
			{
				void* ptr4 = ptr3;
				fixed (TileShape* ptr5 = &standardTileShapeForNonPackedMipsRef)
				{
					void* ptr6 = ptr5;
					fixed (PackedMipDescription* ptr7 = &packedMipDescRef)
					{
						void* ptr8 = ptr7;
						fixed (int* ptr9 = &numTilesForEntireResourceRef)
						{
							void* ptr10 = ptr9;
							((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, void*, int, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)52 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero, ptr10, ptr8, ptr6, ptr4, firstSubresourceTilingToGet, ptr2);
						}
					}
				}
			}
		}
	}

	public unsafe int CheckMultisampleQualityLevels1(Format format, int sampleCount, CheckMultisampleQualityLevelsFlags flags)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Expected I4, but got Unknown
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		int result = default(int);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)53 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)format, sampleCount, (int)flags, &result));
		((Result)(ref val)).CheckError();
		return result;
	}
}
[Guid("A05C8C37-D2C6-4732-B3A0-9CE0B0DC9AE6")]
public class Device3 : Device2
{
	protected internal DeviceContext3 ImmediateContext3__;

	public DeviceContext3 ImmediateContext3
	{
		get
		{
			if (ImmediateContext3__ == null)
			{
				GetImmediateContext3(out ImmediateContext3__);
			}
			return ImmediateContext3__;
		}
	}

	protected override void Dispose(bool disposing)
	{
		if (disposing && ImmediateContext3__ != null)
		{
			((DisposeBase)ImmediateContext3__).Dispose();
			ImmediateContext3__ = null;
		}
		base.Dispose(disposing);
	}

	public Device3(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Device3(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Device3(nativePtr);
		}
		return null;
	}

	internal unsafe void CreateTexture2D1(ref Texture2DDescription1 desc1Ref, DataBox[] initialDataRef, Texture2D1 texture2DOut)
	{
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (DataBox* ptr = initialDataRef)
		{
			void* ptr2 = ptr;
			fixed (Texture2DDescription1* ptr3 = &desc1Ref)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)54 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, &zero));
			}
		}
		((CppObject)texture2DOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateTexture3D1(ref Texture3DDescription1 desc1Ref, DataBox[] initialDataRef, Texture3D1 texture3DOut)
	{
		//IL_004a: Unknown result type (might be due to invalid IL or missing references)
		//IL_004f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (DataBox* ptr = initialDataRef)
		{
			void* ptr2 = ptr;
			fixed (Texture3DDescription1* ptr3 = &desc1Ref)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)55 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, &zero));
			}
		}
		((CppObject)texture3DOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateRasterizerState2(ref RasterizerStateDescription2 rasterizerDescRef, RasterizerState2 rasterizerStateOut)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val;
		fixed (RasterizerStateDescription2* ptr = &rasterizerDescRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)56 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, &zero));
		}
		((CppObject)rasterizerStateOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateShaderResourceView1(Resource resourceRef, ShaderResourceViewDescription1? desc1Ref, ShaderResourceView1 sRView1Out)
	{
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		ShaderResourceViewDescription1 value = default(ShaderResourceViewDescription1);
		if (desc1Ref.HasValue)
		{
			value = desc1Ref.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		ShaderResourceViewDescription1* intPtr2 = ((!desc1Ref.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)57 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, &zero2));
		((CppObject)sRView1Out).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateUnorderedAccessView1(Resource resourceRef, UnorderedAccessViewDescription1? desc1Ref, UnorderedAccessView1 uAView1Out)
	{
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		UnorderedAccessViewDescription1 value = default(UnorderedAccessViewDescription1);
		if (desc1Ref.HasValue)
		{
			value = desc1Ref.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		UnorderedAccessViewDescription1* intPtr2 = ((!desc1Ref.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)58 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, &zero2));
		((CppObject)uAView1Out).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateRenderTargetView1(Resource resourceRef, RenderTargetViewDescription1? desc1Ref, RenderTargetView1 rTView1Out)
	{
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0060: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)resourceRef);
		RenderTargetViewDescription1 value = default(RenderTargetViewDescription1);
		if (desc1Ref.HasValue)
		{
			value = desc1Ref.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		void* intPtr = (void*)zero;
		RenderTargetViewDescription1* intPtr2 = ((!desc1Ref.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePoi

plugins/OverlayDearImGui.Shared/OverlayDearImGui.Shared.dll

Decompiled a month ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using ImGuiNET;
using Microsoft.CodeAnalysis;
using OverlayDearImGui.Windows;
using SharpDX;
using SharpDX.DXGI;
using SharpDX.Direct3D;
using SharpDX.Direct3D11;
using SharpDX.Mathematics.Interop;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("OverlayDearImGui.BepInEx5")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("OverlayDearImGui.Shared")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("2.0.0.0")]
[assembly: AssemblyInformationalVersion("2.0.0+56b0830b20d078c5218c3627d661348962d8145d")]
[assembly: AssemblyProduct("OverlayDearImGui.Shared")]
[assembly: AssemblyTitle("OverlayDearImGui.Shared")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace AutoThunderstoreVersion
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	internal class AutoVersionAttribute : Attribute
	{
	}
}
namespace OverlayDearImGui
{
	internal sealed class ClonedDrawData : IDisposable
	{
		public unsafe ImDrawData* Data { get; private set; }

		public unsafe ClonedDrawData(ImDrawDataPtr inp)
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_0076: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_008a: Unknown result type (might be due to invalid IL or missing references)
			long num = Marshal.SizeOf<ImDrawData>();
			Data = (ImDrawData*)(void*)ImGui.MemAlloc((uint)num);
			Buffer.MemoryCopy(ImDrawDataPtr.op_Implicit(inp), Data, num, num);
			int size = ((ImDrawDataPtr)(ref inp)).CmdLists.Size;
			IntPtr intPtr = ImGui.MemAlloc((uint)(Marshal.SizeOf<IntPtr>() * size));
			Unsafe.Write(&((ImDrawData)Data).CmdLists, new ImVector(size, size, intPtr));
			for (int i = 0; i < ((ImDrawDataPtr)(ref inp)).CmdLists.Size; i++)
			{
				((ImVector)(&((ImDrawData)Data).CmdLists)).Ref<ImDrawListPtr>(i) = ((ImDrawListPtr)(ref ((ImDrawDataPtr)(ref inp)).CmdLists[i])).CloneOutput();
			}
		}

		public unsafe void Dispose()
		{
			if (Data != null)
			{
				for (int i = 0; i < ((ImDrawData)Data).CmdListsCount; i++)
				{
					((ImDrawListPtr)(ref ((ImVector)(&((ImDrawData)Data).CmdLists)).Ref<ImDrawListPtr>(i))).Destroy();
				}
				ImGuiNative.ImDrawData_destroy(Data);
				Data = null;
			}
		}
	}
	internal sealed class DisposableList<U> : List<U>, IDisposable where U : IDisposable
	{
		public DisposableList()
		{
		}

		public DisposableList(int capacity)
			: base(capacity)
		{
		}

		public void Dispose()
		{
			using (Enumerator enumerator = GetEnumerator())
			{
				while (enumerator.MoveNext())
				{
					enumerator.Current.Dispose();
				}
			}
			Clear();
		}
	}
	public interface IConfigEntry<T>
	{
		T Get();

		void Set(T value);
	}
	public static class ImGuiDX11Impl
	{
		public struct VERTEX_CONSTANT_BUFFER_DX11
		{
			public unsafe fixed float mvp[16];
		}

		private unsafe delegate void ImDrawUserCallBack(ImDrawList* a, ImDrawCmd* b);

		private class StateBackup
		{
			public InputLayout InputLayout;

			public PrimitiveTopology PrimitiveTopology;

			public Buffer IndexBuffer;

			public Format IndexBufferFormat;

			public int IndexBufferOffset;

			public Buffer[] VertexBuffers;

			public int[] VertexBufferStrides;

			public int[] VertexBufferOffsets;

			public RasterizerState RS;

			public Rectangle[] ScissorRects;

			public RawViewportF[] Viewports;

			public BlendState BlendState;

			public RawColor4 BlendFactor;

			public int SampleMask;

			public DepthStencilState DepthStencilState;

			public int DepthStencilRef;

			public DepthStencilView DepthStencilView;

			public RenderTargetView[] RenderTargetViews;

			public VertexShader VS;

			public Buffer[] VSConstantBuffers;

			public SamplerState[] VSSamplers;

			public ShaderResourceView[] VSResourceViews;

			public HullShader HS;

			public Buffer[] HSConstantBuffers;

			public SamplerState[] HSSamplers;

			public ShaderResourceView[] HSResourceViews;

			public DomainShader DS;

			public Buffer[] DSConstantBuffers;

			public SamplerState[] DSSamplers;

			public ShaderResourceView[] DSResourceViews;

			public GeometryShader GS;

			public Buffer[] GSConstantBuffers;

			public SamplerState[] GSSamplers;

			public ShaderResourceView[] GSResourceViews;

			public PixelShader PS;

			public Buffer[] PSConstantBuffers;

			public SamplerState[] PSSamplers;

			public ShaderResourceView[] PSResourceViews;

			public ComputeShader CS;

			public Buffer[] CSConstantBuffers;

			public SamplerState[] CSSamplers;

			public ShaderResourceView[] CSResourceViews;

			public UnorderedAccessView[] CSUAVs;
		}

		private static IntPtr _renderNamePtr;

		private static Device _device;

		private static DeviceContext _deviceContext;

		private static ShaderResourceView _fontResourceView;

		private static SamplerState _fontSampler;

		private static VertexShader _vertexShader;

		private static PixelShader _pixelShader;

		private static InputLayout _inputLayout;

		private static Buffer _vertexConstantBuffer;

		private static BlendState _blendState;

		private static RasterizerState _rasterizerState;

		private static DepthStencilState _depthStencilState;

		private static Buffer _vertexBuffer;

		private static Buffer _indexBuffer;

		private static int _vertexBufferSize;

		private static int _indexBufferSize;

		private static VertexBufferBinding _vertexBinding;

		private static RawColor4 _blendColor = new RawColor4(0f, 0f, 0f, 0f);

		private unsafe static void ImGui_ImplDX11_SetupRenderState(ImDrawData* draw_data, IntPtr ID3D11DeviceContextPtr)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_004b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0102: Unknown result type (might be due to invalid IL or missing references)
			//IL_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0150: Unknown result type (might be due to invalid IL or missing references)
			DeviceContext val = new DeviceContext(ID3D11DeviceContextPtr);
			val.Rasterizer.SetViewport(0f, 0f, ((Vector2)(&((ImDrawData)draw_data).DisplaySize)).x, ((Vector2)(&((ImDrawData)draw_data).DisplaySize)).y, 0f, 1f);
			val.InputAssembler.InputLayout = _inputLayout;
			InputAssemblerStage inputAssembler = val.InputAssembler;
			VertexBufferBinding val2 = default(VertexBufferBinding);
			((VertexBufferBinding)(ref val2)).Stride = Unsafe.SizeOf<ImDrawVert>();
			((VertexBufferBinding)(ref val2)).Offset = 0;
			((VertexBufferBinding)(ref val2)).Buffer = _vertexBuffer;
			inputAssembler.SetVertexBuffers(0, val2);
			val.InputAssembler.SetIndexBuffer(_indexBuffer, (Format)57, 0);
			val.InputAssembler.PrimitiveTopology = (PrimitiveTopology)4;
			((CommonShaderStage)val.VertexShader).SetShader((DeviceChild)(object)_vertexShader, (ClassInstance[])null, 0);
			((CommonShaderStage)val.VertexShader).SetConstantBuffer(0, _vertexConstantBuffer);
			((CommonShaderStage)val.PixelShader).SetShader((DeviceChild)(object)_pixelShader, (ClassInstance[])null, 0);
			((CommonShaderStage)val.PixelShader).SetSampler(0, _fontSampler);
			((CommonShaderStage)val.GeometryShader).SetShader((DeviceChild)null, (ClassInstance[])null, 0);
			((CommonShaderStage)val.HullShader).SetShader((DeviceChild)null, (ClassInstance[])null, 0);
			((CommonShaderStage)val.DomainShader).SetShader((DeviceChild)null, (ClassInstance[])null, 0);
			((CommonShaderStage)val.ComputeShader).SetShader((DeviceChild)null, (ClassInstance[])null, 0);
			RawColor4 value = default(RawColor4);
			((RawColor4)(ref value))..ctor(0f, 0f, 0f, 0f);
			val.OutputMerger.SetBlendState(_blendState, (RawColor4?)value, uint.MaxValue);
			val.OutputMerger.SetDepthStencilState(_depthStencilState, 0);
			val.Rasterizer.State = _rasterizerState;
		}

		public unsafe static void RenderDrawData(ImDrawData* draw_data)
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: Expected O, but got Unknown
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0179: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_012c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_015f: Expected O, but got Unknown
			//IL_0275: Unknown result type (might be due to invalid IL or missing references)
			//IL_0483: Unknown result type (might be due to invalid IL or missing references)
			//IL_0488: Unknown result type (might be due to invalid IL or missing references)
			//IL_04bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_04c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_051d: Unknown result type (might be due to invalid IL or missing references)
			//IL_051f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_0531: Unknown result type (might be due to invalid IL or missing references)
			//IL_0533: Unknown result type (might be due to invalid IL or missing references)
			//IL_053d: Unknown result type (might be due to invalid IL or missing references)
			//IL_054c: Unknown result type (might be due to invalid IL or missing references)
			//IL_054e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0558: Unknown result type (might be due to invalid IL or missing references)
			//IL_0560: Unknown result type (might be due to invalid IL or missing references)
			//IL_0562: Unknown result type (might be due to invalid IL or missing references)
			//IL_056c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0579: Unknown result type (might be due to invalid IL or missing references)
			//IL_0580: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_058c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0593: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_05e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f8: Expected O, but got Unknown
			//IL_05f9: Unknown result type (might be due to invalid IL or missing references)
			//IL_0600: Unknown result type (might be due to invalid IL or missing references)
			//IL_060d: Unknown result type (might be due to invalid IL or missing references)
			if (draw_data == null || ((Vector2)(&((ImDrawData)draw_data).DisplaySize)).x <= 0f || ((Vector2)(&((ImDrawData)draw_data).DisplaySize)).y <= 0f)
			{
				return;
			}
			DeviceContext deviceContext = _deviceContext;
			if (_vertexBuffer == null || _vertexBufferSize < ((ImDrawData)draw_data).TotalVtxCount)
			{
				Buffer vertexBuffer = _vertexBuffer;
				if (vertexBuffer != null)
				{
					((DisposeBase)vertexBuffer).Dispose();
				}
				_vertexBufferSize = ((ImDrawData)draw_data).TotalVtxCount + 5000;
				_vertexBuffer = new Buffer(_device, new BufferDescription
				{
					Usage = (ResourceUsage)2,
					SizeInBytes = _vertexBufferSize * Unsafe.SizeOf<ImDrawVert>(),
					BindFlags = (BindFlags)1,
					CpuAccessFlags = (CpuAccessFlags)65536,
					OptionFlags = (ResourceOptionFlags)0
				});
				VertexBufferBinding vertexBinding = default(VertexBufferBinding);
				((VertexBufferBinding)(ref vertexBinding)).Buffer = _vertexBuffer;
				((VertexBufferBinding)(ref vertexBinding)).Stride = Unsafe.SizeOf<ImDrawVert>();
				((VertexBufferBinding)(ref vertexBinding)).Offset = 0;
				_vertexBinding = vertexBinding;
			}
			if (_indexBuffer == null || _indexBufferSize < ((ImDrawData)draw_data).TotalIdxCount)
			{
				Buffer indexBuffer = _indexBuffer;
				if (indexBuffer != null)
				{
					((DisposeBase)indexBuffer).Dispose();
				}
				_indexBufferSize = ((ImDrawData)draw_data).TotalIdxCount + 10000;
				_indexBuffer = new Buffer(_device, new BufferDescription
				{
					Usage = (ResourceUsage)2,
					SizeInBytes = _indexBufferSize * 2,
					BindFlags = (BindFlags)2,
					CpuAccessFlags = (CpuAccessFlags)65536
				});
			}
			DataStream val = default(DataStream);
			deviceContext.MapSubresource(_vertexBuffer, (MapMode)4, (MapFlags)0, ref val);
			DataStream val2 = default(DataStream);
			deviceContext.MapSubresource(_indexBuffer, (MapMode)4, (MapFlags)0, ref val2);
			ImDrawVert* ptr = (ImDrawVert*)(void*)val.DataPointer;
			ushort* ptr2 = (ushort*)(void*)val2.DataPointer;
			for (int i = 0; i < ((ImDrawData)draw_data).CmdListsCount; i++)
			{
				ImDrawList* ptr3 = (ImDrawList*)(void*)((ImVector)(&((ImDrawData)draw_data).CmdLists)).Ref<IntPtr>(i);
				int num = ((ImVector)(&((ImDrawList)ptr3).VtxBuffer)).Size * Unsafe.SizeOf<ImDrawVert>();
				Buffer.MemoryCopy((void*)((ImVector)(&((ImDrawList)ptr3).VtxBuffer)).Data, ptr, num, num);
				num = ((ImVector)(&((ImDrawList)ptr3).IdxBuffer)).Size * 2;
				Buffer.MemoryCopy((void*)((ImVector)(&((ImDrawList)ptr3).IdxBuffer)).Data, ptr2, num, num);
				ptr = (ImDrawVert*)((byte*)ptr + (nint)((ImVector)(&((ImDrawList)ptr3).VtxBuffer)).Size * (nint)Unsafe.SizeOf<ImDrawVert>());
				ptr2 += ((ImVector)(&((ImDrawList)ptr3).IdxBuffer)).Size;
			}
			deviceContext.UnmapSubresource((Resource)(object)_vertexBuffer, 0);
			deviceContext.UnmapSubresource((Resource)(object)_indexBuffer, 0);
			DataStream val3 = default(DataStream);
			deviceContext.MapSubresource(_vertexConstantBuffer, (MapMode)4, (MapFlags)0, ref val3);
			VERTEX_CONSTANT_BUFFER_DX11* ptr4 = (VERTEX_CONSTANT_BUFFER_DX11*)(void*)val3.DataPointer;
			float x = ((Vector2)(&((ImDrawData)draw_data).DisplayPos)).x;
			float num2 = ((Vector2)(&((ImDrawData)draw_data).DisplayPos)).x + ((Vector2)(&((ImDrawData)draw_data).DisplaySize)).x;
			float y = ((Vector2)(&((ImDrawData)draw_data).DisplayPos)).y;
			float num3 = ((Vector2)(&((ImDrawData)draw_data).DisplayPos)).y + ((Vector2)(&((ImDrawData)draw_data).DisplaySize)).y;
			float* fixedElementField = ptr4->mvp;
			*fixedElementField = 2f / (num2 - x);
			ptr4->mvp[1] = 0f;
			ptr4->mvp[2] = 0f;
			ptr4->mvp[3] = 0f;
			ptr4->mvp[4] = 0f;
			ptr4->mvp[5] = 2f / (y - num3);
			ptr4->mvp[6] = 0f;
			ptr4->mvp[7] = 0f;
			ptr4->mvp[8] = 0f;
			ptr4->mvp[9] = 0f;
			ptr4->mvp[10] = 0.5f;
			ptr4->mvp[11] = 0f;
			ptr4->mvp[12] = (num2 + x) / (x - num2);
			ptr4->mvp[13] = (y + num3) / (num3 - y);
			ptr4->mvp[14] = 0.5f;
			ptr4->mvp[15] = 1f;
			deviceContext.UnmapSubresource((Resource)(object)_vertexConstantBuffer, 0);
			StateBackup old = BackupRenderState(deviceContext);
			ImGui_ImplDX11_SetupRenderState(draw_data, ((CppObject)deviceContext).NativePointer);
			int num4 = 0;
			int num5 = 0;
			Vector2 displayPos = ((ImDrawData)draw_data).DisplayPos;
			Vector2 val5 = default(Vector2);
			Vector2 val6 = default(Vector2);
			RawRectangle val7 = default(RawRectangle);
			for (int j = 0; j < ((ImDrawData)draw_data).CmdListsCount; j++)
			{
				ImDrawList* ptr5 = (ImDrawList*)(void*)((ImVector)(&((ImDrawData)draw_data).CmdLists)).Ref<IntPtr>(j);
				for (int k = 0; k < ((ImVector)(&((ImDrawList)ptr5).CmdBuffer)).Size; k++)
				{
					ImDrawCmd val4 = ((ImVector)(&((ImDrawList)ptr5).CmdBuffer)).Ref<ImDrawCmd>(k);
					if (val4.UserCallback != IntPtr.Zero)
					{
						ImDrawUserCallBack delegateForFunctionPointer = Marshal.GetDelegateForFunctionPointer<ImDrawUserCallBack>(val4.UserCallback);
						if (val4.UserCallback == new IntPtr(-1))
						{
							ImGui_ImplDX11_SetupRenderState(draw_data, ((CppObject)deviceContext).NativePointer);
						}
						else
						{
							delegateForFunctionPointer(ptr5, &val4);
						}
						continue;
					}
					((Vector2)(ref val5))..ctor(val4.ClipRect.x - displayPos.x, val4.ClipRect.y - displayPos.y);
					((Vector2)(ref val6))..ctor(val4.ClipRect.z - displayPos.x, val4.ClipRect.w - displayPos.y);
					if (!(val6.x <= val5.x) && !(val6.y <= val5.y))
					{
						((RawRectangle)(ref val7))..ctor((int)val5.x, (int)val5.y, (int)val6.x, (int)val6.y);
						deviceContext.Rasterizer.SetScissorRectangles<RawRectangle>((RawRectangle[])(object)new RawRectangle[1] { val7 });
						((CommonShaderStage)deviceContext.PixelShader).SetShaderResource(0, new ShaderResourceView(val4.TextureId));
						deviceContext.DrawIndexed((int)val4.ElemCount, (int)(val4.IdxOffset + num4), (int)(val4.VtxOffset + num5));
					}
				}
				num4 += ((ImVector)(&((ImDrawList)ptr5).IdxBuffer)).Size;
				num5 += ((ImVector)(&((ImDrawList)ptr5).VtxBuffer)).Size;
			}
			RestoreRenderState(deviceContext, old);
		}

		private static StateBackup BackupRenderState(DeviceContext ctx)
		{
			//IL_007c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			StateBackup stateBackup = new StateBackup
			{
				ScissorRects = new Rectangle[16],
				Viewports = (RawViewportF[])(object)new RawViewportF[16],
				VertexBuffers = (Buffer[])(object)new Buffer[32],
				VertexBufferStrides = new int[32],
				VertexBufferOffsets = new int[32],
				InputLayout = ctx.InputAssembler.InputLayout
			};
			ctx.InputAssembler.GetIndexBuffer(ref stateBackup.IndexBuffer, ref stateBackup.IndexBufferFormat, ref stateBackup.IndexBufferOffset);
			stateBackup.PrimitiveTopology = ctx.InputAssembler.PrimitiveTopology;
			ctx.InputAssembler.GetVertexBuffers(0, 32, stateBackup.VertexBuffers, stateBackup.VertexBufferStrides, stateBackup.VertexBufferOffsets);
			stateBackup.RS = ctx.Rasterizer.State;
			ctx.Rasterizer.GetScissorRectangles<Rectangle>(stateBackup.ScissorRects);
			ctx.Rasterizer.GetViewports<RawViewportF>(stateBackup.Viewports);
			stateBackup.BlendState = ctx.OutputMerger.GetBlendState(ref stateBackup.BlendFactor, ref stateBackup.SampleMask);
			stateBackup.DepthStencilState = ctx.OutputMerger.GetDepthStencilState(ref stateBackup.DepthStencilRef);
			stateBackup.RenderTargetViews = ctx.OutputMerger.GetRenderTargets(8, ref stateBackup.DepthStencilView);
			stateBackup.VS = ((CommonShaderStage<VertexShader>)(object)ctx.VertexShader).Get();
			stateBackup.VSSamplers = ((CommonShaderStage)ctx.VertexShader).GetSamplers(0, 16);
			stateBackup.VSConstantBuffers = ((CommonShaderStage)ctx.VertexShader).GetConstantBuffers(0, 14);
			stateBackup.VSResourceViews = ((CommonShaderStage)ctx.VertexShader).GetShaderResources(0, 128);
			stateBackup.HS = ((CommonShaderStage<HullShader>)(object)ctx.HullShader).Get();
			stateBackup.HSSamplers = ((CommonShaderStage)ctx.HullShader).GetSamplers(0, 16);
			stateBackup.HSConstantBuffers = ((CommonShaderStage)ctx.HullShader).GetConstantBuffers(0, 14);
			stateBackup.HSResourceViews = ((CommonShaderStage)ctx.HullShader).GetShaderResources(0, 128);
			stateBackup.DS = ((CommonShaderStage<DomainShader>)(object)ctx.DomainShader).Get();
			stateBackup.DSSamplers = ((CommonShaderStage)ctx.DomainShader).GetSamplers(0, 16);
			stateBackup.DSConstantBuffers = ((CommonShaderStage)ctx.DomainShader).GetConstantBuffers(0, 14);
			stateBackup.DSResourceViews = ((CommonShaderStage)ctx.DomainShader).GetShaderResources(0, 128);
			stateBackup.GS = ((CommonShaderStage<GeometryShader>)(object)ctx.GeometryShader).Get();
			stateBackup.GSSamplers = ((CommonShaderStage)ctx.GeometryShader).GetSamplers(0, 16);
			stateBackup.GSConstantBuffers = ((CommonShaderStage)ctx.GeometryShader).GetConstantBuffers(0, 14);
			stateBackup.GSResourceViews = ((CommonShaderStage)ctx.GeometryShader).GetShaderResources(0, 128);
			stateBackup.PS = ((CommonShaderStage<PixelShader>)(object)ctx.PixelShader).Get();
			stateBackup.PSSamplers = ((CommonShaderStage)ctx.PixelShader).GetSamplers(0, 16);
			stateBackup.PSConstantBuffers = ((CommonShaderStage)ctx.PixelShader).GetConstantBuffers(0, 14);
			stateBackup.PSResourceViews = ((CommonShaderStage)ctx.PixelShader).GetShaderResources(0, 128);
			stateBackup.CS = ((CommonShaderStage<ComputeShader>)(object)ctx.ComputeShader).Get();
			stateBackup.CSSamplers = ((CommonShaderStage)ctx.ComputeShader).GetSamplers(0, 16);
			stateBackup.CSConstantBuffers = ((CommonShaderStage)ctx.ComputeShader).GetConstantBuffers(0, 14);
			stateBackup.CSResourceViews = ((CommonShaderStage)ctx.ComputeShader).GetShaderResources(0, 128);
			stateBackup.CSUAVs = ctx.ComputeShader.GetUnorderedAccessViews(0, 8);
			return stateBackup;
		}

		private static void RestoreRenderState(DeviceContext ctx, StateBackup old)
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
			ctx.InputAssembler.InputLayout = old.InputLayout;
			ctx.InputAssembler.SetIndexBuffer(old.IndexBuffer, old.IndexBufferFormat, old.IndexBufferOffset);
			ctx.InputAssembler.PrimitiveTopology = old.PrimitiveTopology;
			ctx.InputAssembler.SetVertexBuffers(0, old.VertexBuffers, old.VertexBufferStrides, old.VertexBufferOffsets);
			ctx.Rasterizer.State = old.RS;
			ctx.Rasterizer.SetScissorRectangles<Rectangle>(old.ScissorRects);
			ctx.Rasterizer.SetViewports(old.Viewports, old.Viewports.Length);
			ctx.OutputMerger.SetBlendState(old.BlendState, (RawColor4?)old.BlendFactor, old.SampleMask);
			ctx.OutputMerger.SetDepthStencilState(old.DepthStencilState, old.DepthStencilRef);
			ctx.OutputMerger.SetRenderTargets(old.DepthStencilView, old.RenderTargetViews);
			((CommonShaderStage<VertexShader>)(object)ctx.VertexShader).Set(old.VS);
			((CommonShaderStage)ctx.VertexShader).SetSamplers(0, old.VSSamplers);
			((CommonShaderStage)ctx.VertexShader).SetConstantBuffers(0, old.VSConstantBuffers);
			((CommonShaderStage)ctx.VertexShader).SetShaderResources(0, old.VSResourceViews);
			((CommonShaderStage<HullShader>)(object)ctx.HullShader).Set(old.HS);
			((CommonShaderStage)ctx.HullShader).SetSamplers(0, old.HSSamplers);
			((CommonShaderStage)ctx.HullShader).SetConstantBuffers(0, old.HSConstantBuffers);
			((CommonShaderStage)ctx.HullShader).SetShaderResources(0, old.HSResourceViews);
			((CommonShaderStage<DomainShader>)(object)ctx.DomainShader).Set(old.DS);
			((CommonShaderStage)ctx.DomainShader).SetSamplers(0, old.DSSamplers);
			((CommonShaderStage)ctx.DomainShader).SetConstantBuffers(0, old.DSConstantBuffers);
			((CommonShaderStage)ctx.DomainShader).SetShaderResources(0, old.DSResourceViews);
			((CommonShaderStage<GeometryShader>)(object)ctx.GeometryShader).Set(old.GS);
			((CommonShaderStage)ctx.GeometryShader).SetSamplers(0, old.GSSamplers);
			((CommonShaderStage)ctx.GeometryShader).SetConstantBuffers(0, old.GSConstantBuffers);
			((CommonShaderStage)ctx.GeometryShader).SetShaderResources(0, old.GSResourceViews);
			((CommonShaderStage<PixelShader>)(object)ctx.PixelShader).Set(old.PS);
			((CommonShaderStage)ctx.PixelShader).SetSamplers(0, old.PSSamplers);
			((CommonShaderStage)ctx.PixelShader).SetConstantBuffers(0, old.PSConstantBuffers);
			((CommonShaderStage)ctx.PixelShader).SetShaderResources(0, old.PSResourceViews);
			((CommonShaderStage<ComputeShader>)(object)ctx.ComputeShader).Set(old.CS);
			((CommonShaderStage)ctx.ComputeShader).SetSamplers(0, old.CSSamplers);
			((CommonShaderStage)ctx.ComputeShader).SetConstantBuffers(0, old.CSConstantBuffers);
			((CommonShaderStage)ctx.ComputeShader).SetShaderResources(0, old.CSResourceViews);
			ctx.ComputeShader.SetUnorderedAccessViews(0, old.CSUAVs);
		}

		public static void CreateFontsTexture()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Expected O, but got Unknown
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00de: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Expected O, but got Unknown
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_012b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_016e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Expected O, but got Unknown
			ImGuiIOPtr iO = ImGui.GetIO();
			ImFontAtlasPtr fonts = ((ImGuiIOPtr)(ref iO)).Fonts;
			IntPtr intPtr = default(IntPtr);
			int num = default(int);
			int height = default(int);
			int num2 = default(int);
			((ImFontAtlasPtr)(ref fonts)).GetTexDataAsRGBA32(ref intPtr, ref num, ref height, ref num2);
			Texture2DDescription val = default(Texture2DDescription);
			val.Width = num;
			val.Height = height;
			val.MipLevels = 1;
			val.ArraySize = 1;
			val.Format = (Format)28;
			val.SampleDescription = new SampleDescription(1, 0);
			val.Usage = (ResourceUsage)1;
			val.BindFlags = (BindFlags)8;
			val.CpuAccessFlags = (CpuAccessFlags)0;
			val.OptionFlags = (ResourceOptionFlags)0;
			Texture2DDescription val2 = val;
			Texture2D val3 = new Texture2D(_device, val2, (DataRectangle[])(object)new DataRectangle[1]
			{
				new DataRectangle(intPtr, num * num2)
			});
			try
			{
				_fontResourceView = new ShaderResourceView(_device, (Resource)(object)val3, new ShaderResourceViewDescription
				{
					Format = val2.Format,
					Dimension = (ShaderResourceViewDimension)4,
					Texture2D = 
					{
						MipLevels = val2.MipLevels
					}
				});
			}
			finally
			{
				((IDisposable)val3)?.Dispose();
			}
			fonts = ((ImGuiIOPtr)(ref iO)).Fonts;
			((ImFontAtlasPtr)(ref fonts)).SetTexID(((CppObject)_fontResourceView).NativePointer);
			_fontSampler = new SamplerState(_device, new SamplerStateDescription
			{
				Filter = (Filter)21,
				AddressU = (TextureAddressMode)1,
				AddressV = (TextureAddressMode)1,
				AddressW = (TextureAddressMode)1,
				MipLodBias = 0f,
				ComparisonFunction = (Comparison)8,
				MinimumLod = 0f,
				MaximumLod = 0f
			});
		}

		public static bool CreateDeviceObjects()
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Expected O, but got Unknown
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_0088: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_009c: Expected O, but got Unknown
			//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_0104: Expected O, but got Unknown
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_011b: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_012f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_017b: Unknown result type (might be due to invalid IL or missing references)
			//IL_018e: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ca: Expected O, but got Unknown
			//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0201: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Expected O, but got Unknown
			//IL_0214: Unknown result type (might be due to invalid IL or missing references)
			//IL_021d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0222: Unknown result type (might be due to invalid IL or missing references)
			//IL_022a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0232: Unknown result type (might be due to invalid IL or missing references)
			//IL_023a: Unknown result type (might be due to invalid IL or missing references)
			//IL_023f: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			//IL_0266: Unknown result type (might be due to invalid IL or missing references)
			//IL_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_029a: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b8: Expected O, but got Unknown
			if (_device == null)
			{
				return false;
			}
			if (_fontSampler != null)
			{
				InvalidateDeviceObjects();
			}
			string path = Path.Combine(Overlay.AssetsFolderPath, "Shaders");
			byte[] array = File.ReadAllBytes(Path.Combine(path, "imgui-vertex.hlsl.bytes"));
			_vertexShader = new VertexShader(_device, array, (ClassLinkage)null);
			_inputLayout = new InputLayout(_device, array, (InputElement[])(object)new InputElement[3]
			{
				new InputElement("POSITION", 0, (Format)16, 0),
				new InputElement("TEXCOORD", 0, (Format)16, 0),
				new InputElement("COLOR", 0, (Format)28, 0)
			});
			_vertexConstantBuffer = new Buffer(_device, new BufferDescription
			{
				Usage = (ResourceUsage)2,
				BindFlags = (BindFlags)4,
				CpuAccessFlags = (CpuAccessFlags)65536,
				OptionFlags = (ResourceOptionFlags)0,
				SizeInBytes = 64
			});
			byte[] array2 = File.ReadAllBytes(Path.Combine(path, "imgui-frag.hlsl.bytes"));
			_pixelShader = new PixelShader(_device, array2, (ClassLinkage)null);
			BlendStateDescription val = default(BlendStateDescription);
			val.AlphaToCoverageEnable = RawBool.op_Implicit(false);
			BlendStateDescription val2 = val;
			((BlendStateDescription)(ref val2)).RenderTarget[0].IsBlendEnabled = RawBool.op_Implicit(true);
			((BlendStateDescription)(ref val2)).RenderTarget[0].SourceBlend = (BlendOption)5;
			((BlendStateDescription)(ref val2)).RenderTarget[0].DestinationBlend = (BlendOption)6;
			((BlendStateDescription)(ref val2)).RenderTarget[0].BlendOperation = (BlendOperation)1;
			((BlendStateDescription)(ref val2)).RenderTarget[0].SourceAlphaBlend = (BlendOption)8;
			((BlendStateDescription)(ref val2)).RenderTarget[0].DestinationAlphaBlend = (BlendOption)2;
			((BlendStateDescription)(ref val2)).RenderTarget[0].AlphaBlendOperation = (BlendOperation)1;
			((BlendStateDescription)(ref val2)).RenderTarget[0].RenderTargetWriteMask = (ColorWriteMaskFlags)15;
			_blendState = new BlendState(_device, val2);
			_rasterizerState = new RasterizerState(_device, new RasterizerStateDescription
			{
				FillMode = (FillMode)3,
				CullMode = (CullMode)1,
				IsScissorEnabled = RawBool.op_Implicit(true),
				IsDepthClipEnabled = RawBool.op_Implicit(true)
			});
			_depthStencilState = new DepthStencilState(_device, new DepthStencilStateDescription
			{
				IsDepthEnabled = RawBool.op_Implicit(false),
				DepthWriteMask = (DepthWriteMask)1,
				DepthComparison = (Comparison)8,
				IsStencilEnabled = RawBool.op_Implicit(false),
				FrontFace = 
				{
					FailOperation = (StencilOperation)1
				},
				FrontFace = 
				{
					DepthFailOperation = (StencilOperation)1
				},
				FrontFace = 
				{
					PassOperation = (StencilOperation)1
				},
				FrontFace = 
				{
					Comparison = (Comparison)8
				},
				BackFace = 
				{
					FailOperation = (StencilOperation)1
				},
				BackFace = 
				{
					DepthFailOperation = (StencilOperation)1
				},
				BackFace = 
				{
					PassOperation = (StencilOperation)1
				},
				BackFace = 
				{
					Comparison = (Comparison)8
				}
			});
			CreateFontsTexture();
			return true;
		}

		public static void InvalidateDeviceObjects()
		{
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			if (_device != null)
			{
				SamplerState fontSampler = _fontSampler;
				if (fontSampler != null)
				{
					((DisposeBase)fontSampler).Dispose();
				}
				_fontSampler = null;
				ShaderResourceView fontResourceView = _fontResourceView;
				if (fontResourceView != null)
				{
					((DisposeBase)fontResourceView).Dispose();
				}
				_fontResourceView = null;
				ImGuiIOPtr iO = ImGui.GetIO();
				ImFontAtlasPtr fonts = ((ImGuiIOPtr)(ref iO)).Fonts;
				((ImFontAtlasPtr)(ref fonts)).SetTexID(IntPtr.Zero);
				Buffer indexBuffer = _indexBuffer;
				if (indexBuffer != null)
				{
					((DisposeBase)indexBuffer).Dispose();
				}
				_indexBuffer = null;
				Buffer vertexBuffer = _vertexBuffer;
				if (vertexBuffer != null)
				{
					((DisposeBase)vertexBuffer).Dispose();
				}
				_vertexBuffer = null;
				BlendState blendState = _blendState;
				if (blendState != null)
				{
					((DisposeBase)blendState).Dispose();
				}
				_blendState = null;
				DepthStencilState depthStencilState = _depthStencilState;
				if (depthStencilState != null)
				{
					((DisposeBase)depthStencilState).Dispose();
				}
				_depthStencilState = null;
				RasterizerState rasterizerState = _rasterizerState;
				if (rasterizerState != null)
				{
					((DisposeBase)rasterizerState).Dispose();
				}
				_rasterizerState = null;
				PixelShader pixelShader = _pixelShader;
				if (pixelShader != null)
				{
					((DisposeBase)pixelShader).Dispose();
				}
				_pixelShader = null;
				Buffer vertexConstantBuffer = _vertexConstantBuffer;
				if (vertexConstantBuffer != null)
				{
					((DisposeBase)vertexConstantBuffer).Dispose();
				}
				_vertexConstantBuffer = null;
				InputLayout inputLayout = _inputLayout;
				if (inputLayout != null)
				{
					((DisposeBase)inputLayout).Dispose();
				}
				_inputLayout = null;
				VertexShader vertexShader = _vertexShader;
				if (vertexShader != null)
				{
					((DisposeBase)vertexShader).Dispose();
				}
				_vertexShader = null;
			}
		}

		public static void Shutdown()
		{
			InvalidateDeviceObjects();
			_device = null;
			_deviceContext = null;
			if (_renderNamePtr != IntPtr.Zero)
			{
				Marshal.FreeHGlobal(_renderNamePtr);
				_renderNamePtr = IntPtr.Zero;
			}
		}

		public static void NewFrame()
		{
			if (_fontSampler == null)
			{
				CreateDeviceObjects();
			}
		}

		internal unsafe static void Init(void* device, void* deviceContext)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Expected O, but got Unknown
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected O, but got Unknown
			ImGuiIOPtr iO = ImGui.GetIO();
			ref ImGuiBackendFlags backendFlags = ref ((ImGuiIOPtr)(ref iO)).BackendFlags;
			iO = ImGui.GetIO();
			backendFlags = (ImGuiBackendFlags)((uint)((ImGuiIOPtr)(ref iO)).BackendFlags | 8u);
			_renderNamePtr = Marshal.StringToHGlobalAnsi("imgui_impl_dx11_c#");
			iO = ImGui.GetIO();
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).BackendRendererName = (byte*)_renderNamePtr.ToPointer();
			_device = new Device((IntPtr)device);
			_deviceContext = new DeviceContext((IntPtr)deviceContext);
		}
	}
	public static class ImGuiWin32Impl
	{
		private delegate uint XInputGetCapabilitiesDelegate(uint a, uint b, IntPtr c);

		private delegate uint XInputGetStateDelegate(uint a, IntPtr b);

		private static IntPtr _windowHandle;

		private static IntPtr _mouseHandle;

		private static int _mouseTrackedArea;

		private static int _mouseButtonsDown;

		private static long _time;

		private static long _ticksPerSecond;

		private static ImGuiMouseCursor _lastMouseCursor;

		private static IntPtr _xInputDLL;

		private static XInputGetCapabilitiesDelegate _xInputGetCapabilities;

		private static XInputGetStateDelegate _xInputGetState;

		public const VirtualKey IM_VK_KEYPAD_ENTER = (VirtualKey)269;

		private const int XBUTTON1 = 1;

		private const int WHEEL_DELTA = 120;

		public static readonly IntPtr DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 = new IntPtr(-4);

		private unsafe static bool ImGui_ImplWin32_InitEx(void* windowHandle, bool platform_has_own_dc)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_0096: Unknown result type (might be due to invalid IL or missing references)
			//IL_009b: Unknown result type (might be due to invalid IL or missing references)
			ImGuiIOPtr iO = ImGui.GetIO();
			if (_windowHandle != IntPtr.Zero)
			{
				Log.Error("Already initialized a platform backend!", "/home/runner/work/OverlayDearImGui/OverlayDearImGui/OverlayDearImGui.Shared/ImGuiWin32Impl.cs", "ImGui_ImplWin32_InitEx", 35);
				return false;
			}
			if (!Kernel32.QueryPerformanceFrequency(out var frequency))
			{
				return false;
			}
			if (!Kernel32.QueryPerformanceCounter(out var lpPerformanceCount))
			{
				return false;
			}
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).BackendPlatformName = (byte*)(void*)Marshal.StringToHGlobalAnsi("imgui_impl_win32");
			ref ImGuiBackendFlags backendFlags = ref ((ImGuiIOPtr)(ref iO)).BackendFlags;
			backendFlags = (ImGuiBackendFlags)((uint)backendFlags | 2u);
			ref ImGuiBackendFlags backendFlags2 = ref ((ImGuiIOPtr)(ref iO)).BackendFlags;
			backendFlags2 = (ImGuiBackendFlags)((uint)backendFlags2 | 4u);
			_windowHandle = (IntPtr)windowHandle;
			_ticksPerSecond = frequency;
			_time = lpPerformanceCount;
			_lastMouseCursor = (ImGuiMouseCursor)9;
			ImGuiViewportPtr mainViewport = ImGui.GetMainViewport();
			((ImGuiViewport)((ImGuiViewportPtr)(ref mainViewport)).NativePtr).PlatformHandleRaw = windowHandle;
			List<string> list = new List<string> { "xinput1_4.dll", "xinput1_3.dll", "xinput9_1_0.dll", "xinput1_2.dll", "xinput1_1.dll" };
			for (int i = 0; i < list.Count; i++)
			{
				IntPtr intPtr = Kernel32.LoadLibrary(list[i]);
				if (intPtr != IntPtr.Zero)
				{
					_xInputDLL = intPtr;
					_xInputGetCapabilities = Marshal.GetDelegateForFunctionPointer<XInputGetCapabilitiesDelegate>(Kernel32.GetProcAddress(intPtr, "XInputGetCapabilities"));
					_xInputGetState = Marshal.GetDelegateForFunctionPointer<XInputGetStateDelegate>(Kernel32.GetProcAddress(intPtr, "XInputGetState"));
					break;
				}
			}
			return true;
		}

		public unsafe static bool ImGui_ImplWin32_Init(void* hwnd)
		{
			return ImGui_ImplWin32_InitEx(hwnd, platform_has_own_dc: false);
		}

		public unsafe static bool ImGui_ImplWin32_InitForOpenGL(void* hwnd)
		{
			return ImGui_ImplWin32_InitEx(hwnd, platform_has_own_dc: true);
		}

		public unsafe static void Shutdown()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			if (_windowHandle == IntPtr.Zero)
			{
				Log.Error("No platform backend to shutdown, or already shutdown?", "/home/runner/work/OverlayDearImGui/OverlayDearImGui/OverlayDearImGui.Shared/ImGuiWin32Impl.cs", "Shutdown", 99);
				return;
			}
			ImGuiIOPtr iO = ImGui.GetIO();
			if (_xInputDLL != IntPtr.Zero)
			{
				Kernel32.FreeLibrary(_xInputDLL);
			}
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).BackendPlatformName = null;
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).BackendPlatformUserData = null;
			ref ImGuiBackendFlags backendFlags = ref ((ImGuiIOPtr)(ref iO)).BackendFlags;
			backendFlags = (ImGuiBackendFlags)((uint)backendFlags & 0xFFFFFFF8u);
		}

		private static bool ImGui_ImplWin32_UpdateMouseCursor()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Invalid comparison between Unknown and I4
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0069: Expected I4, but got Unknown
			ImGuiIOPtr iO = ImGui.GetIO();
			if (((uint)((ImGuiIOPtr)(ref iO)).ConfigFlags & 0x20u) != 0)
			{
				return false;
			}
			ImGuiMouseCursor mouseCursor = ImGui.GetMouseCursor();
			if ((int)mouseCursor == -1 || ((ImGuiIOPtr)(ref iO)).MouseDrawCursor)
			{
				User32.SetCursor(IntPtr.Zero);
			}
			else
			{
				int lpCursorName = 32512;
				switch ((int)mouseCursor)
				{
				case 0:
					lpCursorName = 32512;
					break;
				case 1:
					lpCursorName = 32513;
					break;
				case 2:
					lpCursorName = 32646;
					break;
				case 4:
					lpCursorName = 32644;
					break;
				case 3:
					lpCursorName = 32645;
					break;
				case 5:
					lpCursorName = 32643;
					break;
				case 6:
					lpCursorName = 32642;
					break;
				case 7:
					lpCursorName = 32649;
					break;
				case 8:
					lpCursorName = 32648;
					break;
				}
				User32.SetCursor(User32.LoadCursor(IntPtr.Zero, lpCursorName));
			}
			return true;
		}

		private static bool IsVkDown(VirtualKey vk)
		{
			return (User32.GetKeyState(vk) & 0x8000) != 0;
		}

		private static void ImGui_ImplWin32_AddKeyEvent(ImGuiKey key, bool down, VirtualKey native_keycode, int native_scancode = -1)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			ImGuiIOPtr iO = ImGui.GetIO();
			((ImGuiIOPtr)(ref iO)).AddKeyEvent(key, down);
			((ImGuiIOPtr)(ref iO)).SetKeyEventNativeData(key, (int)native_keycode, native_scancode);
		}

		private static void ImGui_ImplWin32_ProcessKeyEventsWorkarounds()
		{
			if (ImGui.IsKeyDown((ImGuiKey)528) && !IsVkDown(VirtualKey.LeftShift))
			{
				ImGui_ImplWin32_AddKeyEvent((ImGuiKey)528, down: false, VirtualKey.LeftShift);
			}
			if (ImGui.IsKeyDown((ImGuiKey)532) && !IsVkDown(VirtualKey.RightShift))
			{
				ImGui_ImplWin32_AddKeyEvent((ImGuiKey)532, down: false, VirtualKey.RightShift);
			}
			if (ImGui.IsKeyDown((ImGuiKey)530) && !IsVkDown(VirtualKey.LeftWindows))
			{
				ImGui_ImplWin32_AddKeyEvent((ImGuiKey)530, down: false, VirtualKey.LeftWindows);
			}
			if (ImGui.IsKeyDown((ImGuiKey)534) && !IsVkDown(VirtualKey.RightWindows))
			{
				ImGui_ImplWin32_AddKeyEvent((ImGuiKey)534, down: false, VirtualKey.RightWindows);
			}
		}

		public static void ImGui_ImplWin32_UpdateKeyModifiers()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			ImGuiIOPtr iO = ImGui.GetIO();
			((ImGuiIOPtr)(ref iO)).AddKeyEvent((ImGuiKey)4096, IsVkDown(VirtualKey.Control));
			((ImGuiIOPtr)(ref iO)).AddKeyEvent((ImGuiKey)8192, IsVkDown(VirtualKey.Shift));
			((ImGuiIOPtr)(ref iO)).AddKeyEvent((ImGuiKey)16384, IsVkDown(VirtualKey.Menu));
			((ImGuiIOPtr)(ref iO)).AddKeyEvent((ImGuiKey)32768, IsVkDown(VirtualKey.Application));
		}

		public static void ImGui_ImplWin32_UpdateMouseData()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			ImGuiIOPtr iO = ImGui.GetIO();
			if (!(User32.GetForegroundWindow() == _windowHandle))
			{
				return;
			}
			if (((ImGuiIOPtr)(ref iO)).WantSetMousePos)
			{
				User32.POINT lpPoint = new User32.POINT((int)((ImGuiIOPtr)(ref iO)).MousePos.x, (int)((ImGuiIOPtr)(ref iO)).MousePos.y);
				if (User32.ClientToScreen(_windowHandle, ref lpPoint))
				{
					User32.SetCursorPos(lpPoint.X, lpPoint.Y);
				}
			}
			if (!((ImGuiIOPtr)(ref iO)).WantSetMousePos && _mouseTrackedArea == 0 && User32.GetCursorPos(out var point) && User32.ScreenToClient(_windowHandle, ref point))
			{
				((ImGuiIOPtr)(ref iO)).AddMousePosEvent((float)point.X, (float)point.Y);
			}
		}

		private static void ImGui_ImplWin32_UpdateGamepads()
		{
		}

		public unsafe static void NewFrame()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Unknown result type (might be due to invalid IL or missing references)
			//IL_003b: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			ImGuiIOPtr iO = ImGui.GetIO();
			User32.GetClientRect(_windowHandle, out var lpRect);
			Unsafe.Write(&((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).DisplaySize, new Vector2((float)(lpRect.Right - lpRect.Left), (float)(lpRect.Bottom - lpRect.Top)));
			Kernel32.QueryPerformanceCounter(out var lpPerformanceCount);
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).DeltaTime = (float)(lpPerformanceCount - _time) / (float)_ticksPerSecond;
			_time = lpPerformanceCount;
			ImGui_ImplWin32_UpdateMouseData();
			ImGui_ImplWin32_ProcessKeyEventsWorkarounds();
			ImGuiMouseCursor val = (ImGuiMouseCursor)(((ImGuiIOPtr)(ref iO)).MouseDrawCursor ? (-1) : ((int)ImGui.GetMouseCursor()));
			if (_lastMouseCursor != val)
			{
				_lastMouseCursor = val;
				ImGui_ImplWin32_UpdateMouseCursor();
			}
			ImGui_ImplWin32_UpdateGamepads();
		}

		public static ImGuiKey ImGui_ImplWin32_VirtualKeyToImGuiKey(VirtualKey wParam)
		{
			return (ImGuiKey)(wParam switch
			{
				VirtualKey.Tab => 512, 
				VirtualKey.Left => 513, 
				VirtualKey.Right => 514, 
				VirtualKey.Up => 515, 
				VirtualKey.Down => 516, 
				VirtualKey.Prior => 517, 
				VirtualKey.Next => 518, 
				VirtualKey.Home => 519, 
				VirtualKey.End => 520, 
				VirtualKey.Insert => 521, 
				VirtualKey.Delete => 522, 
				VirtualKey.Back => 523, 
				VirtualKey.Space => 524, 
				VirtualKey.Return => 525, 
				VirtualKey.Escape => 526, 
				VirtualKey.OEM7 => 596, 
				VirtualKey.OEMComma => 597, 
				VirtualKey.OEMMinus => 598, 
				VirtualKey.OEMPeriod => 599, 
				VirtualKey.OEM2 => 600, 
				VirtualKey.OEM1 => 601, 
				VirtualKey.OEMPlus => 602, 
				VirtualKey.OEM4 => 603, 
				VirtualKey.OEM5 => 604, 
				VirtualKey.OEM6 => 605, 
				VirtualKey.OEM3 => 606, 
				VirtualKey.CapsLock => 607, 
				VirtualKey.ScrollLock => 608, 
				VirtualKey.NumLock => 609, 
				VirtualKey.Snapshot => 610, 
				VirtualKey.Pause => 611, 
				VirtualKey.Numpad0 => 612, 
				VirtualKey.Numpad1 => 613, 
				VirtualKey.Numpad2 => 614, 
				VirtualKey.Numpad3 => 615, 
				VirtualKey.Numpad4 => 616, 
				VirtualKey.Numpad5 => 617, 
				VirtualKey.Numpad6 => 618, 
				VirtualKey.Numpad7 => 619, 
				VirtualKey.Numpad8 => 620, 
				VirtualKey.Numpad9 => 621, 
				VirtualKey.Decimal => 622, 
				VirtualKey.Divide => 623, 
				VirtualKey.Multiply => 624, 
				VirtualKey.Subtract => 625, 
				VirtualKey.Add => 626, 
				(VirtualKey)269 => 627, 
				VirtualKey.LeftShift => 528, 
				VirtualKey.LeftControl => 527, 
				VirtualKey.LeftMenu => 529, 
				VirtualKey.LeftWindows => 530, 
				VirtualKey.RightShift => 532, 
				VirtualKey.RightControl => 531, 
				VirtualKey.RightMenu => 533, 
				VirtualKey.RightWindows => 534, 
				VirtualKey.Application => 535, 
				VirtualKey.N0 => 536, 
				VirtualKey.N1 => 537, 
				VirtualKey.N2 => 538, 
				VirtualKey.N3 => 539, 
				VirtualKey.N4 => 540, 
				VirtualKey.N5 => 541, 
				VirtualKey.N6 => 542, 
				VirtualKey.N7 => 543, 
				VirtualKey.N8 => 544, 
				VirtualKey.N9 => 545, 
				VirtualKey.A => 546, 
				VirtualKey.B => 547, 
				VirtualKey.C => 548, 
				VirtualKey.D => 549, 
				VirtualKey.E => 550, 
				VirtualKey.F => 551, 
				VirtualKey.G => 552, 
				VirtualKey.H => 553, 
				VirtualKey.I => 554, 
				VirtualKey.J => 555, 
				VirtualKey.K => 556, 
				VirtualKey.L => 557, 
				VirtualKey.M => 558, 
				VirtualKey.N => 559, 
				VirtualKey.O => 560, 
				VirtualKey.P => 561, 
				VirtualKey.Q => 562, 
				VirtualKey.R => 563, 
				VirtualKey.S => 564, 
				VirtualKey.T => 565, 
				VirtualKey.U => 566, 
				VirtualKey.V => 567, 
				VirtualKey.W => 568, 
				VirtualKey.X => 569, 
				VirtualKey.Y => 570, 
				VirtualKey.Z => 571, 
				VirtualKey.F1 => 572, 
				VirtualKey.F2 => 573, 
				VirtualKey.F3 => 574, 
				VirtualKey.F4 => 575, 
				VirtualKey.F5 => 576, 
				VirtualKey.F6 => 577, 
				VirtualKey.F7 => 578, 
				VirtualKey.F8 => 579, 
				VirtualKey.F9 => 580, 
				VirtualKey.F10 => 581, 
				VirtualKey.F11 => 582, 
				VirtualKey.F12 => 583, 
				_ => 0, 
			});
		}

		private static ImGuiMouseSource GetMouseSourceFromMessageExtraInfo()
		{
			uint num = (uint)(int)User32.GetMessageExtraInfo();
			if ((num & 0xFFFFFF80u) != 4283520768u)
			{
				if ((num & 0xFFFFFF80u) != 4283520896u)
				{
					return (ImGuiMouseSource)0;
				}
				return (ImGuiMouseSource)1;
			}
			return (ImGuiMouseSource)2;
		}

		public static int GET_X_LPARAM(IntPtr lp)
		{
			return (short)(long)lp;
		}

		public static int GET_Y_LPARAM(IntPtr lp)
		{
			return (short)((long)lp >> 16);
		}

		public static ushort HIWORD(IntPtr dwValue)
		{
			return (ushort)((long)dwValue >> 16);
		}

		public static ushort HIWORD(UIntPtr dwValue)
		{
			return (ushort)((ulong)dwValue >> 16);
		}

		public static ushort LOWORD(IntPtr dwValue)
		{
			return (ushort)(long)dwValue;
		}

		public static ushort LOWORD(UIntPtr dwValue)
		{
			return (ushort)(ulong)dwValue;
		}

		public static ushort GET_XBUTTON_WPARAM(UIntPtr val)
		{
			return HIWORD(val);
		}

		public static ushort GET_XBUTTON_WPARAM(IntPtr val)
		{
			return HIWORD(val);
		}

		internal static int GET_WHEEL_DELTA_WPARAM(IntPtr wParam)
		{
			return (short)HIWORD(wParam);
		}

		internal static int GET_WHEEL_DELTA_WPARAM(UIntPtr wParam)
		{
			return (short)HIWORD(wParam);
		}

		public static byte LOBYTE(ushort wValue)
		{
			return (byte)(wValue & 0xFFu);
		}

		public unsafe static IntPtr WndProcHandler(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam)
		{
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			//IL_0296: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0178: Unknown result type (might be due to invalid IL or missing references)
			//IL_0302: Unknown result type (might be due to invalid IL or missing references)
			//IL_027a: Unknown result type (might be due to invalid IL or missing references)
			if (ImGui.GetCurrentContext() == IntPtr.Zero)
			{
				return IntPtr.Zero;
			}
			ImGuiIOPtr iO = ImGui.GetIO();
			int num;
			int num6;
			int num2;
			bool flag;
			switch (msg)
			{
			case WindowMessage.WM_NCMOUSEMOVE:
			case WindowMessage.WM_MOUSEFIRST:
			{
				ImGuiMouseSource mouseSourceFromMessageExtraInfo3 = GetMouseSourceFromMessageExtraInfo();
				int num5 = ((msg == WindowMessage.WM_MOUSEFIRST) ? 1 : 2);
				_mouseHandle = hwnd;
				if (_mouseTrackedArea != num5)
				{
					User32.TRACKMOUSEEVENT lpEventTrack = new User32.TRACKMOUSEEVENT(User32.TMEFlags.TME_CANCEL, hwnd, 0u);
					User32.TRACKMOUSEEVENT lpEventTrack2 = new User32.TRACKMOUSEEVENT((num5 == 2) ? (User32.TMEFlags.TME_LEAVE | User32.TMEFlags.TME_NONCLIENT) : User32.TMEFlags.TME_LEAVE, hwnd, 0u);
					if (_mouseTrackedArea != 0)
					{
						User32.TrackMouseEvent(ref lpEventTrack);
					}
					User32.TrackMouseEvent(ref lpEventTrack2);
					_mouseTrackedArea = num5;
				}
				User32.POINT lpPoint = new User32.POINT(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
				if (msg != WindowMessage.WM_NCMOUSEMOVE || User32.ScreenToClient(hwnd, ref lpPoint))
				{
					((ImGuiIOPtr)(ref iO)).AddMouseSourceEvent(mouseSourceFromMessageExtraInfo3);
					((ImGuiIOPtr)(ref iO)).AddMousePosEvent((float)lpPoint.X, (float)lpPoint.Y);
				}
				break;
			}
			case WindowMessage.WM_NCMOUSELEAVE:
				num = 2;
				goto IL_01a4;
			case WindowMessage.WM_MOUSELEAVE:
				num = 1;
				goto IL_01a4;
			case WindowMessage.WM_LBUTTONDOWN:
			case WindowMessage.WM_LBUTTONDBLCLK:
			case WindowMessage.WM_RBUTTONDOWN:
			case WindowMessage.WM_RBUTTONDBLCLK:
			case WindowMessage.WM_MBUTTONDOWN:
			case WindowMessage.WM_MBUTTONDBLCLK:
			case WindowMessage.WM_XBUTTONDOWN:
			case WindowMessage.WM_XBUTTONDBLCLK:
			{
				ImGuiMouseSource mouseSourceFromMessageExtraInfo = GetMouseSourceFromMessageExtraInfo();
				int num3 = 0;
				if (msg == WindowMessage.WM_LBUTTONDOWN || msg == WindowMessage.WM_LBUTTONDBLCLK)
				{
					num3 = 0;
				}
				if (msg == WindowMessage.WM_RBUTTONDOWN || msg == WindowMessage.WM_RBUTTONDBLCLK)
				{
					num3 = 1;
				}
				if (msg == WindowMessage.WM_MBUTTONDOWN || msg == WindowMessage.WM_MBUTTONDBLCLK)
				{
					num3 = 2;
				}
				if (msg == WindowMessage.WM_XBUTTONDOWN || msg == WindowMessage.WM_XBUTTONDBLCLK)
				{
					num3 = ((GET_XBUTTON_WPARAM(wParam) == 1) ? 3 : 4);
				}
				if (_mouseButtonsDown == 0 && User32.GetCapture() == IntPtr.Zero)
				{
					User32.SetCapture(hwnd);
				}
				_mouseButtonsDown |= 1 << num3;
				((ImGuiIOPtr)(ref iO)).AddMouseSourceEvent(mouseSourceFromMessageExtraInfo);
				((ImGuiIOPtr)(ref iO)).AddMouseButtonEvent(num3, true);
				return IntPtr.Zero;
			}
			case WindowMessage.WM_LBUTTONUP:
			case WindowMessage.WM_RBUTTONUP:
			case WindowMessage.WM_MBUTTONUP:
			case WindowMessage.WM_XBUTTONUP:
			{
				ImGuiMouseSource mouseSourceFromMessageExtraInfo2 = GetMouseSourceFromMessageExtraInfo();
				int num4 = 0;
				if (msg == WindowMessage.WM_LBUTTONUP)
				{
					num4 = 0;
				}
				if (msg == WindowMessage.WM_RBUTTONUP)
				{
					num4 = 1;
				}
				if (msg == WindowMessage.WM_MBUTTONUP)
				{
					num4 = 2;
				}
				if (msg == WindowMessage.WM_XBUTTONUP)
				{
					num4 = ((GET_XBUTTON_WPARAM(wParam) == 1) ? 3 : 4);
				}
				_mouseButtonsDown &= ~(1 << num4);
				if (_mouseButtonsDown == 0 && User32.GetCapture() == hwnd)
				{
					User32.ReleaseCapture();
				}
				((ImGuiIOPtr)(ref iO)).AddMouseSourceEvent(mouseSourceFromMessageExtraInfo2);
				((ImGuiIOPtr)(ref iO)).AddMouseButtonEvent(num4, false);
				return IntPtr.Zero;
			}
			case WindowMessage.WM_MOUSEWHEEL:
				((ImGuiIOPtr)(ref iO)).AddMouseWheelEvent(0f, (float)GET_WHEEL_DELTA_WPARAM(wParam) / 120f);
				return IntPtr.Zero;
			case WindowMessage.WM_MOUSEHWHEEL:
				((ImGuiIOPtr)(ref iO)).AddMouseWheelEvent((0f - (float)GET_WHEEL_DELTA_WPARAM(wParam)) / 120f, 0f);
				return IntPtr.Zero;
			case WindowMessage.WM_KEYUP:
			case WindowMessage.WM_SYSKEYDOWN:
			case WindowMessage.WM_SYSKEYUP:
				num6 = ((msg == WindowMessage.WM_SYSKEYDOWN) ? 1 : 0);
				goto IL_036b;
			case WindowMessage.WM_KEYFIRST:
				num6 = 1;
				goto IL_036b;
			case WindowMessage.WM_SETFOCUS:
			case WindowMessage.WM_KILLFOCUS:
				((ImGuiIOPtr)(ref iO)).AddFocusEvent(msg == WindowMessage.WM_SETFOCUS);
				return IntPtr.Zero;
			case WindowMessage.WM_CHAR:
				if (User32.IsWindowUnicode(hwnd))
				{
					if ((int)wParam > 0 && (int)wParam < 65536)
					{
						((ImGuiIOPtr)(ref iO)).AddInputCharacterUTF16((ushort)(int)wParam);
					}
				}
				else
				{
					byte[] lpMultiByteStr = new byte[1] { *(byte*)(&wParam) };
					IntPtr intPtr = Marshal.AllocHGlobal(1);
					Kernel32.MultiByteToWideChar(0u, 1u, lpMultiByteStr, 1, intPtr, 1);
					char c = *(char*)(void*)intPtr;
					((ImGuiIOPtr)(ref iO)).AddInputCharacter((uint)c);
					Marshal.FreeHGlobal(intPtr);
				}
				return IntPtr.Zero;
			case WindowMessage.WM_SETCURSOR:
				if (LOWORD(lParam) == 1 && ImGui_ImplWin32_UpdateMouseCursor())
				{
					return new IntPtr(1);
				}
				return IntPtr.Zero;
			case WindowMessage.WM_DEVICECHANGE:
				{
					return IntPtr.Zero;
				}
				IL_01a4:
				num2 = num;
				if (_mouseTrackedArea == num2)
				{
					if (_mouseHandle == hwnd)
					{
						_mouseHandle = IntPtr.Zero;
					}
					_mouseTrackedArea = 0;
					((ImGuiIOPtr)(ref iO)).AddMousePosEvent(float.MinValue, float.MinValue);
				}
				break;
				IL_036b:
				flag = (byte)num6 != 0;
				if ((int)wParam < 256)
				{
					ImGui_ImplWin32_UpdateKeyModifiers();
					VirtualKey virtualKey = (VirtualKey)(int)wParam;
					bool num7 = (ushort)(int)wParam == 13;
					bool flag2 = (HIWORD(lParam) & 0x100) != 0;
					if (num7 && flag2)
					{
						virtualKey = (VirtualKey)269;
					}
					ImGuiKey val = ImGui_ImplWin32_VirtualKeyToImGuiKey(virtualKey);
					int native_scancode = LOBYTE(HIWORD(lParam));
					if ((int)val != 0)
					{
						ImGui_ImplWin32_AddKeyEvent(val, flag, virtualKey, native_scancode);
					}
					switch (virtualKey)
					{
					case VirtualKey.Shift:
						if (IsVkDown(VirtualKey.LeftShift) == flag)
						{
							ImGui_ImplWin32_AddKeyEvent((ImGuiKey)528, flag, VirtualKey.LeftShift, native_scancode);
						}
						if (IsVkDown(VirtualKey.RightShift) == flag)
						{
							ImGui_ImplWin32_AddKeyEvent((ImGuiKey)532, flag, VirtualKey.RightShift, native_scancode);
						}
						break;
					case VirtualKey.Control:
						if (IsVkDown(VirtualKey.LeftControl) == flag)
						{
							ImGui_ImplWin32_AddKeyEvent((ImGuiKey)527, flag, VirtualKey.LeftControl, native_scancode);
						}
						if (IsVkDown(VirtualKey.RightControl) == flag)
						{
							ImGui_ImplWin32_AddKeyEvent((ImGuiKey)531, flag, VirtualKey.RightControl, native_scancode);
						}
						break;
					case VirtualKey.Menu:
						if (IsVkDown(VirtualKey.LeftMenu) == flag)
						{
							ImGui_ImplWin32_AddKeyEvent((ImGuiKey)529, flag, VirtualKey.LeftMenu, native_scancode);
						}
						if (IsVkDown(VirtualKey.RightMenu) == flag)
						{
							ImGui_ImplWin32_AddKeyEvent((ImGuiKey)533, flag, VirtualKey.RightMenu, native_scancode);
						}
						break;
					}
				}
				return IntPtr.Zero;
			}
			return IntPtr.Zero;
		}

		private unsafe static bool _IsWindowsVersionOrGreater(short major, short minor, short unused)
		{
			OSVERSIONINFOEX oSVERSIONINFOEX = OSVERSIONINFOEX.Create();
			ulong dwlConditionMask = 0uL;
			oSVERSIONINFOEX.dwMajorVersion = major;
			oSVERSIONINFOEX.dwMinorVersion = minor;
			Kernel32.VER_SET_CONDITION(ref dwlConditionMask, 2u, 3);
			Kernel32.VER_SET_CONDITION(ref dwlConditionMask, 1u, 3);
			return Ntdll.RtlVerifyVersionInfo(&oSVERSIONINFOEX, VER_MASK.VER_MAJORVERSION | VER_MASK.VER_MINORVERSION, (long)dwlConditionMask) == NtStatus.Success;
		}

		private static bool _IsWindowsVistaOrGreater()
		{
			return _IsWindowsVersionOrGreater((short)Kernel32.HiByte(1536), LOBYTE(1536), 0);
		}

		private static bool _IsWindows8OrGreater()
		{
			return _IsWindowsVersionOrGreater((short)Kernel32.HiByte(1538), LOBYTE(1538), 0);
		}

		private static bool _IsWindows8Point1OrGreater()
		{
			return _IsWindowsVersionOrGreater((short)Kernel32.HiByte(1539), LOBYTE(1539), 0);
		}

		private static bool _IsWindows10OrGreater()
		{
			return _IsWindowsVersionOrGreater((short)Kernel32.HiByte(2560), LOBYTE(2560), 0);
		}

		private static void ImGui_ImplWin32_EnableDpiAwareness()
		{
			if (_IsWindows10OrGreater())
			{
				User32.SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
			}
			else if (_IsWindows8Point1OrGreater())
			{
				Shellscalingapi.SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.PROCESS_PER_MONITOR_DPI_AWARE);
			}
			else
			{
				User32.SetProcessDPIAware();
			}
		}

		public unsafe static float ImGui_ImplWin32_GetDpiScaleForMonitor(void* monitor)
		{
			uint dpiX;
			if (_IsWindows8Point1OrGreater())
			{
				Shellscalingapi.GetDpiForMonitor((IntPtr)monitor, MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI, out dpiX, out var _);
				return (float)dpiX / 96f;
			}
			IntPtr dC = User32.GetDC(IntPtr.Zero);
			dpiX = (uint)Gdi32.GetDeviceCaps(dC, 88);
			User32.ReleaseDC(IntPtr.Zero, dC);
			return (float)dpiX / 96f;
		}

		public unsafe static float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd)
		{
			return ImGui_ImplWin32_GetDpiScaleForMonitor((void*)User32.MonitorFromWindow((IntPtr)hwnd, 2u));
		}

		public unsafe static void ImGui_ImplWin32_EnableAlphaCompositing(void* hwnd)
		{
			if (_IsWindowsVistaOrGreater() && Dwmapi.DwmIsCompositionEnabled(out var enabled) == 0 && enabled)
			{
				uint ColorizationColor;
				bool ColorizationOpaqueBlend;
				int num = Dwmapi.DwmGetColorizationColor(out ColorizationColor, out ColorizationOpaqueBlend);
				if (_IsWindows8OrGreater() || (num == 0 && !ColorizationOpaqueBlend))
				{
					IntPtr intPtr = Gdi32.CreateRectRgn(0, 0, -1, -1);
					Dwmapi.DWM_BLURBEHIND blurBehind = new Dwmapi.DWM_BLURBEHIND(enabled: true);
					blurBehind.dwFlags |= Dwmapi.DWM_BB.BlurRegion;
					blurBehind.hRgnBlur = intPtr;
					Dwmapi.DwmEnableBlurBehindWindow((IntPtr)hwnd, ref blurBehind);
					Gdi32.DeleteObject(intPtr);
				}
				else
				{
					Dwmapi.DWM_BLURBEHIND blurBehind2 = new Dwmapi.DWM_BLURBEHIND(enabled: true);
					Dwmapi.DwmEnableBlurBehindWindow((IntPtr)hwnd, ref blurBehind2);
				}
			}
		}

		internal unsafe static void Init(IntPtr windowHandle)
		{
			ImGui_ImplWin32_Init((void*)windowHandle);
		}
	}
	internal interface ILog
	{
		internal void Debug(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);

		internal void Error(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);

		internal void Fatal(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);

		internal void Info(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);

		internal void Message(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);

		internal void Warning(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0);
	}
	internal static class Log
	{
		private static ILog _log;

		internal static void Init(ILog log)
		{
			_log = log;
		}

		internal static void Debug(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0)
		{
			_log.Debug(data, file, member, line);
		}

		internal static void Error(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0)
		{
			_log.Error(data, file, member, line);
		}

		internal static void Fatal(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0)
		{
			_log.Fatal(data, file, member, line);
		}

		internal static void Info(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0)
		{
			_log.Info(data, file, member, line);
		}

		internal static void Message(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0)
		{
			_log.Message(data, file, member, line);
		}

		internal static void Warning(object data, [CallerFilePath] string file = "", [CallerMemberName] string member = "", [CallerLineNumber] int line = 0)
		{
			_log.Warning(data, file, member, line);
		}
	}
	public class Overlay
	{
		private Device _device;

		private DeviceContext _deviceContext;

		private SwapChain _swapChain;

		private RenderTargetView _mainRenderTargetView;

		internal const VirtualKey OverlayToggleDefault = VirtualKey.Insert;

		private const string IniFileName = "iDeathHD.OverlayDearImGui_imgui.ini";

		private static RECT _gameRect;

		private static uint _resizeWidth;

		private static uint _resizeHeight;

		private static DisposableList<ClonedDrawData> _nextFrameDrawData;

		private static DisposableList<ClonedDrawData> _currentRenderDrawData;

		private static readonly object _drawDataLock = new object();

		public static IConfigEntry<VirtualKey> OverlayToggle { get; internal set; }

		public static string AssetsFolderPath { get; private set; } = "";


		public static string ImGuiIniConfigPath { get; private set; }

		public static bool IsOpen { get; private set; }

		public static RECT GameRect
		{
			get
			{
				return _gameRect;
			}
			private set
			{
				_gameRect = value;
			}
		}

		public static IntPtr GameHwnd { get; private set; }

		public static event Action OnRender;

		internal void CreateRenderTarget()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001f: Expected O, but got Unknown
			Texture2D backBuffer = _swapChain.GetBackBuffer<Texture2D>(0);
			try
			{
				_mainRenderTargetView = new RenderTargetView(_device, (Resource)(object)backBuffer);
			}
			finally
			{
				((IDisposable)backBuffer)?.Dispose();
			}
		}

		public void CleanupRenderTarget()
		{
			if (_mainRenderTargetView != null)
			{
				((DisposeBase)_mainRenderTargetView).Dispose();
				_mainRenderTargetView = null;
			}
		}

		public void CleanupDeviceD3D()
		{
			CleanupRenderTarget();
			if (_swapChain != null)
			{
				((DisposeBase)_swapChain).Dispose();
				_swapChain = null;
			}
			if (_deviceContext != null)
			{
				((DisposeBase)_deviceContext).Dispose();
				_deviceContext = null;
			}
			if (_device != null)
			{
				((DisposeBase)_device).Dispose();
				_device = null;
			}
		}

		public bool CreateDeviceD3D(IntPtr hWnd)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0042: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0062: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			SwapChainDescription val = default(SwapChainDescription);
			val.BufferCount = 2;
			val.ModeDescription = new ModeDescription
			{
				Width = 0,
				Height = 0,
				Format = (Format)28,
				RefreshRate = new Rational(60, 1)
			};
			val.Usage = (Usage)32;
			val.OutputHandle = hWnd;
			val.SampleDescription = new SampleDescription(1, 0);
			val.IsWindowed = RawBool.op_Implicit(true);
			val.SwapEffect = (SwapEffect)0;
			val.Flags = (SwapChainFlags)2;
			SwapChainDescription val2 = val;
			FeatureLevel[] array = (FeatureLevel[])(object)new FeatureLevel[2]
			{
				(FeatureLevel)45056,
				(FeatureLevel)40960
			};
			try
			{
				Device.CreateWithSwapChain((DriverType)1, (DeviceCreationFlags)0, array, val2, ref _device, ref _swapChain);
			}
			catch (Exception data)
			{
				Log.Error(data, "/home/runner/work/OverlayDearImGui/OverlayDearImGui/OverlayDearImGui.Shared/Overlay.cs", "CreateDeviceD3D", 146);
				try
				{
					Device.CreateWithSwapChain((DriverType)5, (DeviceCreationFlags)0, array, val2, ref _device, ref _swapChain);
				}
				catch (Exception data2)
				{
					Log.Error(data2, "/home/runner/work/OverlayDearImGui/OverlayDearImGui/OverlayDearImGui.Shared/Overlay.cs", "CreateDeviceD3D", 161);
					return false;
				}
			}
			_deviceContext = _device.ImmediateContext;
			CreateRenderTarget();
			return true;
		}

		private unsafe static void CloneRenderData()
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_0074: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			ImGuiPlatformIOPtr platformIO = ImGui.GetPlatformIO();
			DisposableList<ClonedDrawData> disposableList = new DisposableList<ClonedDrawData>(((ImGuiPlatformIOPtr)(ref platformIO)).Viewports.Size);
			for (int i = 0; i < ((ImGuiPlatformIOPtr)(ref platformIO)).Viewports.Size; i++)
			{
				ImGuiViewportPtr val = ((ImGuiPlatformIOPtr)(ref platformIO)).Viewports[i];
				if (!((Enum)((ImGuiViewportPtr)(ref val)).Flags).HasFlag((Enum)(object)(ImGuiViewportFlags)4096))
				{
					disposableList.Add(new ClonedDrawData(new ImDrawDataPtr(ImDrawDataPtr.op_Implicit(((ImGuiViewportPtr)(ref val)).DrawData))));
				}
			}
			lock (_drawDataLock)
			{
				_nextFrameDrawData?.Dispose();
				_nextFrameDrawData = disposableList;
			}
		}

		internal static void UpdateOverlayDrawData()
		{
			ImGui.GetCurrentContext();
			ImGuiDX11Impl.NewFrame();
			ImGuiWin32Impl.NewFrame();
			ImGui.NewFrame();
			if (IsOpen && Overlay.OnRender != null)
			{
				Delegate[] invocationList = Overlay.OnRender.GetInvocationList();
				for (int i = 0; i < invocationList.Length; i++)
				{
					Action action = (Action)invocationList[i];
					try
					{
						action();
					}
					catch (Exception data)
					{
						Log.Error(data, "/home/runner/work/OverlayDearImGui/OverlayDearImGui/OverlayDearImGui.Shared/Overlay.cs", "UpdateOverlayDrawData", 216);
					}
				}
			}
			ImGui.Render();
			CloneRenderData();
		}

		public unsafe void Render(string windowName, string windowClass, string assetsFolderPath, string imguiIniConfigFolderPath, IConfigEntry<VirtualKey> overlayToggleKeybind)
		{
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_012a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: Unknown result type (might be due to invalid IL or missing references)
			//IL_013a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_0355: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_036a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0371: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
			ImGuiIniConfigPath = Path.Combine(imguiIniConfigFolderPath, "iDeathHD.OverlayDearImGui_imgui.ini");
			AssetsFolderPath = assetsFolderPath ?? Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Assets");
			OverlayToggle = overlayToggleKeybind;
			GameHwnd = User32.FindWindowW(windowClass, windowName);
			User32.GetWindowRect(GameHwnd, out _gameRect);
			(IntPtr hwnd, WNDCLASSEXW wc) tuple = WindowFactory.CreateClassicWindow("OverlayDearImGui");
			IntPtr item = tuple.hwnd;
			WNDCLASSEXW item2 = tuple.wc;
			MARGINS mARGINS = default(MARGINS);
			mARGINS.cxLeftWidth = -1;
			MARGINS margins = mARGINS;
			Dwmapi.DwmExtendFrameIntoClientArea(item, ref margins);
			if (!CreateDeviceD3D(item))
			{
				CleanupDeviceD3D();
				User32.UnregisterClass(item2.lpszClassName, item2.hInstance);
				Log.Error("Failed CreateDeviceD3D", "/home/runner/work/OverlayDearImGui/OverlayDearImGui/OverlayDearImGui.Shared/Overlay.cs", "Render", 246);
				return;
			}
			User32.ShowWindow(item, User32.ShowWindowCommand.ShowDefault);
			User32.UpdateWindow(item);
			ImGui.CreateContext();
			ImGuiIOPtr iO = ImGui.GetIO();
			ref ImGuiConfigFlags configFlags = ref ((ImGuiIOPtr)(ref iO)).ConfigFlags;
			configFlags = (ImGuiConfigFlags)((uint)configFlags | 3u);
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).IniFilename = (byte*)(void*)Marshal.StringToHGlobalAnsi(ImGuiIniConfigPath);
			ImGui.StyleColorsDark();
			string text = Path.Combine(AssetsFolderPath, "Fonts", "Bombardier-Regular.ttf");
			ImFontAtlasPtr fonts = ((ImGuiIOPtr)(ref iO)).Fonts;
			ImFontPtr val = ((ImFontAtlasPtr)(ref fonts)).AddFontFromFileTTF(text, 16f);
			((ImGuiIO)((ImGuiIOPtr)(ref iO)).NativePtr).FontDefault = ImFontPtr.op_Implicit(val);
			ImGuiWin32Impl.Init(item);
			ImGuiDX11Impl.Init((void*)((CppObject)_device).NativePointer, (void*)((CppObject)_deviceContext).NativePointer);
			bool flag = false;
			ToggleOverlay(item);
			RawVector4 val2 = default(RawVector4);
			((RawVector4)(ref val2))..ctor(0f, 0f, 0f, 0f);
			bool flag2 = false;
			while (!flag2)
			{
				User32.MSG lpMsg;
				while (User32.PeekMessage(out lpMsg, item, 0u, 0u, 1u))
				{
					User32.TranslateMessage(ref lpMsg);
					User32.DispatchMessage(ref lpMsg);
					if (lpMsg.message == WindowMessage.WM_QUIT)
					{
						flag2 = true;
						break;
					}
				}
				bool num = (User32.GetAsyncKeyState(OverlayToggle.Get()) & 0x8000) != 0;
				if (num && !flag)
				{
					ToggleOverlay(item);
				}
				flag = num;
				if (_resizeWidth != 0 && _resizeHeight != 0)
				{
					CleanupRenderTarget();
					_swapChain.ResizeBuffers(0, (int)_resizeWidth, (int)_resizeHeight, (Format)0, (SwapChainFlags)0);
					_resizeWidth = (_resizeHeight = 0u);
					CreateRenderTarget();
				}
				IntPtr foregroundWindow = User32.GetForegroundWindow();
				if (!(foregroundWindow == item) && !(foregroundWindow == GameHwnd))
				{
					Kernel32.Sleep(16u);
				}
				bool flag3 = User32.IsWindowVisible(GameHwnd);
				User32.ShowWindow(item, flag3 ? User32.ShowWindowCommand.Show : User32.ShowWindowCommand.Hide);
				if (!flag3)
				{
					Kernel32.Sleep(16u);
				}
				User32.GetWindowRect(GameHwnd, out var lpRect);
				if (lpRect.Left != GameRect.Left || lpRect.Bottom != GameRect.Bottom || lpRect.Top != GameRect.Top || lpRect.Right != GameRect.Right)
				{
					GameRect = lpRect;
					User32.SetWindowPos(item, (IntPtr)(-2), GameRect.X, GameRect.Y, GameRect.Width, GameRect.Height, 8u);
				}
				User32.SetWindowDisplayAffinity(item, User32.DisplayAffinity.None);
				_deviceContext.OutputMerger.SetRenderTargets(_mainRenderTargetView);
				_deviceContext.ClearRenderTargetView(_mainRenderTargetView, new RawColor4(val2.X, val2.Y, val2.Z, val2.W));
				DisposableList<ClonedDrawData> disposableList = null;
				lock (_drawDataLock)
				{
					if (_nextFrameDrawData != null)
					{
						_currentRenderDrawData?.Dispose();
						_currentRenderDrawData = _nextFrameDrawData;
						_nextFrameDrawData = null;
					}
					disposableList = _currentRenderDrawData;
				}
				if (disposableList != null && disposableList.Count > 0)
				{
					ImGuiDX11Impl.RenderDrawData(disposableList[0].Data);
				}
				_swapChain.Present(1, (PresentFlags)0);
			}
			ImGuiDX11Impl.Shutdown();
			ImGuiWin32Impl.Shutdown();
			ImGui.DestroyContext();
			CleanupDeviceD3D();
			User32.DestroyWindow(item);
			User32.UnregisterClass(item2.lpszClassName, item2.hInstance);
		}

		private static void ToggleOverlay(IntPtr hwnd)
		{
			IsOpen = !IsOpen;
			if (IsOpen)
			{
				User32.ShowWindow(hwnd, User32.ShowWindowCommand.Restore);
				User32.ShowWindow(hwnd, User32.ShowWindowCommand.Show);
				User32.SetForegroundWindow(hwnd);
			}
			else
			{
				User32.ShowWindow(hwnd, User32.ShowWindowCommand.Hide);
				User32.ShowWindow(hwnd, User32.ShowWindowCommand.Minimize);
				User32.BringWindowToTop(GameHwnd);
				User32.SetForegroundWindow(GameHwnd);
			}
		}

		public static IntPtr WndProc(IntPtr hWnd, WindowMessage msg, IntPtr wParam, IntPtr lParam)
		{
			if (ImGuiWin32Impl.WndProcHandler(hWnd, msg, wParam, lParam) != IntPtr.Zero)
			{
				return new IntPtr(1);
			}
			return User32.DefWindowProc(hWnd, msg, wParam, lParam);
		}
	}
}
namespace OverlayDearImGui.Windows
{
	public static class Dwmapi
	{
		public struct DWM_BLURBEHIND
		{
			public DWM_BB dwFlags;

			public bool fEnable;

			public IntPtr hRgnBlur;

			public bool fTransitionOnMaximized;

			public bool TransitionOnMaximized
			{
				get
				{
					return fTransitionOnMaximized;
				}
				set
				{
					fTransitionOnMaximized = value;
					dwFlags |= DWM_BB.TransitionMaximized;
				}
			}

			public DWM_BLURBEHIND(bool enabled)
			{
				fEnable = enabled;
				hRgnBlur = IntPtr.Zero;
				fTransitionOnMaximized = false;
				dwFlags = DWM_BB.Enable;
			}
		}

		[Flags]
		public enum DWM_BB
		{
			Enable = 1,
			BlurRegion = 2,
			TransitionMaximized = 4
		}

		[DllImport("dwmapi.dll")]
		public static extern int DwmGetColorizationColor(out uint ColorizationColor, [MarshalAs(UnmanagedType.Bool)] out bool ColorizationOpaqueBlend);

		[DllImport("dwmapi.dll")]
		public static extern int DwmIsCompositionEnabled(out bool enabled);

		[DllImport("dwmapi.dll")]
		public static extern void DwmEnableBlurBehindWindow(IntPtr hwnd, ref DWM_BLURBEHIND blurBehind);

		[DllImport("dwmapi.dll")]
		public static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
	}
	public static class Gdi32
	{
		[DllImport("gdi32.dll")]
		public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);

		[DllImport("gdi32.dll")]
		[return: MarshalAs(UnmanagedType.Bool)]
		public static extern bool DeleteObject([In] IntPtr hObject);

		[DllImport("gdi32.dll")]
		public static extern IntPtr CreateRectRgn(int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
	}
	public static class User32
	{
		public enum GetWindowType : uint
		{
			GW_HWNDFIRST,
			GW_HWNDLAST,
			GW_HWNDNEXT,
			GW_HWNDPREV,
			GW_OWNER,
			GW_CHILD,
			GW_ENABLEDPOPUP
		}

		public struct MSG
		{
			public IntPtr hwnd;

			public WindowMessage message;

			public IntPtr wParam;

			public IntPtr lParam;

			public uint time;

			public POINT pt;
		}

		public struct POINT
		{
			public int X;

			public int Y;

			public POINT(int x, int y)
			{
				X = x;
				Y = y;
			}
		}

		public enum SystemMetric
		{
			SM_ARRANGE = 56,
			SM_CLEANBOOT = 67,
			SM_CMONITORS = 80,
			SM_CMOUSEBUTTONS = 43,
			SM_CXBORDER = 5,
			SM_CXCURSOR = 13,
			SM_CXDLGFRAME = 7,
			SM_CXDOUBLECLK = 36,
			SM_CXDRAG = 68,
			SM_CXEDGE = 45,
			SM_CXFIXEDFRAME = 7,
			SM_CXFOCUSBORDER = 83,
			SM_CXFRAME = 32,
			SM_CXFULLSCREEN = 16,
			SM_CXHSCROLL = 21,
			SM_CXHTHUMB = 10,
			SM_CXICON = 11,
			SM_CXICONSPACING = 38,
			SM_CXMAXIMIZED = 61,
			SM_CXMAXTRACK = 59,
			SM_CXMENUCHECK = 71,
			SM_CXMENUSIZE = 54,
			SM_CXMIN = 28,
			SM_CXMINIMIZED = 57,
			SM_CXMINSPACING = 47,
			SM_CXMINTRACK = 34,
			SM_CXPADDEDBORDER = 92,
			SM_CXSCREEN = 0,
			SM_CXSIZE = 30,
			SM_CXSIZEFRAME = 32,
			SM_CXSMICON = 49,
			SM_CXSMSIZE = 52,
			SM_CXVIRTUALSCREEN = 78,
			SM_CXVSCROLL = 2,
			SM_CYBORDER = 6,
			SM_CYCAPTION = 4,
			SM_CYCURSOR = 14,
			SM_CYDLGFRAME = 8,
			SM_CYDOUBLECLK = 37,
			SM_CYDRAG = 69,
			SM_CYEDGE = 46,
			SM_CYFIXEDFRAME = 8,
			SM_CYFOCUSBORDER = 84,
			SM_CYFRAME = 33,
			SM_CYFULLSCREEN = 17,
			SM_CYHSCROLL = 3,
			SM_CYICON = 12,
			SM_CYICONSPACING = 39,
			SM_CYKANJIWINDOW = 18,
			SM_CYMAXIMIZED = 62,
			SM_CYMAXTRACK = 60,
			SM_CYMENU = 15,
			SM_CYMENUCHECK = 72,
			SM_CYMENUSIZE = 55,
			SM_CYMIN = 29,
			SM_CYMINIMIZED = 58,
			SM_CYMINSPACING = 48,
			SM_CYMINTRACK = 35,
			SM_CYSCREEN = 1,
			SM_CYSIZE = 31,
			SM_CYSIZEFRAME = 33,
			SM_CYSMCAPTION = 51,
			SM_CYSMICON = 50,
			SM_CYSMSIZE = 53,
			SM_CYVIRTUALSCREEN = 79,
			SM_CYVSCROLL = 20,
			SM_CYVTHUMB = 9,
			SM_DBCSENABLED = 42,
			SM_DEBUG = 22,
			SM_DIGITIZER = 94,
			SM_IMMENABLED = 82,
			SM_MAXIMUMTOUCHES = 95,
			SM_MEDIACENTER = 87,
			SM_MENUDROPALIGNMENT = 40,
			SM_MIDEASTENABLED = 74,
			SM_MOUSEPRESENT = 19,
			SM_MOUSEHORIZONTALWHEELPRESENT = 91,
			SM_MOUSEWHEELPRESENT = 75,
			SM_NETWORK = 63,
			SM_PENWINDOWS = 41,
			SM_REMOTECONTROL = 8193,
			SM_REMOTESESSION = 4096,
			SM_SAMEDISPLAYFORMAT = 81,
			SM_SECURE = 44,
			SM_SERVERR2 = 89,
			SM_SHOWSOUNDS = 70,
			SM_SHUTTINGDOWN = 8192,
			SM_SLOWMACHINE = 73,
			SM_STARTER = 88,
			SM_SWAPBUTTON = 23,
			SM_TABLETPC = 86,
			SM_XVIRTUALSCREEN = 76,
			SM_YVIRTUALSCREEN = 77
		}

		[Flags]
		public enum KeyFlag
		{
			KF_EXTENDED = 0x100,
			KF_DLGMODE = 0x800,
			KF_MENUMODE = 0x1000,
			KF_ALTDOWN = 0x2000,
			KF_REPEAT = 0x4000,
			KF_UP = 0x8000
		}

		public enum ShowWindowCommand
		{
			Hide,
			ShowNormal,
			ShowMinimized,
			ShowMaximized,
			ShowNoActivate,
			Show,
			Minimize,
			ShowMinNoActive,
			ShowNA,
			Restore,
			ShowDefault,
			ForceMinimize
		}

		[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
		public struct MonitorInfoEx
		{
			public int Size;

			public RectStruct Monitor;

			public RectStruct WorkArea;

			public uint Flags;

			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
			public string DeviceName;

			public void Init()
			{
				Size = 104;
				DeviceName = string.Empty;
			}
		}

		public struct RectStruct
		{
			public int Left;

			public int Top;

			public int Right;

			public int Bottom;
		}

		[Flags]
		public enum TMEFlags : uint
		{
			TME_CANCEL = 0x80000000u,
			TME_HOVER = 1u,
			TME_LEAVE = 2u,
			TME_NONCLIENT = 0x10u,
			TME_QUERY = 0x40000000u
		}

		public struct TRACKMOUSEEVENT
		{
			public int cbSize;

			[MarshalAs(UnmanagedType.U4)]
			public TMEFlags dwFlags;

			public IntPtr hWnd;

			public uint dwHoverTime;

			public TRACKMOUSEEVENT(TMEFlags dwFlags, IntPtr hWnd, uint dwHoverTime)
			{
				cbSize = Marshal.SizeOf(typeof(TRACKMOUSEEVENT));
				this.dwFlags = dwFlags;
				this.hWnd = hWnd;
				this.dwHoverTime = dwHoverTime;
			}
		}

		public enum DisplayAffinity : uint
		{
			None,
			Monitor
		}

		[Flags]
		public enum WindowStylesEx : uint
		{
			WS_EX_ACCEPTFILES = 0x10u,
			WS_EX_APPWINDOW = 0x40000u,
			WS_EX_CLIENTEDGE = 0x200u,
			WS_EX_COMPOSITED = 0x2000000u,
			WS_EX_CONTEXTHELP = 0x400u,
			WS_EX_CONTROLPARENT = 0x10000u,
			WS_EX_DLGMODALFRAME = 1u,
			WS_EX_LAYERED = 0x80000u,
			WS_EX_LAYOUTRTL = 0x400000u,
			WS_EX_LEFT = 0u,
			WS_EX_LEFTSCROLLBAR = 0x4000u,
			WS_EX_LTRREADING = 0u,
			WS_EX_MDICHILD = 0x40u,
			WS_EX_NOACTIVATE = 0x8000000u,
			WS_EX_NOINHERITLAYOUT = 0x100000u,
			WS_EX_NOPARENTNOTIFY = 4u,
			WS_EX_OVERLAPPEDWINDOW = 0x300u,
			WS_EX_PALETTEWINDOW = 0x188u,
			WS_EX_RIGHT = 0x1000u,
			WS_EX_RIGHTSCROLLBAR = 0u,
			WS_EX_RTLREADING = 0x2000u,
			WS_EX_STATICEDGE = 0x20000u,
			WS_EX_TOOLWINDOW = 0x80u,
			WS_EX_TOPMOST = 8u,
			WS_EX_TRANSPARENT = 0x20u,
			WS_EX_WINDOWEDGE = 0x100u
		}

		private const int CCHDEVICENAME = 32;

		public const uint SWP_NOREDRAW = 8u;

		public const int GWL_EXSTYLE = -20;

		public const uint PM_REMOVE = 1u;

		[DllImport("user32.dll")]
		public static extern IntPtr SetThreadDpiAwarenessContext(IntPtr dpiContext);

		[DllImport("user32.dll", SetLastError = true)]
		public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);

		[DllImport("user32.dll")]
		public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags);

		[DllImport("user32.dll")]
		public static extern bool UnregisterClass(string lpClassName, IntPtr hInstance);

		[DllImport("user32.dll")]
		[return: MarshalAs(UnmanagedType.Bool)]
		public static extern bool IsWindowVisible(IntPtr hWnd);

		[DllImport("user32.dll")]
		[return: MarshalAs(UnmanagedType.Bool)]
		public static extern bool SetForegroundWindow(IntPtr hWnd);

		[DllImport("user32.dll")]
		public static extern bool ShowWindow(IntPtr hWnd, ShowWindowCommand nCmdShow);

		[DllImport("user32.dll")]
		public static extern bool BringWindowToTop(IntPtr hWnd);

		[DllImport("user32.dll")]
		public static extern bool UpdateWindow(IntPtr hWnd);

		[DllImport("user32.dll")]
		public static extern IntPtr DefWindowProc(IntPtr hWnd, WindowMessage uMsg, IntPtr wParam, IntPtr lParam);

		[DllImport("user32.dll")]
		public static extern void PostQuitMessage(int nExitCode);

		[DllImport("user32.dll")]
		public static extern IntPtr GetThreadDpiAwarenessContext();

		[DllImport("user32.dll")]
		public static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags);

		[DllImport("User32.dll")]
		public static extern bool GetMonitorInfo(IntPtr hMonitor, ref MonitorInfoEx lpmi);

		[DllImport("user32.dll")]
		public static extern IntPtr GetDC(IntPtr hWnd);

		[DllImport("user32.dll")]
		public static extern int GetSystemMetrics(SystemMetric smIndex);

		[DllImport("user32.dll")]
		public static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC);

		[DllImport("user32.dll", SetLastError = true)]
		[return: MarshalAs(UnmanagedType.Bool)]
		public static extern bool IsWindowUnicode(IntPtr hWnd);

		[DllImport("user32.dll")]
		public static extern bool IsChild(IntPtr hWndParent, IntPtr hWnd);

		[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
		public static extern ushort RegisterClassExW(ref WNDCLASSEXW lpwcx);

		[DllImport("user32.dll", SetLastError = true)]
		public static extern bool SetProcessDPIAware();

		[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
		public static extern IntPtr FindWindowW(string lpClassName, string lpWindowName);

		[DllImport("user32.dll", CharSet = CharSet.Auto)]
		public static extern int MessageBox(IntPtr hWnd, string text, string caption, int options);

		[DllImport("user32.dll")]
		public static extern bool AdjustWindowRectEx(ref RECT lpRect, uint dwStyle, bool bMenu, uint dwExStyle);

		[DllImport("user32.dll")]
		public static extern short GetAsyncKeyState(VirtualKey vKey);

		public static IntPtr CreateWindowW([Optional][In] string lpClassName, [Optional][In] string lpWindowName, [In] uint dwStyle, [In] int X, [In] int Y, [In] int nWidth, [In] int nHeight, [Optional][In] IntPtr hWndParent, [Optional][In] IntPtr hMenu, [Optional][In] IntPtr hInstance, [Optional][In] IntPtr lpParam)
		{
			return CreateWindowExW(0u, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
		}

		[DllImport("user32.dll")]
		public static extern int TrackMouseEvent(ref TRACKMOUSEEVENT lpEventTrack);

		[DllImport("user32.dll")]
		public static extern bool ReleaseCapture();

		[DllImport("user32.dll")]
		public static extern IntPtr SetCapture(IntPtr hWnd);

		[DllImport("user32.dll")]
		public static extern IntPtr GetCapture();

		[DllImport("user32.dll")]
		public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);

		[DllImport("user32.dll")]
		public static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);

		[DllImport("user32.dll")]
		public static extern IntPtr WindowFromPoint(POINT p);

		[DllImport("user32.dll")]
		public static extern bool ClientToScreen(IntPtr hWnd, ref POINT lpPoint);

		[DllImport("user32.dll")]
		public static extern IntPtr GetForegroundWindow();

		[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
		public static extern IntPtr CreateWindowExW(uint dwExStyle, [MarshalAs(UnmanagedType.LPWStr)] string lpClassName, [MarshalAs(UnmanagedType.LPWStr)] string lpWindowName, uint dwStyle, int X, int Y, int nWidth, int nHeight, IntPtr hWndParent, IntPtr hMenu, IntPtr hInstance, IntPtr lpParam);

		[DllImport("user32.dll", SetLastError = true)]
		public static extern IntPtr GetWindow(IntPtr hWnd, GetWindowType uCmd);

		[DllImport("user32.dll", SetLastError = true)]
		public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

		[DllImport("user32.dll")]
		public static extern bool SetWindowDisplayAffinity(IntPtr hwnd, DisplayAffinity affinity);

		[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
		[return: MarshalAs(UnmanagedType.Bool)]
		public static extern bool DestroyWindow(IntPtr hwnd);

		public static IntPtr SetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
		{
			if (IntPtr.Size == 8)
			{
				return SetWindowLongPtr64(hWnd, nIndex, dwNewLong);
			}
			return new IntPtr(SetWindowLong32(hWnd, nIndex, dwNewLong.ToInt32()));
		}

		[DllImport("user32.dll", EntryPoint = "SetWindowLong")]
		private static extern int SetWindowLong32(HandleRef hWnd, int nIndex, int dwNewLong);

		[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr")]
		private static extern IntPtr SetWindowLongPtr64(HandleRef hWnd, int nIndex, IntPtr dwNewLong);

		[DllImport("USER32.dll")]
		public static extern short GetKeyState(VirtualKey nVirtKey);

		[DllImport("user32.dll")]
		public static extern IntPtr GetMessageExtraInfo();

		[DllImport("user32.dll")]
		public static extern IntPtr DispatchMessage([In] ref MSG lpmsg);

		[DllImport("user32.dll")]
		[return: MarshalAs(UnmanagedType.Bool)]
		public static extern bool PeekMessage(out MSG lpMsg, IntPtr hWnd, uint wMsgFilterMin, uint wMsgFilterMax, uint wRemoveMsg);

		[DllImport("user32.dll")]
		public static extern bool TranslateMessage([In] ref MSG lpMsg);

		[DllImport("user32.dll")]
		public static extern IntPtr LoadCursor(IntPtr hInstance, int lpCursorName);

		[DllImport("user32.dll")]
		public static extern IntPtr SetCursor(IntPtr handle);

		[DllImport("user32.dll", EntryPoint = "GetWindowLong")]
		public static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex);

		[DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")]
		public static extern IntPtr GetWindowL

plugins/OverlayDearImGui.Shared/SharpDX.DXGI.dll

Decompiled a month ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using SharpDX.DXGI;
using SharpDX.Direct3D;
using SharpDX.Mathematics.Interop;
using SharpDX.Win32;

[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: InternalsVisibleTo("SharpDX.Direct3D10")]
[assembly: InternalsVisibleTo("SharpDX.Direct3D11")]
[assembly: InternalsVisibleTo("SharpDX.Direct2D1")]
[assembly: ComVisible(false)]
[assembly: AssemblyFileVersion("4.2.1.34")]
[assembly: AssemblyInformationalVersion("4.2.1-beta0+7abb72df54")]
[assembly: AssemblyCompany("Alexandre Mutel")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyCopyright("Copyright (c) 2010-2016 Alexandre Mutel")]
[assembly: AssemblyDescription("Assembly providing DirectX - DXGI managed API.")]
[assembly: AssemblyProduct("SharpDX.DXGI")]
[assembly: AssemblyTitle("SharpDX.DXGI")]
[assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/xiaoxiao921/SharpDX")]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: NeutralResourcesLanguage("en-US")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("4.2.0.0")]
[module: UnverifiableCode]
internal class <Module>
{
	static <Module>()
	{
		ModuleInit.Setup();
	}
}
internal sealed class ThisAssembly
{
	internal const string AssemblyVersion = "4.2.0.0";

	internal const string AssemblyFileVersion = "4.2.1.34";

	internal const string AssemblyInformationalVersion = "4.2.1-beta0+7abb72df54";

	internal const string AssemblyName = "SharpDX.DXGI";

	internal const string AssemblyTitle = "SharpDX.DXGI";

	internal const string AssemblyConfiguration = "Release";

	internal const string GitCommitId = "7abb72df544eaede656c546ee71a8ad1be9dd19b";

	internal const string RootNamespace = "SharpDX.DXGI";

	private ThisAssembly()
	{
	}
}
namespace SharpDX.DXGI;

[Guid("2411e7e1-12ac-4ccf-bd14-9798e8534dc0")]
public class Adapter : DXGIObject
{
	public Output[] Outputs
	{
		get
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			List<Output> list = new List<Output>();
			Output outputOut;
			while (!(GetOutput(list.Count, out outputOut) == ResultDescriptor.op_Implicit(ResultCode.NotFound)) && outputOut != null)
			{
				list.Add(outputOut);
			}
			return list.ToArray();
		}
	}

	public AdapterDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public bool IsInterfaceSupported(Type type)
	{
		long userModeVersion;
		return IsInterfaceSupported(type, out userModeVersion);
	}

	public bool IsInterfaceSupported<T>() where T : ComObject
	{
		long userModeVersion;
		return IsInterfaceSupported(typeof(T), out userModeVersion);
	}

	public bool IsInterfaceSupported<T>(out long userModeVersion) where T : ComObject
	{
		return IsInterfaceSupported(typeof(T), out userModeVersion);
	}

	public bool IsInterfaceSupported(Type type, out long userModeVersion)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_000d: Unknown result type (might be due to invalid IL or missing references)
		Result val = CheckInterfaceSupport(Utilities.GetGuidFromType(type), out userModeVersion);
		return ((Result)(ref val)).Success;
	}

	public Output GetOutput(int outputIndex)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		Output outputOut;
		Result output = GetOutput(outputIndex, out outputOut);
		((Result)(ref output)).CheckError();
		return outputOut;
	}

	public int GetOutputCount()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		int i;
		Output outputOut;
		for (i = 0; !(GetOutput(i, out outputOut) == ResultDescriptor.op_Implicit(ResultCode.NotFound)); i++)
		{
			if (outputOut == null)
			{
				break;
			}
			((DisposeBase)outputOut).Dispose();
		}
		return i;
	}

	public Adapter(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Adapter(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Adapter(nativePtr);
		}
		return null;
	}

	internal unsafe Result GetOutput(int output, out Output outputOut)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, output, &zero));
		if (zero != IntPtr.Zero)
		{
			outputOut = new Output(zero);
			return result;
		}
		outputOut = null;
		return result;
	}

	internal unsafe void GetDescription(out AdapterDescription descRef)
	{
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		AdapterDescription.__Native @ref = default(AdapterDescription.__Native);
		descRef = default(AdapterDescription);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref));
		descRef.__MarshalFrom(ref @ref);
		((Result)(ref val)).CheckError();
	}

	internal unsafe Result CheckInterfaceSupport(Guid interfaceName, out long uMDVersionRef)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		Result result;
		fixed (long* ptr = &uMDVersionRef)
		{
			void* ptr2 = ptr;
			result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &interfaceName, ptr2));
		}
		return result;
	}
}
[CompilerGenerated]
internal class AssemblyDoc
{
}
public static class DebugId
{
	public static readonly Guid All = new Guid("e48ae283-da80-490b-87e6-43e9a9cfda08");

	public static readonly Guid App = new Guid("06cd6e01-4219-4ebd-8709-27ed23360c62");

	public static readonly Guid Dx = new Guid("35cdd7fc-13b2-421d-a5d7-7e4451287d64");

	public static readonly Guid Dxgi = new Guid("25cddaa4-b1c6-47e1-ac3e-98875b5a2e2a");
}
internal static class DebugInterface
{
	[UnmanagedFunctionPointer(CallingConvention.Winapi)]
	private delegate Result GetDebugInterface(ref Guid guid, out IntPtr result);

	private static readonly GetDebugInterface getDebugInterface;

	static DebugInterface()
	{
		getDebugInterface = null;
	}

	public static bool TryCreateComPtr<T>(out IntPtr comPtr) where T : class
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		comPtr = IntPtr.Zero;
		if (getDebugInterface == null)
		{
			return false;
		}
		Guid guid = typeof(T).GetTypeInfo().GUID;
		Result val = getDebugInterface(ref guid, out comPtr);
		if (((Result)(ref val)).Failure)
		{
			return false;
		}
		return comPtr != IntPtr.Zero;
	}
}
[Guid("54ec77fa-1377-44e6-8c32-88fd5f44c84c")]
public class Device : DXGIObject
{
	public Adapter Adapter
	{
		get
		{
			GetAdapter(out var adapterRef);
			return adapterRef;
		}
	}

	public int GPUThreadPriority
	{
		get
		{
			GetGPUThreadPriority(out var priorityRef);
			return priorityRef;
		}
		set
		{
			SetGPUThreadPriority(value);
		}
	}

	public Residency[] QueryResourceResidency(params ComObject[] comObjects)
	{
		int num = comObjects.Length;
		Residency[] array = new Residency[num];
		QueryResourceResidency((IUnknown[])(object)comObjects, array, num);
		return array;
	}

	public Device(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Device(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Device(nativePtr);
		}
		return null;
	}

	internal unsafe void GetAdapter(out Adapter adapterRef)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &zero));
		if (zero != IntPtr.Zero)
		{
			adapterRef = new Adapter(zero);
		}
		else
		{
			adapterRef = null;
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateSurface(ref SurfaceDescription descRef, int numSurfaces, int usage, SharedResource? sharedResourceRef, out Surface surfaceOut)
	{
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		SharedResource value = default(SharedResource);
		if (sharedResourceRef.HasValue)
		{
			value = sharedResourceRef.Value;
		}
		Result val;
		fixed (SurfaceDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			void* nativePointer = ((CppObject)this)._nativePointer;
			SharedResource* intPtr = ((!sharedResourceRef.HasValue) ? null : (&value));
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(nativePointer, ptr2, numSurfaces, usage, intPtr, &zero));
		}
		if (zero != IntPtr.Zero)
		{
			surfaceOut = new Surface(zero);
		}
		else
		{
			surfaceOut = null;
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void QueryResourceResidency(IUnknown[] resourcesOut, Residency[] residencyStatusRef, int numResources)
	{
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_007a: Unknown result type (might be due to invalid IL or missing references)
		IntPtr* ptr = null;
		if (resourcesOut != null)
		{
			ptr = stackalloc IntPtr[resourcesOut.Length];
		}
		if (resourcesOut != null)
		{
			for (int i = 0; i < resourcesOut.Length; i++)
			{
				ptr[i] = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)resourcesOut[i]);
			}
		}
		Result val;
		fixed (Residency* ptr2 = residencyStatusRef)
		{
			void* ptr3 = ptr2;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr, ptr3, numResources));
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void SetGPUThreadPriority(int priority)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, priority));
		((Result)(ref val)).CheckError();
	}

	internal unsafe void GetGPUThreadPriority(out int priorityRef)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &priorityRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("3d3e0379-f9de-4d58-bb6c-18d62992f1a6")]
public class DeviceChild : DXGIObject
{
	public unsafe string DebugName
	{
		get
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			byte* ptr = stackalloc byte[1024];
			int dataSizeRef = 1023;
			Result privateData = GetPrivateData(CommonGuid.DebugObjectName, ref dataSizeRef, new IntPtr(ptr));
			if (((Result)(ref privateData)).Failure)
			{
				return string.Empty;
			}
			ptr[dataSizeRef] = 0;
			return Marshal.PtrToStringAnsi(new IntPtr(ptr));
		}
		set
		{
			if (string.IsNullOrEmpty(value))
			{
				SetPrivateData(CommonGuid.DebugObjectName, 0, IntPtr.Zero);
				return;
			}
			IntPtr dataRef = Utilities.StringToHGlobalAnsi(value);
			SetPrivateData(CommonGuid.DebugObjectName, value.Length, dataRef);
		}
	}

	public T GetDevice<T>() where T : ComObject
	{
		GetDevice(Utilities.GetGuidFromType(typeof(T)), out var deviceOut);
		return CppObject.FromPointer<T>(deviceOut);
	}

	public DeviceChild(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator DeviceChild(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new DeviceChild(nativePtr);
		}
		return null;
	}

	public unsafe void GetDevice(Guid riid, out IntPtr deviceOut)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &deviceOut)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &riid, ptr2));
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("119E7452-DE9E-40fe-8806-88F90C12B441")]
public class DXGIDebug : ComObject
{
	public static DXGIDebug TryCreate()
	{
		if (!DebugInterface.TryCreateComPtr<DXGIDebug>(out var comPtr))
		{
			return null;
		}
		return new DXGIDebug(comPtr);
	}

	public DXGIDebug(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator DXGIDebug(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new DXGIDebug(nativePtr);
		}
		return null;
	}

	public unsafe void ReportLiveObjects(Guid apiid, DebugRloFlags flags)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)3 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, apiid, (int)flags));
		((Result)(ref val)).CheckError();
	}
}
[Guid("c5a05f0c-16f2-4adf-9f4d-a8c4d58ac550")]
public class DXGIDebug1 : DXGIDebug
{
	public RawBool IsLeakTrackingEnabledForThread => IsLeakTrackingEnabledForThread_();

	public new static DXGIDebug1 TryCreate()
	{
		if (!DebugInterface.TryCreateComPtr<DXGIDebug1>(out var comPtr))
		{
			return null;
		}
		return new DXGIDebug1(comPtr);
	}

	public DXGIDebug1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator DXGIDebug1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new DXGIDebug1(nativePtr);
		}
		return null;
	}

	public unsafe void EnableLeakTrackingForThread()
	{
		((delegate* unmanaged[Stdcall]<void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)4 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}

	public unsafe void DisableLeakTrackingForThread()
	{
		((delegate* unmanaged[Stdcall]<void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)5 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}

	internal unsafe RawBool IsLeakTrackingEnabledForThread_()
	{
		//IL_0018: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)6 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}
}
[Guid("aec22fb8-76f3-4639-9be0-28eb43a67a2e")]
public class DXGIObject : ComObject
{
	public T GetParent<T>() where T : ComObject
	{
		GetParent(Utilities.GetGuidFromType(typeof(T)), out var parentOut);
		return CppObject.FromPointer<T>(parentOut);
	}

	public DXGIObject(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator DXGIObject(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new DXGIObject(nativePtr);
		}
		return null;
	}

	public unsafe void SetPrivateData(Guid name, int dataSize, IntPtr dataRef)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)3 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &name, dataSize, (void*)dataRef));
		((Result)(ref val)).CheckError();
	}

	public unsafe void SetPrivateDataInterface(Guid name, IUnknown unknownRef)
	{
		//IL_0033: Unknown result type (might be due to invalid IL or missing references)
		//IL_0038: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)unknownRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)4 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &name, (void*)zero));
		((Result)(ref val)).CheckError();
	}

	public unsafe Result GetPrivateData(Guid name, ref int dataSizeRef, IntPtr dataRef)
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		Result result;
		fixed (int* ptr = &dataSizeRef)
		{
			void* ptr2 = ptr;
			result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)5 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &name, ptr2, (void*)dataRef));
		}
		return result;
	}

	public unsafe void GetParent(Guid riid, out IntPtr parentOut)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &parentOut)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)6 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &riid, ptr2));
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("7b7166ec-21c7-44ae-b21a-c9ae321ae369")]
public class Factory : DXGIObject
{
	public Adapter[] Adapters
	{
		get
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			List<Adapter> list = new List<Adapter>();
			Adapter adapterOut;
			while (!(GetAdapter(list.Count, out adapterOut) == ResultDescriptor.op_Implicit(ResultCode.NotFound)))
			{
				list.Add(adapterOut);
			}
			return list.ToArray();
		}
	}

	public Adapter GetAdapter(int index)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		Adapter adapterOut;
		Result adapter = GetAdapter(index, out adapterOut);
		((Result)(ref adapter)).CheckError();
		return adapterOut;
	}

	public int GetAdapterCount()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		int num = 0;
		while (true)
		{
			Adapter adapterOut;
			Result adapter = GetAdapter(num, out adapterOut);
			if (adapterOut != null)
			{
				((DisposeBase)adapterOut).Dispose();
			}
			if (adapter == ResultDescriptor.op_Implicit(ResultCode.NotFound))
			{
				break;
			}
			num++;
		}
		return num;
	}

	public Factory(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Factory(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Factory(nativePtr);
		}
		return null;
	}

	internal unsafe Result GetAdapter(int adapter, out Adapter adapterOut)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, adapter, &zero));
		if (zero != IntPtr.Zero)
		{
			adapterOut = new Adapter(zero);
			return result;
		}
		adapterOut = null;
		return result;
	}

	public unsafe void MakeWindowAssociation(IntPtr windowHandle, WindowAssociationFlags flags)
	{
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)windowHandle, (int)flags));
		((Result)(ref val)).CheckError();
	}

	public unsafe IntPtr GetWindowAssociation()
	{
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		IntPtr result = default(IntPtr);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &result));
		((Result)(ref val)).CheckError();
		return result;
	}

	internal unsafe void CreateSwapChain(IUnknown deviceRef, ref SwapChainDescription descRef, SwapChain swapChainOut)
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)deviceRef);
		Result val;
		fixed (SwapChainDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero, ptr2, &zero2));
		}
		((CppObject)swapChainOut).NativePointer = zero2;
		((Result)(ref val)).CheckError();
	}

	public unsafe Adapter CreateSoftwareAdapter(IntPtr module)
	{
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)module, &zero));
		Adapter result = ((!(zero != IntPtr.Zero)) ? null : new Adapter(zero));
		((Result)(ref val)).CheckError();
		return result;
	}
}
[Guid("770aae78-f26f-4dba-a829-253c83d1b387")]
public class Factory1 : Factory
{
	public Adapter1[] Adapters1
	{
		get
		{
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			List<Adapter1> list = new List<Adapter1>();
			Adapter1 adapterOut;
			while (!(GetAdapter1(list.Count, out adapterOut) == ResultDescriptor.op_Implicit(ResultCode.NotFound)))
			{
				list.Add(adapterOut);
			}
			return list.ToArray();
		}
	}

	public RawBool IsCurrent => IsCurrent_();

	public Factory1()
		: base(IntPtr.Zero)
	{
		DXGI.CreateDXGIFactory1(Utilities.GetGuidFromType(((object)this).GetType()), out var factoryOut);
		((CppObject)this).NativePointer = factoryOut;
	}

	public Adapter1 GetAdapter1(int index)
	{
		//IL_0004: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		Adapter1 adapterOut;
		Result adapter = GetAdapter1(index, out adapterOut);
		((Result)(ref adapter)).CheckError();
		return adapterOut;
	}

	public int GetAdapterCount1()
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		int num = 0;
		while (true)
		{
			Adapter1 adapterOut;
			Result adapter = GetAdapter1(num, out adapterOut);
			if (adapterOut != null)
			{
				((DisposeBase)adapterOut).Dispose();
			}
			if (adapter == ResultDescriptor.op_Implicit(ResultCode.NotFound))
			{
				break;
			}
			num++;
		}
		return num;
	}

	public Factory1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Factory1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Factory1(nativePtr);
		}
		return null;
	}

	internal unsafe Result GetAdapter1(int adapter, out Adapter1 adapterOut)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, adapter, &zero));
		if (zero != IntPtr.Zero)
		{
			adapterOut = new Adapter1(zero);
			return result;
		}
		adapterOut = null;
		return result;
	}

	internal unsafe RawBool IsCurrent_()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}
}
[Guid("50c83a1c-e072-4c48-87b0-3630fa36a6d0")]
public class Factory2 : Factory1
{
	public RawBool IsWindowedStereoEnabled => IsWindowedStereoEnabled_();

	public Factory2(bool debug = false)
		: this(IntPtr.Zero)
	{
		DXGI.CreateDXGIFactory2(debug ? 1 : 0, Utilities.GetGuidFromType(((object)this).GetType()), out var factoryOut);
		((CppObject)this).NativePointer = factoryOut;
	}

	public Factory2(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Factory2(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Factory2(nativePtr);
		}
		return null;
	}

	internal unsafe RawBool IsWindowedStereoEnabled_()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)14 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}

	internal unsafe void CreateSwapChainForHwnd(IUnknown deviceRef, IntPtr hWnd, ref SwapChainDescription1 descRef, SwapChainFullScreenDescription? fullscreenDescRef, Output restrictToOutputRef, SwapChain1 swapChainOut)
	{
		//IL_007f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0084: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		IntPtr zero3 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)deviceRef);
		SwapChainFullScreenDescription value = default(SwapChainFullScreenDescription);
		if (fullscreenDescRef.HasValue)
		{
			value = fullscreenDescRef.Value;
		}
		zero2 = CppObject.ToCallbackPtr<Output>((ICallbackable)(object)restrictToOutputRef);
		Result val;
		fixed (SwapChainDescription1* ptr = &descRef)
		{
			void* ptr2 = ptr;
			void* nativePointer = ((CppObject)this)._nativePointer;
			void* intPtr = (void*)zero;
			void* intPtr2 = (void*)hWnd;
			SwapChainFullScreenDescription* intPtr3 = ((!fullscreenDescRef.HasValue) ? null : (&value));
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)15 * (nint)sizeof(void*))))(nativePointer, intPtr, intPtr2, ptr2, intPtr3, (void*)zero2, &zero3));
		}
		((CppObject)swapChainOut).NativePointer = zero3;
		((Result)(ref val)).CheckError();
	}

	internal unsafe void CreateSwapChainForCoreWindow(IUnknown deviceRef, IUnknown windowRef, ref SwapChainDescription1 descRef, Output restrictToOutputRef, SwapChain1 swapChainOut)
	{
		//IL_006b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0070: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		IntPtr zero3 = IntPtr.Zero;
		IntPtr zero4 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)deviceRef);
		zero2 = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)windowRef);
		zero3 = CppObject.ToCallbackPtr<Output>((ICallbackable)(object)restrictToOutputRef);
		Result val;
		fixed (SwapChainDescription1* ptr = &descRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)16 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero, (void*)zero2, ptr2, (void*)zero3, &zero4));
		}
		((CppObject)swapChainOut).NativePointer = zero4;
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetSharedResourceAdapterLuid(IntPtr hResource, out long luidRef)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (long* ptr = &luidRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)17 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)hResource, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void RegisterStereoStatusWindow(IntPtr windowHandle, int wMsg, out int dwCookieRef)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &dwCookieRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)18 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)windowHandle, wMsg, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void RegisterStereoStatusEvent(IntPtr hEvent, out int dwCookieRef)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &dwCookieRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)19 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)hEvent, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void UnregisterStereoStatus(int dwCookie)
	{
		((delegate* unmanaged[Stdcall]<void*, int, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)20 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, dwCookie);
	}

	public unsafe void RegisterOcclusionStatusWindow(IntPtr windowHandle, int wMsg, out int dwCookieRef)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &dwCookieRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)21 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)windowHandle, wMsg, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void RegisterOcclusionStatusEvent(IntPtr hEvent, out int dwCookieRef)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &dwCookieRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)22 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)hEvent, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void UnregisterOcclusionStatus(int dwCookie)
	{
		((delegate* unmanaged[Stdcall]<void*, int, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)23 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, dwCookie);
	}

	internal unsafe void CreateSwapChainForComposition(IUnknown deviceRef, ref SwapChainDescription1 descRef, Output restrictToOutputRef, SwapChain1 swapChainOut)
	{
		//IL_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		IntPtr zero3 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)deviceRef);
		zero2 = CppObject.ToCallbackPtr<Output>((ICallbackable)(object)restrictToOutputRef);
		Result val;
		fixed (SwapChainDescription1* ptr = &descRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)24 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero, ptr2, (void*)zero2, &zero3));
		}
		((CppObject)swapChainOut).NativePointer = zero3;
		((Result)(ref val)).CheckError();
	}
}
[Guid("1bc6ea02-ef36-464f-bf0c-21ca39e5168a")]
public class Factory4 : Factory3
{
	public Factory4()
		: this(IntPtr.Zero)
	{
		DXGI.CreateDXGIFactory1(Utilities.GetGuidFromType(((object)this).GetType()), out var factoryOut);
		((CppObject)this).NativePointer = factoryOut;
	}

	public Factory4(bool debug = false)
		: this(IntPtr.Zero)
	{
		DXGI.CreateDXGIFactory2(debug ? 1 : 0, Utilities.GetGuidFromType(typeof(Factory4)), out var factoryOut);
		((CppObject)this).NativePointer = factoryOut;
	}

	public Adapter GetWarpAdapter()
	{
		EnumWarpAdapter(Utilities.GetGuidFromType(typeof(Adapter)), out var vAdapterOut);
		return new Adapter(vAdapterOut);
	}

	public Adapter GetAdapterByLuid(long adapterLuid)
	{
		EnumAdapterByLuid(adapterLuid, Utilities.GetGuidFromType(typeof(Adapter)), out var vAdapterOut);
		return new Adapter(vAdapterOut);
	}

	public Factory4(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Factory4(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Factory4(nativePtr);
		}
		return null;
	}

	private unsafe void EnumAdapterByLuid(long adapterLuid, Guid riid, out IntPtr vAdapterOut)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &vAdapterOut)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, long, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)26 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, adapterLuid, &riid, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	private unsafe void EnumWarpAdapter(Guid riid, out IntPtr vAdapterOut)
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (IntPtr* ptr = &vAdapterOut)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)27 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &riid, ptr2));
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("7632e1f5-ee65-4dca-87fd-84cd75f8838d")]
public class Factory5 : Factory4
{
	public unsafe bool PresentAllowTearing
	{
		get
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			RawBool val = default(RawBool);
			CheckFeatureSupport(Feature.PresentAllowTearing, new IntPtr(&val), Unsafe.SizeOf<RawBool>());
			return RawBool.op_Implicit(val);
		}
	}

	public Factory5(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Factory5(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Factory5(nativePtr);
		}
		return null;
	}

	public unsafe void CheckFeatureSupport(Feature feature, IntPtr featureSupportDataRef, int featureSupportDataSize)
	{
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)28 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)feature, (void*)featureSupportDataRef, featureSupportDataSize));
		((Result)(ref val)).CheckError();
	}
}
public static class FormatHelper
{
	private static readonly int[] sizeOfInBits;

	private static readonly bool[] compressedFormats;

	private static readonly bool[] srgbFormats;

	private static readonly bool[] typelessFormats;

	public static int SizeOfInBytes(this Format format)
	{
		return format.SizeOfInBits() >> 3;
	}

	public static int SizeOfInBits(this Format format)
	{
		return sizeOfInBits[(int)format];
	}

	public static bool IsValid(this Format format)
	{
		if (format >= Format.R32G32B32A32_Typeless)
		{
			return format <= Format.B4G4R4A4_UNorm;
		}
		return false;
	}

	public static bool IsCompressed(this Format format)
	{
		return compressedFormats[(int)format];
	}

	public static bool IsPacked(this Format format)
	{
		if (format != Format.R8G8_B8G8_UNorm)
		{
			return format == Format.G8R8_G8B8_UNorm;
		}
		return true;
	}

	public static bool IsVideo(this Format format)
	{
		switch (format)
		{
		case Format.AYUV:
		case Format.Y410:
		case Format.Y416:
		case Format.NV12:
		case Format.P010:
		case Format.P016:
		case Format.YUY2:
		case Format.Y210:
		case Format.Y216:
		case Format.NV11:
			return true;
		case Format.Opaque420:
		case Format.AI44:
		case Format.IA44:
		case Format.P8:
		case Format.A8P8:
			return true;
		default:
			return false;
		}
	}

	public static bool IsSRgb(this Format format)
	{
		return srgbFormats[(int)format];
	}

	public static bool IsTypeless(this Format format)
	{
		return typelessFormats[(int)format];
	}

	public static int ComputeScanlineCount(this Format format, int height)
	{
		if ((uint)(format - 70) <= 14u || (uint)(format - 94) <= 5u)
		{
			return Math.Max(1, (height + 3) / 4);
		}
		return height;
	}

	static FormatHelper()
	{
		sizeOfInBits = new int[256];
		compressedFormats = new bool[256];
		srgbFormats = new bool[256];
		typelessFormats = new bool[256];
		InitFormat(new Format[1] { Format.R1_UNorm }, 1);
		InitFormat(new Format[6]
		{
			Format.A8_UNorm,
			Format.R8_SInt,
			Format.R8_SNorm,
			Format.R8_Typeless,
			Format.R8_UInt,
			Format.R8_UNorm
		}, 8);
		InitFormat(new Format[15]
		{
			Format.B5G5R5A1_UNorm,
			Format.B5G6R5_UNorm,
			Format.D16_UNorm,
			Format.R16_Float,
			Format.R16_SInt,
			Format.R16_SNorm,
			Format.R16_Typeless,
			Format.R16_UInt,
			Format.R16_UNorm,
			Format.R8G8_SInt,
			Format.R8G8_SNorm,
			Format.R8G8_Typeless,
			Format.R8G8_UInt,
			Format.R8G8_UNorm,
			Format.B4G4R4A4_UNorm
		}, 16);
		InitFormat(new Format[38]
		{
			Format.B8G8R8X8_Typeless,
			Format.B8G8R8X8_UNorm,
			Format.B8G8R8X8_UNorm_SRgb,
			Format.D24_UNorm_S8_UInt,
			Format.D32_Float,
			Format.D32_Float_S8X24_UInt,
			Format.G8R8_G8B8_UNorm,
			Format.R10G10B10_Xr_Bias_A2_UNorm,
			Format.R10G10B10A2_Typeless,
			Format.R10G10B10A2_UInt,
			Format.R10G10B10A2_UNorm,
			Format.R11G11B10_Float,
			Format.R16G16_Float,
			Format.R16G16_SInt,
			Format.R16G16_SNorm,
			Format.R16G16_Typeless,
			Format.R16G16_UInt,
			Format.R16G16_UNorm,
			Format.R24_UNorm_X8_Typeless,
			Format.R24G8_Typeless,
			Format.R32_Float,
			Format.R32_Float_X8X24_Typeless,
			Format.R32_SInt,
			Format.R32_Typeless,
			Format.R32_UInt,
			Format.R8G8_B8G8_UNorm,
			Format.R8G8B8A8_SInt,
			Format.R8G8B8A8_SNorm,
			Format.R8G8B8A8_Typeless,
			Format.R8G8B8A8_UInt,
			Format.R8G8B8A8_UNorm,
			Format.R8G8B8A8_UNorm_SRgb,
			Format.B8G8R8A8_Typeless,
			Format.B8G8R8A8_UNorm,
			Format.B8G8R8A8_UNorm_SRgb,
			Format.R9G9B9E5_Sharedexp,
			Format.X24_Typeless_G8_UInt,
			Format.X32_Typeless_G8X24_UInt
		}, 32);
		InitFormat(new Format[11]
		{
			Format.R16G16B16A16_Float,
			Format.R16G16B16A16_SInt,
			Format.R16G16B16A16_SNorm,
			Format.R16G16B16A16_Typeless,
			Format.R16G16B16A16_UInt,
			Format.R16G16B16A16_UNorm,
			Format.R32G32_Float,
			Format.R32G32_SInt,
			Format.R32G32_Typeless,
			Format.R32G32_UInt,
			Format.R32G8X24_Typeless
		}, 64);
		InitFormat(new Format[4]
		{
			Format.R32G32B32_Float,
			Format.R32G32B32_SInt,
			Format.R32G32B32_Typeless,
			Format.R32G32B32_UInt
		}, 96);
		InitFormat(new Format[4]
		{
			Format.R32G32B32A32_Float,
			Format.R32G32B32A32_SInt,
			Format.R32G32B32A32_Typeless,
			Format.R32G32B32A32_UInt
		}, 128);
		InitFormat(new Format[6]
		{
			Format.BC1_Typeless,
			Format.BC1_UNorm,
			Format.BC1_UNorm_SRgb,
			Format.BC4_SNorm,
			Format.BC4_Typeless,
			Format.BC4_UNorm
		}, 4);
		InitFormat(new Format[15]
		{
			Format.BC2_Typeless,
			Format.BC2_UNorm,
			Format.BC2_UNorm_SRgb,
			Format.BC3_Typeless,
			Format.BC3_UNorm,
			Format.BC3_UNorm_SRgb,
			Format.BC5_SNorm,
			Format.BC5_Typeless,
			Format.BC5_UNorm,
			Format.BC6H_Sf16,
			Format.BC6H_Typeless,
			Format.BC6H_Uf16,
			Format.BC7_Typeless,
			Format.BC7_UNorm,
			Format.BC7_UNorm_SRgb
		}, 8);
		InitDefaults(new Format[21]
		{
			Format.BC1_Typeless,
			Format.BC1_UNorm,
			Format.BC1_UNorm_SRgb,
			Format.BC2_Typeless,
			Format.BC2_UNorm,
			Format.BC2_UNorm_SRgb,
			Format.BC3_Typeless,
			Format.BC3_UNorm,
			Format.BC3_UNorm_SRgb,
			Format.BC4_Typeless,
			Format.BC4_UNorm,
			Format.BC4_SNorm,
			Format.BC5_Typeless,
			Format.BC5_UNorm,
			Format.BC5_SNorm,
			Format.BC6H_Typeless,
			Format.BC6H_Uf16,
			Format.BC6H_Sf16,
			Format.BC7_Typeless,
			Format.BC7_UNorm,
			Format.BC7_UNorm_SRgb
		}, compressedFormats);
		InitDefaults(new Format[7]
		{
			Format.R8G8B8A8_UNorm_SRgb,
			Format.BC1_UNorm_SRgb,
			Format.BC2_UNorm_SRgb,
			Format.BC3_UNorm_SRgb,
			Format.B8G8R8A8_UNorm_SRgb,
			Format.B8G8R8X8_UNorm_SRgb,
			Format.BC7_UNorm_SRgb
		}, srgbFormats);
		InitDefaults(new Format[22]
		{
			Format.R32G32B32A32_Typeless,
			Format.R32G32B32_Typeless,
			Format.R16G16B16A16_Typeless,
			Format.R32G32_Typeless,
			Format.R32G8X24_Typeless,
			Format.R10G10B10A2_Typeless,
			Format.R8G8B8A8_Typeless,
			Format.R16G16_Typeless,
			Format.R32_Typeless,
			Format.R24G8_Typeless,
			Format.R8G8_Typeless,
			Format.R16_Typeless,
			Format.R8_Typeless,
			Format.BC1_Typeless,
			Format.BC2_Typeless,
			Format.BC3_Typeless,
			Format.BC4_Typeless,
			Format.BC5_Typeless,
			Format.B8G8R8A8_Typeless,
			Format.B8G8R8X8_Typeless,
			Format.BC6H_Typeless,
			Format.BC7_Typeless
		}, typelessFormats);
	}

	private static void InitFormat(IEnumerable<Format> formats, int bitCount)
	{
		foreach (Format format in formats)
		{
			sizeOfInBits[(int)format] = bitCount;
		}
	}

	private static void InitDefaults(IEnumerable<Format> formats, bool[] outputArray)
	{
		foreach (Format format in formats)
		{
			outputArray[(int)format] = true;
		}
	}
}
[Guid("D67441C7-672A-476f-9E82-CD55B44949CE")]
public class InfoQueue : ComObject
{
	public static InfoQueue TryCreate()
	{
		if (!DebugInterface.TryCreateComPtr<InfoQueue>(out var comPtr))
		{
			return null;
		}
		return new InfoQueue(comPtr);
	}

	public InfoQueue(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator InfoQueue(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new InfoQueue(nativePtr);
		}
		return null;
	}

	public unsafe void SetMessageCountLimit(Guid producer, long messageCountLimit)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, long, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)3 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, messageCountLimit));
		((Result)(ref val)).CheckError();
	}

	public unsafe void ClearStoredMessages(Guid producer)
	{
		((delegate* unmanaged[Stdcall]<void*, Guid, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)4 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe void GetMessage(Guid producer, long messageIndex, InformationQueueMessage[] messageRef, ref PointerSize messageByteLengthRef)
	{
		//IL_0054: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Unknown result type (might be due to invalid IL or missing references)
		InformationQueueMessage.__Native[] array = ((messageRef == null) ? null : new InformationQueueMessage.__Native[messageRef.Length]);
		Result val;
		fixed (PointerSize* ptr = &messageByteLengthRef)
		{
			void* ptr2 = ptr;
			fixed (InformationQueueMessage.__Native* ptr3 = array)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, long, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)5 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, messageIndex, ptr4, ptr2));
			}
		}
		if (messageRef != null)
		{
			for (int i = 0; i < messageRef.Length; i++)
			{
				messageRef?[i].__MarshalFrom(ref array[i]);
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe long GetNumStoredMessagesAllowedByRetrievalFilters(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, long>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)6 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe long GetNumStoredMessages(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, long>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe long GetNumMessagesDiscardedByMessageCountLimit(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, long>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe long GetMessageCountLimit(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, long>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe long GetNumMessagesAllowedByStorageFilter(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, long>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe long GetNumMessagesDeniedByStorageFilter(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, long>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe void AddStorageFilterEntries(Guid producer, ref InfoQueueFilter filterRef)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (InfoQueueFilter* ptr = &filterRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetStorageFilter(Guid producer, InfoQueueFilter[] filterRef, ref PointerSize filterByteLengthRef)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (PointerSize* ptr = &filterByteLengthRef)
		{
			void* ptr2 = ptr;
			fixed (InfoQueueFilter* ptr3 = filterRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void ClearStorageFilter(Guid producer)
	{
		((delegate* unmanaged[Stdcall]<void*, Guid, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)14 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe void PushEmptyStorageFilter(Guid producer)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)15 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void PushDenyAllStorageFilter(Guid producer)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)16 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void PushCopyOfStorageFilter(Guid producer)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)17 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void PushStorageFilter(Guid producer, ref InfoQueueFilter filterRef)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (InfoQueueFilter* ptr = &filterRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)18 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void PopStorageFilter(Guid producer)
	{
		((delegate* unmanaged[Stdcall]<void*, Guid, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)19 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe int GetStorageFilterStackSize(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)20 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe void AddRetrievalFilterEntries(Guid producer, ref InfoQueueFilter filterRef)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (InfoQueueFilter* ptr = &filterRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)21 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetRetrievalFilter(Guid producer, InfoQueueFilter[] filterRef, ref PointerSize filterByteLengthRef)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (PointerSize* ptr = &filterByteLengthRef)
		{
			void* ptr2 = ptr;
			fixed (InfoQueueFilter* ptr3 = filterRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)22 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void ClearRetrievalFilter(Guid producer)
	{
		((delegate* unmanaged[Stdcall]<void*, Guid, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)23 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe void PushEmptyRetrievalFilter(Guid producer)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)24 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void PushDenyAllRetrievalFilter(Guid producer)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)25 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void PushCopyOfRetrievalFilter(Guid producer)
	{
		//IL_001f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)26 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void PushRetrievalFilter(Guid producer, ref InfoQueueFilter filterRef)
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (InfoQueueFilter* ptr = &filterRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)27 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void PopRetrievalFilter(Guid producer)
	{
		((delegate* unmanaged[Stdcall]<void*, Guid, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)28 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe int GetRetrievalFilterStackSize(Guid producer)
	{
		return ((delegate* unmanaged[Stdcall]<void*, Guid, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)29 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}

	public unsafe void AddMessage(Guid producer, InformationQueueMessageCategory category, InformationQueueMessageSeverity severity, int id, string descriptionRef)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		IntPtr intPtr = Marshal.StringToHGlobalAnsi(descriptionRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int, int, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)30 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, (int)category, (int)severity, id, (void*)intPtr));
		Marshal.FreeHGlobal(intPtr);
		((Result)(ref val)).CheckError();
	}

	public unsafe void AddApplicationMessage(InformationQueueMessageSeverity severity, string descriptionRef)
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		IntPtr intPtr = Marshal.StringToHGlobalAnsi(descriptionRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)31 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)severity, (void*)intPtr));
		Marshal.FreeHGlobal(intPtr);
		((Result)(ref val)).CheckError();
	}

	public unsafe void SetBreakOnCategory(Guid producer, InformationQueueMessageCategory category, RawBool bEnable)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int, RawBool, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)32 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, (int)category, bEnable));
		((Result)(ref val)).CheckError();
	}

	public unsafe void SetBreakOnSeverity(Guid producer, InformationQueueMessageSeverity severity, RawBool bEnable)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int, RawBool, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)33 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, (int)severity, bEnable));
		((Result)(ref val)).CheckError();
	}

	public unsafe void SetBreakOnID(Guid producer, int id, RawBool bEnable)
	{
		//IL_0008: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_0026: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, Guid, int, RawBool, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)34 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, id, bEnable));
		((Result)(ref val)).CheckError();
	}

	public unsafe RawBool GetBreakOnCategory(Guid producer, InformationQueueMessageCategory category)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, Guid, int, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)35 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, (int)category);
	}

	public unsafe RawBool GetBreakOnSeverity(Guid producer, InformationQueueMessageSeverity severity)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, Guid, int, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)36 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, (int)severity);
	}

	public unsafe RawBool GetBreakOnID(Guid producer, int id)
	{
		//IL_001b: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, Guid, int, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)37 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, id);
	}

	public unsafe void SetMuteDebugOutput(Guid producer, RawBool bMute)
	{
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		((delegate* unmanaged[Stdcall]<void*, Guid, RawBool, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)38 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer, bMute);
	}

	public unsafe RawBool GetMuteDebugOutput(Guid producer)
	{
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, Guid, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)39 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, producer);
	}
}
[Guid("e9550983-360b-4f53-b391-afd695078691")]
public class IVirtualSurfaceImageSourceNative : ISurfaceImageSourceNative
{
	private class VirtualSurfaceUpdatesCallbackNativeCallback : CallbackBase, IVirtualSurfaceUpdatesCallbackNative, IUnknown, ICallbackable, IDisposable
	{
		private IVirtualSurfaceImageSourceNative eventCallback;

		public VirtualSurfaceUpdatesCallbackNativeCallback(IVirtualSurfaceImageSourceNative eventCallbackArg)
		{
			eventCallback = eventCallbackArg;
		}

		public void UpdatesNeeded()
		{
			eventCallback.OnUpdatesNeeded();
		}
	}

	private IVirtualSurfaceUpdatesCallbackNative callback;

	private EventHandler<EventArgs> updatesNeeded;

	public RawRectangle[] UpdateRectangles
	{
		get
		{
			int updateRectCount = GetUpdateRectCount();
			RawRectangle[] array = (RawRectangle[])(object)new RawRectangle[updateRectCount];
			GetUpdateRects(array, updateRectCount);
			return array;
		}
	}

	public RawRectangle VisibleBounds
	{
		get
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			GetVisibleBounds(out var bounds);
			return bounds;
		}
	}

	public event EventHandler<EventArgs> UpdatesNeeded
	{
		add
		{
			if (callback == null)
			{
				callback = new VirtualSurfaceUpdatesCallbackNativeCallback(this);
				RegisterForUpdatesNeeded(callback);
			}
			updatesNeeded = (EventHandler<EventArgs>)Delegate.Combine(updatesNeeded, value);
		}
		remove
		{
			updatesNeeded = (EventHandler<EventArgs>)Delegate.Remove(updatesNeeded, value);
		}
	}

	private void OnUpdatesNeeded()
	{
		if (updatesNeeded != null)
		{
			updatesNeeded(this, EventArgs.Empty);
		}
	}

	public IVirtualSurfaceImageSourceNative(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator IVirtualSurfaceImageSourceNative(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new IVirtualSurfaceImageSourceNative(nativePtr);
		}
		return null;
	}

	public unsafe void Invalidate(RawRectangle updateRect)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, RawRectangle, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)6 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, updateRect));
		((Result)(ref val)).CheckError();
	}

	internal unsafe int GetUpdateRectCount()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		int result = default(int);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &result));
		((Result)(ref val)).CheckError();
		return result;
	}

	internal unsafe void GetUpdateRects(RawRectangle[] updates, int count)
	{
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (RawRectangle* ptr = updates)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, count));
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void GetVisibleBounds(out RawRectangle bounds)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		bounds = default(RawRectangle);
		Result val;
		fixed (RawRectangle* ptr = &bounds)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void RegisterForUpdatesNeeded(IVirtualSurfaceUpdatesCallbackNative callback)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IVirtualSurfaceUpdatesCallbackNative>((ICallbackable)callback);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero));
		((Result)(ref val)).CheckError();
	}

	public unsafe void Resize(int newWidth, int newHeight)
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, newWidth, newHeight));
		((Result)(ref val)).CheckError();
	}
}
[Shadow(typeof(VirtualSurfaceUpdatesCallbackNativeShadow))]
[Guid("dbf2e947-8e6c-4254-9eee-7738f71386c9")]
internal interface IVirtualSurfaceUpdatesCallbackNative : IUnknown, ICallbackable, IDisposable
{
	void UpdatesNeeded();
}
[Guid("dbf2e947-8e6c-4254-9eee-7738f71386c9")]
internal class IVirtualSurfaceUpdatesCallbackNativeNative : ComObject, IVirtualSurfaceUpdatesCallbackNative, IUnknown, ICallbackable, IDisposable
{
	public void UpdatesNeeded()
	{
		UpdatesNeeded_();
	}

	public IVirtualSurfaceUpdatesCallbackNativeNative(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator IVirtualSurfaceUpdatesCallbackNativeNative(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new IVirtualSurfaceUpdatesCallbackNativeNative(nativePtr);
		}
		return null;
	}

	internal unsafe void UpdatesNeeded_()
	{
		//IL_001d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)3 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer));
		((Result)(ref val)).CheckError();
	}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ModeDescription
{
	public int Width;

	public int Height;

	public Rational RefreshRate;

	public Format Format;

	public DisplayModeScanlineOrder ScanlineOrdering;

	public DisplayModeScaling Scaling;

	public ModeDescription(int width, int height, Rational refreshRate, Format format)
	{
		Width = width;
		Height = height;
		RefreshRate = refreshRate;
		Format = format;
		ScanlineOrdering = DisplayModeScanlineOrder.Unspecified;
		Scaling = DisplayModeScaling.Unspecified;
	}

	public ModeDescription(Format format)
	{
		this = default(ModeDescription);
		Format = format;
	}
}
internal class ModuleInit
{
	[Tag("SharpDX.ModuleInit")]
	internal static void Setup()
	{
		ResultDescriptor.RegisterProvider(typeof(ResultCode));
	}
}
[CompilerGenerated]
internal class NamespaceDoc
{
}
[Guid("ae02eedb-c735-4690-8d52-5a8dc20213aa")]
public class Output : DXGIObject
{
	public OutputDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public GammaControlCapabilities GammaControlCapabilities
	{
		get
		{
			GetGammaControlCapabilities(out var gammaCapsRef);
			return gammaCapsRef;
		}
	}

	public GammaControl GammaControl
	{
		get
		{
			GetGammaControl(out var arrayRef);
			return arrayRef;
		}
		set
		{
			SetGammaControl(ref value);
		}
	}

	public FrameStatistics FrameStatistics
	{
		get
		{
			GetFrameStatistics(out var statsRef);
			return statsRef;
		}
	}

	public void GetClosestMatchingMode(ComObject device, ModeDescription modeToMatch, out ModeDescription closestMatch)
	{
		FindClosestMatchingMode(ref modeToMatch, out closestMatch, (IUnknown)(object)device);
	}

	public ModeDescription[] GetDisplayModeList(Format format, DisplayModeEnumerationFlags flags)
	{
		int numModesRef = 0;
		GetDisplayModeList(format, (int)flags, ref numModesRef, null);
		ModeDescription[] array = new ModeDescription[numModesRef];
		if (numModesRef > 0)
		{
			GetDisplayModeList(format, (int)flags, ref numModesRef, array);
		}
		return array;
	}

	public Output(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Output(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Output(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out OutputDescription descRef)
	{
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		OutputDescription.__Native @ref = default(OutputDescription.__Native);
		descRef = default(OutputDescription);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref));
		descRef.__MarshalFrom(ref @ref);
		((Result)(ref val)).CheckError();
	}

	internal unsafe void GetDisplayModeList(Format enumFormat, int flags, ref int numModesRef, ModeDescription[] descRef)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (ModeDescription* ptr = descRef)
		{
			void* ptr2 = ptr;
			fixed (int* ptr3 = &numModesRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)enumFormat, flags, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void FindClosestMatchingMode(ref ModeDescription modeToMatchRef, out ModeDescription closestMatchRef, IUnknown concernedDeviceRef)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		closestMatchRef = default(ModeDescription);
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)concernedDeviceRef);
		Result val;
		fixed (ModeDescription* ptr = &closestMatchRef)
		{
			void* ptr2 = ptr;
			fixed (ModeDescription* ptr3 = &modeToMatchRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, (void*)zero));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void WaitForVerticalBlank()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void TakeOwnership(IUnknown deviceRef, RawBool exclusive)
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		//IL_0032: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)deviceRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, RawBool, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero, exclusive));
		((Result)(ref val)).CheckError();
	}

	public unsafe void ReleaseOwnership()
	{
		((delegate* unmanaged[Stdcall]<void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}

	internal unsafe void GetGammaControlCapabilities(out GammaControlCapabilities gammaCapsRef)
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		GammaControlCapabilities.__Native @ref = default(GammaControlCapabilities.__Native);
		gammaCapsRef = default(GammaControlCapabilities);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref));
		gammaCapsRef.__MarshalFrom(ref @ref);
		((Result)(ref val)).CheckError();
	}

	internal unsafe void SetGammaControl(ref GammaControl arrayRef)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		GammaControl.__Native @ref = default(GammaControl.__Native);
		arrayRef.__MarshalTo(ref @ref);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)14 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref));
		arrayRef.__MarshalFree(ref @ref);
		((Result)(ref val)).CheckError();
	}

	internal unsafe void GetGammaControl(out GammaControl arrayRef)
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		GammaControl.__Native @ref = default(GammaControl.__Native);
		arrayRef = default(GammaControl);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)15 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &@ref));
		arrayRef.__MarshalFrom(ref @ref);
		((Result)(ref val)).CheckError();
	}

	public unsafe void SetDisplaySurface(Surface scanoutSurfaceRef)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Surface>((ICallbackable)(object)scanoutSurfaceRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)16 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero));
		((Result)(ref val)).CheckError();
	}

	public unsafe void CopyDisplaySurfaceTo(Surface destinationRef)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Surface>((ICallbackable)(object)destinationRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)17 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero));
		((Result)(ref val)).CheckError();
	}

	internal unsafe void GetFrameStatistics(out FrameStatistics statsRef)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		statsRef = default(FrameStatistics);
		Result val;
		fixed (FrameStatistics* ptr = &statsRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)18 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("00cddea8-939b-4b83-a340-a685226666cc")]
public class Output1 : Output
{
	public ModeDescription1[] GetDisplayModeList1(Format enumFormat, DisplayModeEnumerationFlags flags)
	{
		int numModesRef = 0;
		GetDisplayModeList1(enumFormat, (int)flags, ref numModesRef, null);
		ModeDescription1[] array = new ModeDescription1[numModesRef];
		if (numModesRef > 0)
		{
			GetDisplayModeList1(enumFormat, (int)flags, ref numModesRef, array);
		}
		return array;
	}

	public Output1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Output1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Output1(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDisplayModeList1(Format enumFormat, int flags, ref int numModesRef, ModeDescription1[] descRef)
	{
		//IL_0042: Unknown result type (might be due to invalid IL or missing references)
		//IL_0047: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (ModeDescription1* ptr = descRef)
		{
			void* ptr2 = ptr;
			fixed (int* ptr3 = &numModesRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)19 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (int)enumFormat, flags, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void FindClosestMatchingMode1(ref ModeDescription1 modeToMatchRef, out ModeDescription1 closestMatchRef, IUnknown concernedDeviceRef)
	{
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004d: Unknown result type (might be due to invalid IL or missing references)
		closestMatchRef = default(ModeDescription1);
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)concernedDeviceRef);
		Result val;
		fixed (ModeDescription1* ptr = &closestMatchRef)
		{
			void* ptr2 = ptr;
			fixed (ModeDescription1* ptr3 = &modeToMatchRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)20 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr4, ptr2, (void*)zero));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetDisplaySurfaceData1(Resource destinationRef)
	{
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		//IL_0036: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<Resource>((ICallbackable)(object)destinationRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)21 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero));
		((Result)(ref val)).CheckError();
	}

	public unsafe OutputDuplication DuplicateOutput(IUnknown deviceRef)
	{
		//IL_003a: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		IntPtr zero2 = IntPtr.Zero;
		zero = CppObject.ToCallbackPtr<IUnknown>((ICallbackable)(object)deviceRef);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)22 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, (void*)zero, &zero2));
		OutputDuplication result = ((!(zero2 != IntPtr.Zero)) ? null : new OutputDuplication(zero2));
		((Result)(ref val)).CheckError();
		return result;
	}
}
[Guid("595e39d1-2724-4663-99b1-da969de28364")]
public class Output2 : Output1
{
	public bool SupportsOverlays => RawBool.op_Implicit(SupportsOverlays_());

	public Output2(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Output2(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Output2(nativePtr);
		}
		return null;
	}

	internal unsafe RawBool SupportsOverlays_()
	{
		//IL_0019: Unknown result type (might be due to invalid IL or missing references)
		return ((delegate* unmanaged[Stdcall]<void*, RawBool>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)23 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer);
	}
}
[Guid("191cfac3-a341-470d-b26e-a864f428319c")]
public class OutputDuplication : DXGIObject
{
	public OutputDuplicateDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public OutputDuplication(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator OutputDuplication(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new OutputDuplication(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out OutputDuplicateDescription descRef)
	{
		descRef = default(OutputDuplicateDescription);
		fixed (OutputDuplicateDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			((delegate* unmanaged[Stdcall]<void*, void*, void>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)7 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2);
		}
	}

	public unsafe Result TryAcquireNextFrame(int timeoutInMilliseconds, out OutputDuplicateFrameInformation frameInfoRef, out Resource desktopResourceOut)
	{
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		frameInfoRef = default(OutputDuplicateFrameInformation);
		IntPtr zero = IntPtr.Zero;
		Result result;
		fixed (OutputDuplicateFrameInformation* ptr = &frameInfoRef)
		{
			void* ptr2 = ptr;
			result = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, timeoutInMilliseconds, ptr2, &zero));
		}
		if (zero != IntPtr.Zero)
		{
			desktopResourceOut = new Resource(zero);
			return result;
		}
		desktopResourceOut = null;
		return result;
	}

	public unsafe void GetFrameDirtyRects(int dirtyRectsBufferSize, RawRectangle[] dirtyRectsBufferRef, out int dirtyRectsBufferSizeRequiredRef)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &dirtyRectsBufferSizeRequiredRef)
		{
			void* ptr2 = ptr;
			fixed (RawRectangle* ptr3 = dirtyRectsBufferRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, dirtyRectsBufferSize, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetFrameMoveRects(int moveRectsBufferSize, OutputDuplicateMoveRectangle[] moveRectBufferRef, out int moveRectsBufferSizeRequiredRef)
	{
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		//IL_0046: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &moveRectsBufferSizeRequiredRef)
		{
			void* ptr2 = ptr;
			fixed (OutputDuplicateMoveRectangle* ptr3 = moveRectBufferRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, moveRectsBufferSize, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void GetFramePointerShape(int pointerShapeBufferSize, IntPtr pointerShapeBufferRef, out int pointerShapeBufferSizeRequiredRef, out OutputDuplicatePointerShapeInformation pointerShapeInfoRef)
	{
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: Unknown result type (might be due to invalid IL or missing references)
		pointerShapeInfoRef = default(OutputDuplicatePointerShapeInformation);
		Result val;
		fixed (OutputDuplicatePointerShapeInformation* ptr = &pointerShapeInfoRef)
		{
			void* ptr2 = ptr;
			fixed (int* ptr3 = &pointerShapeBufferSizeRequiredRef)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, pointerShapeBufferSize, (void*)pointerShapeBufferRef, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void MapDesktopSurface(out MappedRectangle lockedRectRef)
	{
		//IL_002b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		lockedRectRef = default(MappedRectangle);
		Result val;
		fixed (MappedRectangle* ptr = &lockedRectRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void UnMapDesktopSurface()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer));
		((Result)(ref val)).CheckError();
	}

	public unsafe void ReleaseFrame()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)14 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer));
		((Result)(ref val)).CheckError();
	}
}
public struct PresentParameters
{
	internal struct __Native
	{
		public int DirtyRectsCount;

		public IntPtr PDirtyRects;

		public IntPtr PScrollRect;

		public IntPtr PScrollOffset;
	}

	public RawRectangle[] DirtyRectangles;

	public RawRectangle? ScrollRectangle;

	public RawPoint? ScrollOffset;

	internal int DirtyRectsCount;

	internal IntPtr PDirtyRects;

	internal IntPtr PScrollRect;

	internal IntPtr PScrollOffset;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct Rational : IEquatable<Rational>
{
	public static readonly Rational Empty;

	public int Numerator;

	public int Denominator;

	public Rational(int numerator, int denominator)
	{
		Numerator = numerator;
		Denominator = denominator;
	}

	public bool Equals(Rational other)
	{
		if (Numerator == other.Numerator)
		{
			return Denominator == other.Denominator;
		}
		return false;
	}

	public override bool Equals(object obj)
	{
		if (obj == null)
		{
			return false;
		}
		if (obj is Rational)
		{
			return Equals((Rational)obj);
		}
		return false;
	}

	public override int GetHashCode()
	{
		return (Numerator * 397) ^ Denominator;
	}

	public static bool operator ==(Rational left, Rational right)
	{
		return left.Equals(right);
	}

	public static bool operator !=(Rational left, Rational right)
	{
		return !left.Equals(right);
	}

	public override string ToString()
	{
		return $"{Numerator}/{Denominator}";
	}
}
[Guid("30961379-4609-4a41-998e-54fe567ee0c1")]
public class Resource1 : Resource
{
	public IntPtr CreateSharedHandle(string name, SharedResourceFlags dwAccess, SecurityAttributes? attributesRef = null)
	{
		return CreateSharedHandle(attributesRef, dwAccess, name);
	}

	public Resource1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Resource1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Resource1(nativePtr);
		}
		return null;
	}

	internal unsafe void CreateSubresourceSurface(int index, Surface2 surfaceOut)
	{
		//IL_0028: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		IntPtr zero = IntPtr.Zero;
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, index, &zero));
		((CppObject)surfaceOut).NativePointer = zero;
		((Result)(ref val)).CheckError();
	}

	internal unsafe IntPtr CreateSharedHandle(SecurityAttributes? attributesRef, SharedResourceFlags dwAccess, string lpName)
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0056: Unknown result type (might be due to invalid IL or missing references)
		//IL_005b: Unknown result type (might be due to invalid IL or missing references)
		SecurityAttributes value = default(SecurityAttributes);
		if (attributesRef.HasValue)
		{
			value = attributesRef.Value;
		}
		Result val;
		IntPtr result = default(IntPtr);
		fixed (char* ptr = lpName)
		{
			void* nativePointer = ((CppObject)this)._nativePointer;
			SecurityAttributes* intPtr = ((!attributesRef.HasValue) ? null : (&value));
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(nativePointer, intPtr, (int)dwAccess, ptr, &result));
		}
		((Result)(ref val)).CheckError();
		return result;
	}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SampleDescription
{
	public int Count;

	public int Quality;

	public SampleDescription(int count, int quality)
	{
		Count = count;
		Quality = quality;
	}

	public override string ToString()
	{
		return $"{{{Count}, {Quality}}}";
	}
}
[Guid("cafcb56c-6ac3-4889-bf47-9e23bbd260ec")]
public class Surface : DeviceChild
{
	public SurfaceDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public DataRectangle Map(MapFlags flags)
	{
		//IL_0015: Unknown result type (might be due to invalid IL or missing references)
		Map(out var lockedRectRef, (int)flags);
		return new DataRectangle(lockedRectRef.PBits, lockedRectRef.Pitch);
	}

	public DataRectangle Map(MapFlags flags, out DataStream dataStream)
	{
		//IL_0002: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Unknown result type (might be due to invalid IL or missing references)
		//IL_0009: Unknown result type (might be due to invalid IL or missing references)
		//IL_001a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0024: Unknown result type (might be due to invalid IL or missing references)
		//IL_002a: Expected O, but got Unknown
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		DataRectangle val = Map(flags);
		dataStream = new DataStream(val.DataPointer, (long)(Description.Height * val.Pitch), true, true);
		return val;
	}

	public static Surface FromSwapChain(SwapChain swapChain, int index)
	{
		swapChain.GetBuffer(index, Utilities.GetGuidFromType(typeof(Surface)), out var surfaceOut);
		return new Surface(surfaceOut);
	}

	public Surface(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Surface(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Surface(nativePtr);
		}
		return null;
	}

	internal unsafe void GetDescription(out SurfaceDescription descRef)
	{
		//IL_002a: Unknown result type (might be due to invalid IL or missing references)
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		descRef = default(SurfaceDescription);
		Result val;
		fixed (SurfaceDescription* ptr = &descRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)8 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2));
		}
		((Result)(ref val)).CheckError();
	}

	internal unsafe void Map(out MappedRectangle lockedRectRef, int mapFlags)
	{
		//IL_002c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0031: Unknown result type (might be due to invalid IL or missing references)
		lockedRectRef = default(MappedRectangle);
		Result val;
		fixed (MappedRectangle* ptr = &lockedRectRef)
		{
			void* ptr2 = ptr;
			val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)9 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, ptr2, mapFlags));
		}
		((Result)(ref val)).CheckError();
	}

	public unsafe void Unmap()
	{
		//IL_001e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0023: Unknown result type (might be due to invalid IL or missing references)
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)10 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer));
		((Result)(ref val)).CheckError();
	}
}
[Guid("4AE63092-6327-4c1b-80AE-BFE12EA32B86")]
public class Surface1 : Surface
{
	public void ReleaseDC()
	{
		ReleaseDC_(null);
	}

	public void ReleaseDC(RawRectangle dirtyRect)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		ReleaseDC_(dirtyRect);
	}

	public Surface1(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Surface1(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Surface1(nativePtr);
		}
		return null;
	}

	public unsafe IntPtr GetDC(RawBool discard)
	{
		//IL_0006: Unknown result type (might be due to invalid IL or missing references)
		//IL_0022: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		IntPtr result = default(IntPtr);
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, RawBool, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)11 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, discard, &result));
		((Result)(ref val)).CheckError();
		return result;
	}

	internal unsafe void ReleaseDC_(RawRectangle? dirtyRectRef)
	{
		//IL_000b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0044: Unknown result type (might be due to invalid IL or missing references)
		RawRectangle value = default(RawRectangle);
		if (dirtyRectRef.HasValue)
		{
			value = dirtyRectRef.Value;
		}
		void* nativePointer = ((CppObject)this)._nativePointer;
		RawRectangle* intPtr = ((!dirtyRectRef.HasValue) ? null : (&value));
		Result val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)12 * (nint)sizeof(void*))))(nativePointer, intPtr));
		((Result)(ref val)).CheckError();
	}
}
[Guid("aba496dd-b617-4cb8-a866-bc44d7eb1fa2")]
public class Surface2 : Surface1
{
	public Surface2(Resource1 resource, int index)
		: base(IntPtr.Zero)
	{
		resource.CreateSubresourceSurface(index, this);
	}

	public Surface2(IntPtr nativePtr)
		: base(nativePtr)
	{
	}

	public static explicit operator Surface2(IntPtr nativePtr)
	{
		if (!(nativePtr == IntPtr.Zero))
		{
			return new Surface2(nativePtr);
		}
		return null;
	}

	public unsafe void GetResource(Guid riid, out IntPtr parentResourceOut, out int subresourceIndexRef)
	{
		//IL_002f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0034: Unknown result type (might be due to invalid IL or missing references)
		Result val;
		fixed (int* ptr = &subresourceIndexRef)
		{
			void* ptr2 = ptr;
			fixed (IntPtr* ptr3 = &parentResourceOut)
			{
				void* ptr4 = ptr3;
				val = Result.op_Implicit(((delegate* unmanaged[Stdcall]<void*, void*, void*, void*, int>)(*(IntPtr*)((nint)(*(IntPtr*)((CppObject)this)._nativePointer) + (nint)13 * (nint)sizeof(void*))))(((CppObject)this)._nativePointer, &riid, ptr4, ptr2));
			}
		}
		((Result)(ref val)).CheckError();
	}
}
[Guid("310d36a0-d2e7-4c0a-aa04-6a9d23b8886a")]
public class SwapChain : DeviceChild
{
	public FrameStatistics FrameStatistics
	{
		get
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			FrameStatistics statsRef;
			Result val = TryGetFrameStatistics(out statsRef);
			((Result)(ref val)).CheckError();
			return statsRef;
		}
	}

	public bool IsFullScreen
	{
		get
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			GetFullscreenState(out var fullscreenRef, out var targetOut);
			if (targetOut != null)
			{
				((DisposeBase)targetOut).Dispose();
			}
			return RawBool.op_Implicit(fullscreenRef);
		}
		set
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			SetFullscreenState(RawBool.op_Implicit(value), null);
		}
	}

	public SwapChainDescription Description
	{
		get
		{
			GetDescription(out var descRef);
			return descRef;
		}
	}

	public Output ContainingOutput
	{
		get
		{
			GetContainingOutput(out var outputOut);
			return outputOut;
		}
	}

	public int LastPresentCount
	{
		get
		{
			GetLastPresentCount(out var lastPresentCountRef);
			return lastPresentCountRef;
		}
	}

	public SwapChain(Factory factory, ComObject device, SwapChainDescription description)
		: base(IntPtr.Zero)
	{
		factory.CreateSwapChain((IUnknown)(object)device, ref description, this);
	}

	public T GetBackBuffer<T>(int index) where T : ComObject
	{
		GetBuffer(index, Utilities.GetGuidFromType(typeof(T)), out var surfaceOut);
		return CppObject.Fro

plugins/OverlayDearImGui.Shared/System.Runtime.dll

Decompiled a month ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Text;
using System.Threading;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("System.Runtime")]
[assembly: AssemblyDescription("System.Runtime")]
[assembly: AssemblyDefaultAlias("System.Runtime")]
[assembly: AssemblyCompany("Mono development team")]
[assembly: AssemblyProduct("Mono Common Language Infrastructure")]
[assembly: AssemblyCopyright("(c) Various Mono authors")]
[assembly: AssemblyInformationalVersion("4.0.0.0")]
[assembly: AssemblyFileVersion("4.0.0.0")]
[assembly: AssemblyVersion("4.1.0.0")]
[assembly: TypeForwardedTo(typeof(Action))]
[assembly: TypeForwardedTo(typeof(Action<>))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, >))]
[assembly: TypeForwardedTo(typeof(Action<, , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Action<, , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Activator))]
[assembly: TypeForwardedTo(typeof(ArgumentException))]
[assembly: TypeForwardedTo(typeof(ArgumentNullException))]
[assembly: TypeForwardedTo(typeof(ArgumentOutOfRangeException))]
[assembly: TypeForwardedTo(typeof(ArithmeticException))]
[assembly: TypeForwardedTo(typeof(Array))]
[assembly: TypeForwardedTo(typeof(ArraySegment<>))]
[assembly: TypeForwardedTo(typeof(ArrayTypeMismatchException))]
[assembly: TypeForwardedTo(typeof(AsyncCallback))]
[assembly: TypeForwardedTo(typeof(Attribute))]
[assembly: TypeForwardedTo(typeof(AttributeTargets))]
[assembly: TypeForwardedTo(typeof(AttributeUsageAttribute))]
[assembly: TypeForwardedTo(typeof(BadImageFormatException))]
[assembly: TypeForwardedTo(typeof(bool))]
[assembly: TypeForwardedTo(typeof(Buffer))]
[assembly: TypeForwardedTo(typeof(byte))]
[assembly: TypeForwardedTo(typeof(char))]
[assembly: TypeForwardedTo(typeof(CLSCompliantAttribute))]
[assembly: TypeForwardedTo(typeof(DictionaryEntry))]
[assembly: TypeForwardedTo(typeof(ICollection<>))]
[assembly: TypeForwardedTo(typeof(IComparer<>))]
[assembly: TypeForwardedTo(typeof(IDictionary<, >))]
[assembly: TypeForwardedTo(typeof(IEnumerable<>))]
[assembly: TypeForwardedTo(typeof(IEnumerator<>))]
[assembly: TypeForwardedTo(typeof(IEqualityComparer<>))]
[assembly: TypeForwardedTo(typeof(IList<>))]
[assembly: TypeForwardedTo(typeof(IReadOnlyCollection<>))]
[assembly: TypeForwardedTo(typeof(IReadOnlyDictionary<, >))]
[assembly: TypeForwardedTo(typeof(IReadOnlyList<>))]
[assembly: TypeForwardedTo(typeof(ISet<>))]
[assembly: TypeForwardedTo(typeof(KeyNotFoundException))]
[assembly: TypeForwardedTo(typeof(KeyValuePair<, >))]
[assembly: TypeForwardedTo(typeof(ICollection))]
[assembly: TypeForwardedTo(typeof(IComparer))]
[assembly: TypeForwardedTo(typeof(IDictionary))]
[assembly: TypeForwardedTo(typeof(IDictionaryEnumerator))]
[assembly: TypeForwardedTo(typeof(IEnumerable))]
[assembly: TypeForwardedTo(typeof(IEnumerator))]
[assembly: TypeForwardedTo(typeof(IEqualityComparer))]
[assembly: TypeForwardedTo(typeof(IList))]
[assembly: TypeForwardedTo(typeof(IStructuralComparable))]
[assembly: TypeForwardedTo(typeof(IStructuralEquatable))]
[assembly: TypeForwardedTo(typeof(Collection<>))]
[assembly: TypeForwardedTo(typeof(ReadOnlyCollection<>))]
[assembly: TypeForwardedTo(typeof(Comparison<>))]
[assembly: TypeForwardedTo(typeof(DefaultValueAttribute))]
[assembly: TypeForwardedTo(typeof(EditorBrowsableAttribute))]
[assembly: TypeForwardedTo(typeof(EditorBrowsableState))]
[assembly: TypeForwardedTo(typeof(DateTime))]
[assembly: TypeForwardedTo(typeof(DateTimeKind))]
[assembly: TypeForwardedTo(typeof(DateTimeOffset))]
[assembly: TypeForwardedTo(typeof(DayOfWeek))]
[assembly: TypeForwardedTo(typeof(decimal))]
[assembly: TypeForwardedTo(typeof(Delegate))]
[assembly: TypeForwardedTo(typeof(ConditionalAttribute))]
[assembly: TypeForwardedTo(typeof(DebuggableAttribute))]
[assembly: TypeForwardedTo(typeof(DivideByZeroException))]
[assembly: TypeForwardedTo(typeof(double))]
[assembly: TypeForwardedTo(typeof(Enum))]
[assembly: TypeForwardedTo(typeof(EventArgs))]
[assembly: TypeForwardedTo(typeof(EventHandler))]
[assembly: TypeForwardedTo(typeof(EventHandler<>))]
[assembly: TypeForwardedTo(typeof(Exception))]
[assembly: TypeForwardedTo(typeof(FieldAccessException))]
[assembly: TypeForwardedTo(typeof(FlagsAttribute))]
[assembly: TypeForwardedTo(typeof(FormatException))]
[assembly: TypeForwardedTo(typeof(FormattableString))]
[assembly: TypeForwardedTo(typeof(Func<>))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , , , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, >))]
[assembly: TypeForwardedTo(typeof(Func<, , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Func<, , , , , , , , >))]
[assembly: TypeForwardedTo(typeof(GC))]
[assembly: TypeForwardedTo(typeof(GCCollectionMode))]
[assembly: TypeForwardedTo(typeof(DateTimeStyles))]
[assembly: TypeForwardedTo(typeof(NumberStyles))]
[assembly: TypeForwardedTo(typeof(TimeSpanStyles))]
[assembly: TypeForwardedTo(typeof(Guid))]
[assembly: TypeForwardedTo(typeof(IAsyncResult))]
[assembly: TypeForwardedTo(typeof(IComparable))]
[assembly: TypeForwardedTo(typeof(IComparable<>))]
[assembly: TypeForwardedTo(typeof(IConvertible))]
[assembly: TypeForwardedTo(typeof(ICustomFormatter))]
[assembly: TypeForwardedTo(typeof(IDisposable))]
[assembly: TypeForwardedTo(typeof(IEquatable<>))]
[assembly: TypeForwardedTo(typeof(IFormatProvider))]
[assembly: TypeForwardedTo(typeof(IFormattable))]
[assembly: TypeForwardedTo(typeof(IndexOutOfRangeException))]
[assembly: TypeForwardedTo(typeof(InsufficientExecutionStackException))]
[assembly: TypeForwardedTo(typeof(short))]
[assembly: TypeForwardedTo(typeof(int))]
[assembly: TypeForwardedTo(typeof(long))]
[assembly: TypeForwardedTo(typeof(IntPtr))]
[assembly: TypeForwardedTo(typeof(InvalidCastException))]
[assembly: TypeForwardedTo(typeof(InvalidOperationException))]
[assembly: TypeForwardedTo(typeof(InvalidProgramException))]
[assembly: TypeForwardedTo(typeof(InvalidTimeZoneException))]
[assembly: TypeForwardedTo(typeof(DirectoryNotFoundException))]
[assembly: TypeForwardedTo(typeof(FileLoadException))]
[assembly: TypeForwardedTo(typeof(FileNotFoundException))]
[assembly: TypeForwardedTo(typeof(IOException))]
[assembly: TypeForwardedTo(typeof(PathTooLongException))]
[assembly: TypeForwardedTo(typeof(IObservable<>))]
[assembly: TypeForwardedTo(typeof(IObserver<>))]
[assembly: TypeForwardedTo(typeof(IProgress<>))]
[assembly: TypeForwardedTo(typeof(Lazy<>))]
[assembly: TypeForwardedTo(typeof(Lazy<, >))]
[assembly: TypeForwardedTo(typeof(MemberAccessException))]
[assembly: TypeForwardedTo(typeof(MethodAccessException))]
[assembly: TypeForwardedTo(typeof(MissingFieldException))]
[assembly: TypeForwardedTo(typeof(MissingMemberException))]
[assembly: TypeForwardedTo(typeof(MissingMethodException))]
[assembly: TypeForwardedTo(typeof(MTAThreadAttribute))]
[assembly: TypeForwardedTo(typeof(MulticastDelegate))]
[assembly: TypeForwardedTo(typeof(NotImplementedException))]
[assembly: TypeForwardedTo(typeof(NotSupportedException))]
[assembly: TypeForwardedTo(typeof(Nullable))]
[assembly: TypeForwardedTo(typeof(Nullable<>))]
[assembly: TypeForwardedTo(typeof(NullReferenceException))]
[assembly: TypeForwardedTo(typeof(object))]
[assembly: TypeForwardedTo(typeof(ObjectDisposedException))]
[assembly: TypeForwardedTo(typeof(ObsoleteAttribute))]
[assembly: TypeForwardedTo(typeof(OutOfMemoryException))]
[assembly: TypeForwardedTo(typeof(OverflowException))]
[assembly: TypeForwardedTo(typeof(ParamArrayAttribute))]
[assembly: TypeForwardedTo(typeof(PlatformNotSupportedException))]
[assembly: TypeForwardedTo(typeof(Predicate<>))]
[assembly: TypeForwardedTo(typeof(RankException))]
[assembly: TypeForwardedTo(typeof(AssemblyCompanyAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyConfigurationAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyCopyrightAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyCultureAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyDefaultAliasAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyDelaySignAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyDescriptionAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyFileVersionAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyFlagsAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyInformationalVersionAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyKeyFileAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyKeyNameAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyMetadataAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyNameFlags))]
[assembly: TypeForwardedTo(typeof(AssemblyProductAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblySignatureKeyAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyTitleAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyTrademarkAttribute))]
[assembly: TypeForwardedTo(typeof(AssemblyVersionAttribute))]
[assembly: TypeForwardedTo(typeof(DefaultMemberAttribute))]
[assembly: TypeForwardedTo(typeof(ProcessorArchitecture))]
[assembly: TypeForwardedTo(typeof(AccessedThroughPropertyAttribute))]
[assembly: TypeForwardedTo(typeof(AsyncStateMachineAttribute))]
[assembly: TypeForwardedTo(typeof(CallerFilePathAttribute))]
[assembly: TypeForwardedTo(typeof(CallerLineNumberAttribute))]
[assembly: TypeForwardedTo(typeof(CallerMemberNameAttribute))]
[assembly: TypeForwardedTo(typeof(CompilationRelaxationsAttribute))]
[assembly: TypeForwardedTo(typeof(CompilerGeneratedAttribute))]
[assembly: TypeForwardedTo(typeof(ConditionalWeakTable<, >))]
[assembly: TypeForwardedTo(typeof(CustomConstantAttribute))]
[assembly: TypeForwardedTo(typeof(DateTimeConstantAttribute))]
[assembly: TypeForwardedTo(typeof(DecimalConstantAttribute))]
[assembly: TypeForwardedTo(typeof(DisablePrivateReflectionAttribute))]
[assembly: TypeForwardedTo(typeof(ExtensionAttribute))]
[assembly: TypeForwardedTo(typeof(FixedBufferAttribute))]
[assembly: TypeForwardedTo(typeof(FormattableStringFactory))]
[assembly: TypeForwardedTo(typeof(IndexerNameAttribute))]
[assembly: TypeForwardedTo(typeof(InternalsVisibleToAttribute))]
[assembly: TypeForwardedTo(typeof(IsConst))]
[assembly: TypeForwardedTo(typeof(IStrongBox))]
[assembly: TypeForwardedTo(typeof(IsVolatile))]
[assembly: TypeForwardedTo(typeof(IteratorStateMachineAttribute))]
[assembly: TypeForwardedTo(typeof(MethodImplAttribute))]
[assembly: TypeForwardedTo(typeof(MethodImplOptions))]
[assembly: TypeForwardedTo(typeof(ReferenceAssemblyAttribute))]
[assembly: TypeForwardedTo(typeof(RuntimeCompatibilityAttribute))]
[assembly: TypeForwardedTo(typeof(RuntimeHelpers))]
[assembly: TypeForwardedTo(typeof(StateMachineAttribute))]
[assembly: TypeForwardedTo(typeof(StrongBox<>))]
[assembly: TypeForwardedTo(typeof(TypeForwardedFromAttribute))]
[assembly: TypeForwardedTo(typeof(TypeForwardedToAttribute))]
[assembly: TypeForwardedTo(typeof(UnsafeValueTypeAttribute))]
[assembly: TypeForwardedTo(typeof(ExceptionDispatchInfo))]
[assembly: TypeForwardedTo(typeof(GCLargeObjectHeapCompactionMode))]
[assembly: TypeForwardedTo(typeof(GCLatencyMode))]
[assembly: TypeForwardedTo(typeof(GCSettings))]
[assembly: TypeForwardedTo(typeof(CharSet))]
[assembly: TypeForwardedTo(typeof(ComVisibleAttribute))]
[assembly: TypeForwardedTo(typeof(FieldOffsetAttribute))]
[assembly: TypeForwardedTo(typeof(GCHandle))]
[assembly: TypeForwardedTo(typeof(GCHandleType))]
[assembly: TypeForwardedTo(typeof(LayoutKind))]
[assembly: TypeForwardedTo(typeof(OutAttribute))]
[assembly: TypeForwardedTo(typeof(StructLayoutAttribute))]
[assembly: TypeForwardedTo(typeof(TargetFrameworkAttribute))]
[assembly: TypeForwardedTo(typeof(RuntimeFieldHandle))]
[assembly: TypeForwardedTo(typeof(RuntimeMethodHandle))]
[assembly: TypeForwardedTo(typeof(RuntimeTypeHandle))]
[assembly: TypeForwardedTo(typeof(sbyte))]
[assembly: TypeForwardedTo(typeof(AllowPartiallyTrustedCallersAttribute))]
[assembly: TypeForwardedTo(typeof(SecurityCriticalAttribute))]
[assembly: TypeForwardedTo(typeof(SecurityException))]
[assembly: TypeForwardedTo(typeof(SecuritySafeCriticalAttribute))]
[assembly: TypeForwardedTo(typeof(SecurityTransparentAttribute))]
[assembly: TypeForwardedTo(typeof(VerificationException))]
[assembly: TypeForwardedTo(typeof(float))]
[assembly: TypeForwardedTo(typeof(STAThreadAttribute))]
[assembly: TypeForwardedTo(typeof(string))]
[assembly: TypeForwardedTo(typeof(StringComparison))]
[assembly: TypeForwardedTo(typeof(StringSplitOptions))]
[assembly: TypeForwardedTo(typeof(StringBuilder))]
[assembly: TypeForwardedTo(typeof(LazyThreadSafetyMode))]
[assembly: TypeForwardedTo(typeof(Timeout))]
[assembly: TypeForwardedTo(typeof(WaitHandle))]
[assembly: TypeForwardedTo(typeof(ThreadStaticAttribute))]
[assembly: TypeForwardedTo(typeof(TimeoutException))]
[assembly: TypeForwardedTo(typeof(TimeSpan))]
[assembly: TypeForwardedTo(typeof(TimeZoneInfo))]
[assembly: TypeForwardedTo(typeof(Tuple))]
[assembly: TypeForwardedTo(typeof(Tuple<>))]
[assembly: TypeForwardedTo(typeof(Tuple<, >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , , >))]
[assembly: TypeForwardedTo(typeof(Tuple<, , , , , , , >))]
[assembly: TypeForwardedTo(typeof(Type))]
[assembly: TypeForwardedTo(typeof(TypeAccessException))]
[assembly: TypeForwardedTo(typeof(TypeCode))]
[assembly: TypeForwardedTo(typeof(TypeInitializationException))]
[assembly: TypeForwardedTo(typeof(TypeLoadException))]
[assembly: TypeForwardedTo(typeof(ushort))]
[assembly: TypeForwardedTo(typeof(uint))]
[assembly: TypeForwardedTo(typeof(ulong))]
[assembly: TypeForwardedTo(typeof(UIntPtr))]
[assembly: TypeForwardedTo(typeof(UnauthorizedAccessException))]
[assembly: TypeForwardedTo(typeof(Uri))]
[assembly: TypeForwardedTo(typeof(UriComponents))]
[assembly: TypeForwardedTo(typeof(UriFormat))]
[assembly: TypeForwardedTo(typeof(UriFormatException))]
[assembly: TypeForwardedTo(typeof(UriHostNameType))]
[assembly: TypeForwardedTo(typeof(UriKind))]
[assembly: TypeForwardedTo(typeof(ValueType))]
[assembly: TypeForwardedTo(typeof(Version))]
[assembly: TypeForwardedTo(typeof(void))]
[assembly: TypeForwardedTo(typeof(WeakReference))]
[assembly: TypeForwardedTo(typeof(WeakReference<>))]