From 4b8f333d31bd262abd220da64e6f302e8164eb0a Mon Sep 17 00:00:00 2001 From: chyyran Date: Wed, 26 Jan 2022 02:16:31 -0500 Subject: [PATCH 01/38] overlay(windows): Initial tests using kaku injection --- .../InputTests.cs | 12 ++ ...flake.Framework.Tests.Input.Windows.csproj | 1 + .../EntryPoint.cs | 25 +++ .../Hooks/Direct3D9/Direct3D9Hook.cs | 83 ++++++++++ .../Direct3D9/Direct3DDevice9Ordinals.cs | 150 ++++++++++++++++++ .../RenderWindow.cs | 55 +++++++ ...chestration.Overlay.Runtime.Windows.csproj | 33 ++++ .../kaku-x64.dll | Bin 0 -> 309760 bytes .../kaku-x86.dll | Bin 0 -> 259072 bytes .../kaku.co | 2 + src/Snowflake.sln | 27 ++++ 11 files changed, 388 insertions(+) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x86.dll create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co diff --git a/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs b/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs index dd317bba4..31cf94268 100644 --- a/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs +++ b/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs @@ -6,6 +6,8 @@ using System.Collections.Generic; using System.Management; using Snowflake.Support.InputEnumerators.Windows; +using System.Diagnostics; +using Reloaded.Injector; namespace Snowflake.Input.Tests.Windows { @@ -19,5 +21,15 @@ public void Test1() var e = new WindowsDeviceEnumerator(); var devices = e.QueryConnectedDevices().ToList(); } + + [Fact] + public void InjectRetroArch() + { + var retroArchProcess = Process.Start("E:\\Emulators\\RetroArch\\retroarch.exe"); + var injector = new Injector(retroArchProcess); + Debugger.Break(); + injector.Inject(@"D:\coding\snowflake\src\Snowflake.Support.Orchestration.Overlay.Runtime.Windows\bin\Debug\net6.0\kaku-x64.dll"); + + } } } diff --git a/src/Snowflake.Framework.Tests.Input.Windows/Snowflake.Framework.Tests.Input.Windows.csproj b/src/Snowflake.Framework.Tests.Input.Windows/Snowflake.Framework.Tests.Input.Windows.csproj index e8cd3f950..c803ba301 100644 --- a/src/Snowflake.Framework.Tests.Input.Windows/Snowflake.Framework.Tests.Input.Windows.csproj +++ b/src/Snowflake.Framework.Tests.Input.Windows/Snowflake.Framework.Tests.Input.Windows.csproj @@ -10,6 +10,7 @@ + diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs new file mode 100644 index 000000000..e287e6ada --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -0,0 +1,25 @@ +using System.Runtime.InteropServices; +using System; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows +{ + + public static class EntryPoint + { + public static int Main(nint args, int sizeBytes) + { + Vanara.PInvoke.Kernel32.AllocConsole(); + Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); + try + { + new Direct3D9Hook().Init(); + } + catch + { + + } + return 42; + } + } +} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs new file mode 100644 index 000000000..a0a0d7eaf --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using Reloaded.Hooks; +using Reloaded.Hooks.Definitions; +using Reloaded.Hooks.Tools; +using Silk.NET.Direct3D9; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9; +using static Vanara.PInvoke.Gdi32; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks +{ + internal class Direct3D9Hook + { + const int D3D9_DEVICE_METHOD_COUNT = 119; + const int D3D9Ex_DEVICE_METHOD_COUNT = 15; + + [Reloaded.Hooks.Definitions.X64.Function(Reloaded.Hooks.Definitions.X64.CallingConventions.Microsoft)] + [Reloaded.Hooks.Definitions.X86.Function(Reloaded.Hooks.Definitions.X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate int EndScene(IDirect3DDevice9* device); + + private IHook? EndSceneHook = null; + + private unsafe int EndSceneImpl(IDirect3DDevice9* device) + { + Console.WriteLine("Hooked Endscene"); + return EndSceneHook.OriginalFunction(device); + } + + public unsafe void Init() + { + using var window = new RenderWindow(); + var d3d9Api = D3D9.GetApi(); + IDirect3D9* d3d9 = d3d9Api.Direct3DCreate9(D3D9.SdkVersion); + + var d3d9Params = new PresentParameters() + { + BackBufferWidth = 0, + BackBufferHeight = 0, + BackBufferFormat = Format.FmtUnknown, + BackBufferCount = 0, + MultiSampleType = MultisampleType.MultisampleNone, + MultiSampleQuality = 0, + SwapEffect = Swapeffect.SwapeffectDiscard, + Windowed = 1, + EnableAutoDepthStencil = 0, + AutoDepthStencilFormat = Format.FmtUnknown, + Flags = 0, + FullScreenRefreshRateInHz = 0, + PresentationInterval = 0, + HDeviceWindow = window.WindowHandle.DangerousGetHandle() + }; + + IDirect3DDevice9* device = null; + + var result = d3d9->CreateDevice(D3D9.AdapterDefault, Devtype.DevtypeNullref, window.WindowHandle.DangerousGetHandle(), + D3D9.CreateSoftwareVertexprocessing | D3D9.CreateDisableDriverManagement, ref d3d9Params, ref device); + + if (result < 0) + { + // todo: throw exception + Console.WriteLine("Failed to create D3D9 Device"); + d3d9->Release(); + return; + } + Console.WriteLine("Succeeded D3D9 Init"); + + var vtable = VirtualFunctionTable.FromObject((nint)device, D3D9_DEVICE_METHOD_COUNT); + + Console.WriteLine("Found EndScene at " + vtable.TableEntries[(int)Direct3DDevice9Ordinals.EndScene].FunctionPointer); + + this.EndSceneHook = vtable.CreateFunctionHook((int)Direct3DDevice9Ordinals.EndScene, this.EndSceneImpl).Activate(); + + device->Release(); + d3d9->Release(); + + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs new file mode 100644 index 000000000..f7e490184 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9 +{ + public enum Direct3DDevice9Ordinals + { + QueryInterface = 0, + AddRef = 1, + Release = 2, + TestCooperativeLevel = 3, + GetAvailableTextureMem = 4, + EvictManagedResources = 5, + GetDirect3D = 6, + GetDeviceCaps = 7, + GetDisplayMode = 8, + GetCreationParameters = 9, + SetCursorProperties = 10, + SetCursorPosition = 11, + ShowCursor = 12, + CreateAdditionalSwapChain = 13, + GetSwapChain = 14, + GetNumberOfSwapChains = 15, + Reset = 16, + Present = 17, + GetBackBuffer = 18, + GetRasterStatus = 19, + SetDialogBoxMode = 20, + SetGammaRamp = 21, + GetGammaRamp = 22, + CreateTexture = 23, + CreateVolumeTexture = 24, + CreateCubeTexture = 25, + CreateVertexBuffer = 26, + CreateIndexBuffer = 27, + CreateRenderTarget = 28, + CreateDepthStencilSurface = 29, + UpdateSurface = 30, + UpdateTexture = 31, + GetRenderTargetData = 32, + GetFrontBufferData = 33, + StretchRect = 34, + ColorFill = 35, + CreateOffscreenPlainSurface = 36, + SetRenderTarget = 37, + GetRenderTarget = 38, + SetDepthStencilSurface = 39, + GetDepthStencilSurface = 40, + BeginScene = 41, + EndScene = 42, + Clear = 43, + SetTransform = 44, + GetTransform = 45, + MultiplyTransform = 46, + SetViewport = 47, + GetViewport = 48, + SetMaterial = 49, + GetMaterial = 50, + SetLight = 51, + GetLight = 52, + LightEnable = 53, + GetLightEnable = 54, + SetClipPlane = 55, + GetClipPlane = 56, + SetRenderState = 57, + GetRenderState = 58, + CreateStateBlock = 59, + BeginStateBlock = 60, + EndStateBlock = 61, + SetClipStatus = 62, + GetClipStatus = 63, + GetTexture = 64, + SetTexture = 65, + GetTextureStageState = 66, + SetTextureStageState = 67, + GetSamplerState = 68, + SetSamplerState = 69, + ValidateDevice = 70, + SetPaletteEntries = 71, + GetPaletteEntries = 72, + SetCurrentTexturePalette = 73, + GetCurrentTexturePalette = 74, + SetScissorRect = 75, + GetScissorRect = 76, + SetSoftwareVertexProcessing = 77, + GetSoftwareVertexProcessing = 78, + SetNPatchMode = 79, + GetNPatchMode = 80, + DrawPrimitive = 81, + DrawIndexedPrimitive = 82, + DrawPrimitiveUP = 83, + DrawIndexedPrimitiveUP = 84, + ProcessVertices = 85, + CreateVertexDeclaration = 86, + SetVertexDeclaration = 87, + GetVertexDeclaration = 88, + SetFVF = 89, + GetFVF = 90, + CreateVertexShader = 91, + SetVertexShader = 92, + GetVertexShader = 93, + SetVertexShaderConstantF = 94, + GetVertexShaderConstantF = 95, + SetVertexShaderConstantI = 96, + GetVertexShaderConstantI = 97, + SetVertexShaderConstantB = 98, + GetVertexShaderConstantB = 99, + SetStreamSource = 100, + GetStreamSource = 101, + SetStreamSourceFreq = 102, + GetStreamSourceFreq = 103, + SetIndices = 104, + GetIndices = 105, + CreatePixelShader = 106, + SetPixelShader = 107, + GetPixelShader = 108, + SetPixelShaderConstantF = 109, + GetPixelShaderConstantF = 110, + SetPixelShaderConstantI = 111, + GetPixelShaderConstantI = 112, + SetPixelShaderConstantB = 113, + GetPixelShaderConstantB = 114, + DrawRectPatch = 115, + DrawTriPatch = 116, + DeletePatch = 117, + CreateQuery = 118, + } + + public enum Direct3DDevice9ExOrdinals + { + SetConvolutionMonoKernel = 119, + ComposeRects = 120, + PresentEx = 121, + GetGPUThreadPriority = 122, + SetGPUThreadPriority = 123, + WaitForVBlank = 124, + CheckResourceResidency = 125, + SetMaximumFrameLatency = 126, + GetMaximumFrameLatency = 127, + CheckDeviceState_ = 128, + CreateRenderTargetEx = 129, + CreateOffscreenPlainSurfaceEx = 130, + CreateDepthStencilSurfaceEx = 131, + ResetEx = 132, + GetDisplayModeEx = 133, + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs new file mode 100644 index 000000000..5c12a2e19 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Vanara.PInvoke; +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows +{ + internal class RenderWindow : IDisposable + { + private bool disposedValue; + + private WindowClass WindowClass { get; } + public HWND WindowHandle { get; } + + public RenderWindow() + { + this.WindowClass = new WindowClass( + "SnowflakeOverlay", + Vanara.PInvoke.Kernel32.GetModuleHandle(), + User32.DefWindowProc, + User32.WindowClassStyles.CS_HREDRAW | User32.WindowClassStyles.CS_VREDRAW + ); + User32.RegisterClassEx(this.WindowClass.wc); + this.WindowHandle = User32.CreateWindowEx(0, "SnowflakeOverlay", "SnowflakeOverlayInitWindow", + User32.WindowStyles.WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, (nint)0, (nint)0, this.WindowClass.wc.hInstance); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + User32.DestroyWindow(this.WindowHandle); + this.WindowClass.Unregister(); + } + disposedValue = true; + } + } + + ~RenderWindow() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: false); + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj new file mode 100644 index 000000000..4fbd26b72 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -0,0 +1,33 @@ + + + net6.0 + enable + enable + true + + + + true + True + + + + Always + + + Always + + + Always + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..4144e883f8ee5fd89bde1cfd6e89e5c46c6e683e GIT binary patch literal 309760 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%0AbmIh|kvDEzM>}3R(YNo+x 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%0AEqoNct^PbZ&=%p$egB?Ij}J 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 z%0D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

88j7BWGbs)mz^vZH=PV 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 HJh=aVG@YSG diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x86.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x86.dll index 0ff0261a889ce9ad2a782672d695c75060c180d5..9cd8ed304a6a2024c728a251c4adb63f34e4d67e 100644 GIT binary patch delta 53021 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 Date: Sat, 29 Jan 2022 03:01:34 -0500 Subject: [PATCH 03/38] overlay: very experimental imgui hoverlay for dx9 no shutdown support at all. --- .../EntryPoint.cs | 19 ++- .../Hooks/Direct3D9/Direct3D9Hook.cs | 151 +++++++++++++++--- .../Hooks/WndProc/WndProcHook.cs | 88 ++++++++++ .../Render/ImGuiInstance.cs | 122 ++++++++++++++ ...chestration.Overlay.Runtime.Windows.csproj | 5 + 5 files changed, 361 insertions(+), 24 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index e287e6ada..c07aa6b8d 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -1,6 +1,7 @@ using System.Runtime.InteropServices; using System; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks; +using System.Reflection; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -9,17 +10,23 @@ public static class EntryPoint { public static int Main(nint args, int sizeBytes) { - Vanara.PInvoke.Kernel32.AllocConsole(); - Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); try { - new Direct3D9Hook().Init(); + return Main(); } - catch + catch (Exception e) { - + Console.WriteLine(e); + return 1; } - return 42; + } + + private static int Main() + { + Vanara.PInvoke.Kernel32.AllocConsole(); + Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); + new Direct3D9Hook().Activate(); + return 0; } } } \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs index a0a0d7eaf..99fc085f8 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using System.Text; @@ -9,7 +10,12 @@ using Reloaded.Hooks.Tools; using Silk.NET.Direct3D9; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9; -using static Vanara.PInvoke.Gdi32; + +using X64 = Reloaded.Hooks.Definitions.X64; +using X86 = Reloaded.Hooks.Definitions.X86; + +using ImGui = DearImguiSharp.ImGui; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks { @@ -18,25 +24,140 @@ internal class Direct3D9Hook const int D3D9_DEVICE_METHOD_COUNT = 119; const int D3D9Ex_DEVICE_METHOD_COUNT = 15; - [Reloaded.Hooks.Definitions.X64.Function(Reloaded.Hooks.Definitions.X64.CallingConventions.Microsoft)] - [Reloaded.Hooks.Definitions.X86.Function(Reloaded.Hooks.Definitions.X86.CallingConventions.Stdcall)] + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] public unsafe delegate int EndScene(IDirect3DDevice9* device); - private IHook? EndSceneHook = null; + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate int Reset(IDirect3DDevice9* device, PresentParameters* presentParams); + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate int Release(IDirect3DDevice9* device); + + private IHook EndSceneHook { get; } + private IHook ResetHook { get; } + private bool Initialized { get; set; } + public IntPtr WindowHandle { get; private set; } + + private ImGuiInstance ImGuiInstance { get; } + private bool _endSceneLock; + private bool _resetLock; + + public Direct3D9Hook() + { + var vtable = GetDirect3Device9VTable(); + unsafe + { + this.EndSceneHook = vtable.CreateFunctionHook((int)Direct3DDevice9Ordinals.EndScene, this.EndSceneImpl); + this.ResetHook = vtable.CreateFunctionHook((int)Direct3DDevice9Ordinals.Reset, this.ResetImpl); + } + this.ImGuiInstance = new ImGuiInstance(Open); + } + + private void Open() + { + bool open = true; + DearImguiSharp.ImGui.ShowDemoWindow(ref open); + } + public void Activate() + { + Console.WriteLine("Activated D3D9 Hooks"); + this.EndSceneHook.Activate(); + this.ResetHook.Activate(); + } private unsafe int EndSceneImpl(IDirect3DDevice9* device) { - Console.WriteLine("Hooked Endscene"); - return EndSceneHook.OriginalFunction(device); + if (_endSceneLock) + { + return EndSceneHook.OriginalFunction(device); + } + _endSceneLock = true; + IDirect3DSwapChain9* swapChain = null; + + try + { + device->GetSwapChain(0, ref swapChain); + var createParams = new DeviceCreationParameters(); + var presentParams = new PresentParameters(); + device->GetCreationParameters(ref createParams); + swapChain->GetPresentParameters(ref presentParams); + + + nint windowHandle = createParams.HFocusWindow == 0 ? presentParams.HDeviceWindow : createParams.HFocusWindow; + + if (!this.Initialized) + { + // do init code + if (windowHandle == 0) + return this.EndSceneHook.OriginalFunction(device); + Console.WriteLine($"[DX9 EndScene] Init, Window Handle {(long)windowHandle:X}"); + ImGuiInstance.Activate(windowHandle); + ImGui.ImGuiImplDX9Init((void*)device); + this.Initialized = true; + } + + if (!this.ImGuiInstance.CheckWindowHandle(windowHandle)) + { + Console.WriteLine($"[DX9 EndScene] Discarding Window Handle {(long)windowHandle:X}"); + return this.EndSceneHook.OriginalFunction(device); + } + + ImGui.ImGuiImplDX9NewFrame(); + this.ImGuiInstance.DrawFrame(); + using var drawData = ImGui.GetDrawData(); + ImGui.ImGuiImplDX9RenderDrawData(drawData); + + return EndSceneHook.OriginalFunction(device); + } + finally + { + if (swapChain != null) + swapChain->Release(); + _endSceneLock = false; + } } - public unsafe void Init() + private unsafe int ResetImpl(IDirect3DDevice9* device, PresentParameters* presentParams) + { + Console.WriteLine("reset"); + if (_resetLock) + { + ResetHook.OriginalFunction.Invoke(device, presentParams); + } + _resetLock = true; + try + { + + if (!this.ImGuiInstance.CheckWindowHandle(presentParams->HDeviceWindow)) + { + Console.WriteLine($"[DX9 EndScene] Discarding Window Handle {(long)presentParams->HDeviceWindow:X}"); + return this.ResetHook.OriginalFunction(device, presentParams); + } + + Console.WriteLine($"[DX9 Reset] Reset with Handle {(long)presentParams->HDeviceWindow:X}"); + ImGui.ImGuiImplDX9InvalidateDeviceObjects(); + var result = ResetHook.OriginalFunction.Invoke(device, presentParams); + ImGui.ImGuiImplDX9CreateDeviceObjects(); + return result; + } + finally + { + _resetLock = false; + } + } + + private unsafe VirtualFunctionTable GetDirect3Device9VTable() { using var window = new RenderWindow(); var d3d9Api = D3D9.GetApi(); IDirect3D9* d3d9 = d3d9Api.Direct3DCreate9(D3D9.SdkVersion); - + var d3d9Params = new PresentParameters() { BackBufferWidth = 0, @@ -56,28 +177,22 @@ public unsafe void Init() }; IDirect3DDevice9* device = null; - + var result = d3d9->CreateDevice(D3D9.AdapterDefault, Devtype.DevtypeNullref, window.WindowHandle.DangerousGetHandle(), D3D9.CreateSoftwareVertexprocessing | D3D9.CreateDisableDriverManagement, ref d3d9Params, ref device); if (result < 0) { - // todo: throw exception Console.WriteLine("Failed to create D3D9 Device"); d3d9->Release(); - return; + throw new PlatformNotSupportedException("Direct3D 9 not supported."); } Console.WriteLine("Succeeded D3D9 Init"); - - var vtable = VirtualFunctionTable.FromObject((nint)device, D3D9_DEVICE_METHOD_COUNT); - - Console.WriteLine("Found EndScene at " + vtable.TableEntries[(int)Direct3DDevice9Ordinals.EndScene].FunctionPointer); - - this.EndSceneHook = vtable.CreateFunctionHook((int)Direct3DDevice9Ordinals.EndScene, this.EndSceneImpl).Activate(); + VirtualFunctionTable vtable = VirtualFunctionTable.FromObject((nint)device, D3D9_DEVICE_METHOD_COUNT); device->Release(); d3d9->Release(); - + return vtable; } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs new file mode 100644 index 000000000..1274385dc --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using X64 = Reloaded.Hooks.Definitions.X64; +using X86 = Reloaded.Hooks.Definitions.X86; +using System.Runtime.InteropServices; +using Reloaded.Hooks.Definitions; +using Reloaded.Hooks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc +{ + internal class WndProcHook + { + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + + public delegate nint WndProcCallback(nint hWnd, uint msg, nint wParam, nint lParam); + + private WndProcCallback Callback { get; } + + /// The hook created for the WndProc function. + /// Can be used to call the original WndProc. + /// + public IHook Hook { get; private set; } + + public WndProcHook(nint hWnd, WndProcCallback callback) + { + var wndProcAddr = Native.GetWindowLong(hWnd, Native.GWL.GWL_WNDPROC); + this.Callback = callback; + this.Hook = ReloadedHooks.Instance.CreateHook(this.Callback, (long)wndProcAddr); + } + + static class Native + { + [DllImport("kernel32.dll", CharSet = CharSet.Auto)] + public static extern IntPtr GetModuleHandle(string lpModuleName); + + public static IntPtr GetWindowLong(IntPtr hWnd, GWL nIndex) + { + if (IsWindowUnicode(hWnd)) + return GetWindowLongW(hWnd, nIndex); + + return GetWindowLongA(hWnd, nIndex); + } + + private static IntPtr GetWindowLongA(IntPtr hWnd, GWL nIndex) + { + var is64Bit = Environment.Is64BitProcess; + return is64Bit ? GetWindowLongPtr64(hWnd, (int)nIndex) : GetWindowLongPtr32(hWnd, (int)nIndex); + } + + private static IntPtr GetWindowLongW(IntPtr hWnd, GWL nIndex) + { + var is64Bit = Environment.Is64BitProcess; + return is64Bit ? GetWindowLongPtr64W(hWnd, (int)nIndex) : GetWindowLongPtr32W(hWnd, (int)nIndex); + } + + public enum GWL + { + GWL_WNDPROC = (-4), + GWL_HINSTANCE = (-6), + GWL_HWNDPARENT = (-8), + GWL_STYLE = (-16), + GWL_EXSTYLE = (-20), + GWL_USERDATA = (-21), + GWL_ID = (-12) + } + + [DllImport("user32.dll")] + private static extern bool IsWindowUnicode(IntPtr hWnd); + + [DllImport("user32.dll", EntryPoint = "GetWindowLong")] + private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")] + private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetWindowLongW")] + private static extern IntPtr GetWindowLongPtr32W(IntPtr hWnd, int nIndex); + + [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetWindowLongPtrW")] + private static extern IntPtr GetWindowLongPtr64W(IntPtr hWnd, int nIndex); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs new file mode 100644 index 000000000..51f086950 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs @@ -0,0 +1,122 @@ +using DearImguiSharp; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using static Vanara.PInvoke.User32; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render +{ + internal class ImGuiInstance + { + public bool Initialized { get; private set; } + public nint WindowHandle { get; private set; } + public ImGuiContext Context { get; private set; } + private Action DoRender { get; set; } + private WndProcHook WndProcHook { get; set; } + + public ImGuiInstance(Action render) + { + this.DoRender = render; + Console.WriteLine($"[ImguiHook] Init with Window Handle {(long)WindowHandle:X}"); + this.Context = ImGui.CreateContext(null); + ImGui.StyleColorsDark(null); + } + + public void Activate(nint hWnd) + { + if (this.Initialized) + return; + if (hWnd == 0) + throw new ArgumentException("hWnd can not be 0"); + this.WindowHandle = hWnd; + Console.WriteLine($"[ImguiHook] Init with Window Handle {(long)WindowHandle:X}"); + ImGui.ImGuiImplWin32Init(this.WindowHandle); + this.WndProcHook = new WndProcHook(hWnd, WndProcHandler); + this.WndProcHook.Hook.Activate(); + this.Initialized = true; + } + + ///

+ /// [Internal] Called from renderer implementation, renders a new frame. + /// + public unsafe void DrawFrame() + { + ImGui.ImGuiImplWin32NewFrame(); + ImGui.NewFrame(); + this.DoRender(); + ImGui.EndFrame(); + ImGui.Render(); + + if ((ImGui.GetIO().ConfigFlags & (int)ImGuiConfigFlags.ImGuiConfigFlagsViewportsEnable) > 0) + { + ImGui.UpdatePlatformWindows(); + ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + } + } + + /// + /// [Internal] Checks if the provided window handle matches the window handle associated with this context. + /// If not initialised, accepts only IntPtr.Zero + /// + /// The window handle. + public bool CheckWindowHandle(nint windowHandle) + { + // Check for exact handle. + if (windowHandle != 0) + return windowHandle == WindowHandle || !Initialized; + + return false; + } + + + /// + /// Hooks WndProc to allow for input for ImGui + /// + //[UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] + private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam) + { + var io = ImGui.GetIO(); + ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); + + + + //switch (message) + //{ + // case WindowMessage.WM_KILLFOCUS: + // return IntPtr.Zero; + + // case WindowMessage.WM_ACTIVATE: + // case WindowMessage.WM_ACTIVATEAPP: + // if (wParam == IntPtr.Zero) + // return IntPtr.Zero; + + // break; + //} + //if (Options.IgnoreWindowUnactivate) + //{ + // var message = (WindowMessage)msg; + // switch (message) + // { + // case WindowMessage.WM_KILLFOCUS: + // return IntPtr.Zero; + + // case WindowMessage.WM_ACTIVATE: + // case WindowMessage.WM_ACTIVATEAPP: + // if (wParam == IntPtr.Zero) + // return IntPtr.Zero; + + // break; + // } + //} + + return this.WndProcHook.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam); + } + + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index 4fbd26b72..66affef62 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -22,6 +22,8 @@

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 Date: Thu, 27 Jan 2022 02:36:56 -0500 Subject: [PATCH 02/38] kaku: update kaku --- .../kaku-x64.dll | Bin 309760 -> 309760 bytes .../kaku-x86.dll | Bin 259072 -> 259072 bytes .../kaku.co | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll index 4144e883f8ee5fd89bde1cfd6e89e5c46c6e683e..dac0e6c5ef4222c79039fe6761fa31ea74513608 100644 GIT binary patch delta 71799 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 z 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 M*F5Fl%Oh<61Ksy*h5!Hn delta 71669 zcmagH2Yi&p^FMyO$w30STmrdNQV9@x0s#_gDm;M;5PFebq!%H8w15faI6_-t0YN~j zAT_`N(vhlEE1&`@`kYZIDgq++f6wz=LiGFjz5buq>qB;DXJ=<;XJ=<-_c>?%QEAp6 zmG=0t=z)Jc9AI$&@1Y?ksv`G|Gz{}F7A1l zGUwz(FU59BE$GAyioLy;+H4)5h1S?O#m3a`psGGI0b=)6Sy6M(<}6{q5306DO8!St zeVtcFqLP2g%lVDVUR}*{{40cK>MpUyD~I(Hzj>FgXX+Kvq2dt! zl~o+9xRqTMeSK=Ou42AV7TY0i_%vs`gxM5Ru^D=S&wWfCAex)fD`m&gEU%-#Vtbrr zJE>L?OHDELLNxF-5+o+wt|6pvdkC4v_dVn6)6ZZaS;i~&1f{UOpK9HB&&1f@;yd34 zRW2kmL$RllU)|jys_&W9ZaTj`M7((gYb?&22M4}6!UM~=KbGcTEzF<^JW{KRRKF^* zPXRiN6#{`T72CPrmCaV$I90Lrc&HQ}ja{O(irIdlJhGBl>(|7)LkN*7hc;?>DA7{pip5fyxXce$W}e$Fn-Dg_6g$xk*+^wu~5MD@C;3 z^n?(T4dyxjJVpzNOjlQBGBWmsl`a!AiR(%jRz_G-hei?-HA2wQ=Qqnip+VC4ZnF>5O*pE zbt@Q7QUwZn5(@3=5|k;_W@{UTdK?O;)Fv)wSc1`qok{IpvfAsZgALkw)V+P4sfPE( z(n>Y?hi$~sN?~#1+5!Q(3*Mfo3%eK$`K?%PnAJWpHqL6F9ve@)yra7Rk#JQCX_y#D zL!KvlU{q{>7yErk45`bzlJ=gP<@-f!3=(XMhV@6khyuUusyv6b32wM)0| zU1{fBz=Rds7mDp;tL;>(D+i)H3vGjB4#T#k9)^8G`ziHcHG`qx3m7kDa2Bf5c!&J4(hwuhx;=Gx>` zHL;t)P>ij%DRve*gMNW#J4oX3n#6S(lGsVyWk$Rl0QCGQgE>xbGW(}^DfWe0H^rs| zD|tE_!%Mh0@1gVe$ax;dymZFrIf0#D83D6>5PJ+ ziWRchisQ0$O>Ec%&;nxL_Q+~`tg>iqla_gmjzUe;_L;$uT$Fjv4WeEmYiwCt8l*K9 z5_%)p*&Q5Uxf&3^*l>{fvxFO}8VRU9%4#3xg~qyQJfd^;OudXI#U7{FF>%Q2D=+|* z7(#)l40*I;w`(|PUl@Ch7qA9t7M< zO#^7VXC=C4+0JLtK0O+HQtPDacAi?}S9FABi6f}(nbr0@8~WTVo{lNhzRR|$>SYJo zFx`|_2%$OxG}{VwplPXF2@B>XPRT!?lJF~3(5RTxA84vLcQu$%?AiE#SCUcZA!Ho9 z40-6+E?VEo!=OHhp;=u6Djlq~FnX3fBUUp6 z57C}#_VbJ-oxF>RGnU4Ofc><;1+l^Ow{T&eW+>F=f9TSibPmw}O0S15Ju*d*9<7RE z+pn+GE0t3373*^JE0tpwB==`MhB@gPYqh~-SPQEqKrgZN77T_C<=M&|0wSwUp2FEH^+oY&NphMs|(%ZWzTVD-E`uoduZH3@!sJH3Jgu(}FEbNc%sIdSoe@>f) z)`nOa305#{a}1m19yQCB*V-#fAC`Edu@$%wDOtAGIs+(xfukA&ulB?y zbR=<*t|M6LI#7Eu_I(Kf;+%y!!T4f^rP{ZsF6oK8uW1VP)z##aC{0Z?TYXwBe}IO_ zgqCQQH80a(t_j=ftVon$;qHPm3g=#s4b%<~-N4@=(*qD~6V)HCg67YbS`^a2OO?r@ zz@UtQL7C~73sLIQF#DwilOpb+F>JM9OuWqgX<*@|ns>DdlyfsQtOQv(&vk{kslEm= zIce+DGNx#qkH#wW7bkRzy71Be;v!S$!fK!CWyL{Yo|CI}_%|mH0khhgT5Wl6l(N#A zI5E>``GaHoYh%Pg(Xwn$)gL@*Ol%%>Qv?6!uvaVnd-5Gi=2J5HaoWcF*W^D7!~S=! zA%U0Z&8x`|06R1$vFbdhb;i2WT(Ak}(_b`pB!=eVc>ceu(Mo5?iq+8N@O7DSN|;I^ zjkDTnS#7W6kV5(l+BBBBg$x6v9j8`wm-?%FwbDXOo7GTL8BX5)iLiA!Ik!TTR`5Db z8)AR#6#Ol71}XNpVMAd5NQ23!s6}vtpg%gtL$Pvn7M4h+gkzeq#_+(>gG0*Lm+-Ma2M4aF+V#GJxF(Cmj012e{+ z$kW7A!h+QnV=c2e4kIpb_IFRrPy4$mHkdeiWeQ1*C#i{~h`;JseZ-Pu-8={3Zs{CL zq_~7&bhPKCm5R}d(MlFi-ABOyR+1J^-R!QUP-UgNLbgGDj=ex=cWM3BYAv)gSKrsc zanzwutB?vku0SKuY5gX_Y+os}^FAU6x_6&`eN$gc?UUL!wci=5ZIfmxNO$NE_|IfD zuK<%JPeCn!+o_ox-G?#HISFWqG)pFXmteXdQ(|@o1QXiA*gd5G>iLpcQ00ibGK(rZ zwF>cG$zAHN9zw~vfoMYXrwJ)aepQ3>*h`4Uu0=~kHX}AprwJpi6YLTTN@b}H0<~$P zc2r0nEvq_>yjaYwBUN1A>nq_$mB;Riwk-EiaW4Mb<@#4ZlmE*UtL>a(`&6-ARqV!l zqscpF=I$rW{;6KdsUJNv6MnT8w#ey2`(_lvtK{Fz1)pPrZS6j_^V-_G)b>g}3~On~ zhS?koDbuO7)7`E&AEIXXs)3-P#$oT0?V{)cEMhQ36sOVZN3B0<-d-1YRC8`j9ASlb z6Hh^1lGQ$#Ha2#&x}-Xt>d+~e>fYJ5yXq_g*t`2F&ANN#`jC6MvmEFW#9m$*c`2S` zs+j$-r_Fv{VuzXiyLd&J{jFYpW`9pF#dTV-b@$84KkMg=L0GNWo+22X(z}m1S<{lI zM|@xto@5pYC@n>?w^fvpBRayp4u~TUcfB@?g|XYTzc}=?zi-DLqQCGV$5{&p$9A+r zcrZs35u48Wb>c9kut&UNTcab}aeQ_Jt&$@v1&618Sf_YthqW^2;>5;E{z+&PL}2!V ztLN_-tJvG%NQK2S`;{j&s1;=SSe@dBf%DH^!+t9kq!{bLiFy>rLw4cN9$EG=J-~vw zU>Tsg{|ISF$C2ek41hZeNpV==f%3KqB z3qU&c*Ha^O2nuBO&k9y^{7HUoykLJLMv^bq#xM1Jd2R7&WHsfU%T>gnXU-V_l8k6f zwQ3C<7VZ&q$7@Tj*mJ-r>>rKv|39)~%ZXE0LmKYUYa(?~X7tnptcW=)(3p@S7KfPG zf7j&#E5#6XMr@t}9G#)UF2JxoqEO*CT@ty$*tCN)prgaAP`Zy1`GMR%nmkRx?AIDI z?h+es_UBoJGr{*G@+_jgG%=drK9gJdU;XXqUp$(qk-m=7)(wXxj7q8}5U1O60&FbH z-pw!D-a0tj-aabJ4o?+KMya>S0NB2uXnqL|Z~ow6lyd5~D1=9(4de`XKEL@z`n z>dZSXm(})EK6J2vl!S{3H(Xz&+S+)g=GV}+YrMKobJl5?$BFtdK_El>)l76XN_%K? zY%G3X)C~yZm%K&WfOfp7p^yPB^15|LPD@ejjPf|X`A=DH4iu^dVwK_!lq{LBuk+gi{Dafos>K>-vf+tjLRQY*snvPLsLjs8T7H8m=Tz_?0zt7;JEXJ}?^Fbj&1Yetdz#hIq3p~+Bx-NIl% zOE*eNlGIVv2E6g%UZdSBBf@<{a-591n$-)mM6{t+IBo^m6bh^P;N>~nSWOOa43 zB=qan2x0SQ7+7wAb{vxRPa#7vN(`_fn6; z5zS0+l_lFx#McT9tN8z-`i`#{QY)?!1dl;3(UygL9;x;I5z)0n**~Ir?J$1$g;qH$ zCf3dltoWnLRqUPcq}X4*M&8Vvley*9x#G*(T{DAXONCwpr6?opRM?9*nrg!SI_BTP zK8w1h9J;VW#P~Yj@{fH)PTk4%rV%bB10ShDdbCNteO@=*h+p&!$f~t{~qe^U$|Vyp|w!k;d;3xmHX)B z$GuR_(aT$?oT-=7sEoS^>N}|?%80b7+0l3W+Fq zQ=v8rQ#zm!gF++~LQpu~9tA%XF5`ZwIJ!Jauc72Nx!N58L<4O@goU<~BD`U(#LD#n zfl5gWZ5Oz@SvF{INAeM-T3>b6R$t3U7Mk7=(;Du~E49H|4*sfo`X-$rXS7V;BXvJ& z+KtprEs#H{Ztg_mJW`uq*N&P}E9|UIfJ0NZ=6rW|(}JsKltatb#odkma@=(~1a@N$ zkHmrLGbQ&ohoewKQW+LqZ6%f_21NX-fKA;-yN!1V4p2;l!i3n87-71J%NbjeZJei4 zXt^t{Cr113Ajmi`#g+t6&1H?kah(~_s0te@n&IEpqDP}DjW+&l)w(E8!f+nELjYx&hGkzDCvAa5X~B zdickE!r;t|Qfy|$J|1p!YOqrC;bG0vu2TNO?Ve^ce!s2BP$iQ~H#Tu}V&?yX+$@7j zs_j9uKU2pdTd+iFnEz2y>FwQo^w952h@1PcGjx)5gVDgcY0(36%Hp9YYMjMh7ymS# zz_P^nCJ~;4D|r}%vq>zQE_{&LSe0EpSu31Os z5Nn!^<{r;Q#pVn1==Mu9r%?6b&qywCCrD^<*>sd!lTS|yOq_VW2LuH2-?WyvB9aypBlx?b9R#P!Fd@+8F|G%OtB`z!+);^ zfo-@QaJQxOu-Xw&O~De63%1%j0*<)Do+4f}PsqEC`z*z#T0wOfkw$=pAVf*NM3JGn z&GW4Mrf@I!}zWY1obv(v;+f z6FMt}J_sJ2=KN)FpRI)oOI=WUN7wa$g4 zJ!pg1Q?{X?c(m1aTlK0)=iY7d7QpN^bAAx9;<}_HKQ`yL!dMu%mNsxIDi|~fgZfVV zj3`2NHMb}gL*+enS>b07Bj2Mxcrq7696Ao|qK@FxG+7gqs* z(uH1iLvgR!&kP2CLoTx1;PG5aQ|8K@ z;dWG*6D)#>%LoLf(~%a4f*l3T*?)|sEi}H3sulN_iA6anzKrFG{;B(7SL2Yg+HPw2 zTTli*P8bb;w^n_wb`Xuz8sMqL@U*trG^c8*6^-|jKqcb}uPRGtiQn-#qsJ!~-TVxJ?Hz7=vgpn<)OGhVWNvveTlO5*Bzci=>$vrQ{F5yMsc@7SvTH zMkx*00->R&DtL3}b{Sbe%6Y zTkEq6;&W>?zHBUBN(70@*^<2{c4Q0q$*tP=VGYIF_K(;`vA9DO9#vUfjZg8(aOxD| z)ZsxQETOTe-*F+gbQi}uR^y#g#19=?vRk5RPGZ~K47aZrO9k@v&ZMJ2uHIA>Xi8DY zrvK-yhjC^K%{dJ+*WP+OQvW$AHsmzPT$o0EG>4;ns#_uQ$o0#o2Be2@O@n6@{i5(U zj&8Syxr60qt8uw#YY5EbG!fpZR>iI-u^?LT*;I7ul+o)CjT>!OA>;t9XKFrB%7p)4 z6XR1r;TQ_3hv==4=GSh}sucGZS3&DrTGfxLCRDqni-(;oEhmFnBpN&+aUUSK6Aid1 z(?;_C_ehVm$vjgZ<8UTMYKipD(+B?Po;wm0x?}K6?L|~yB`9tKqqwenm^H7^OD0tN z-{=MIVFKL4SVeRf3u`HwbcxKK`>HoNZN$YHSP`XAJ4YL08l&{yWS!psKoc&2leKO* zvZ%u{fa&igv9U}2yzZHZGCm|)$fQu&9Rm4LxeFb2g~nniiBr+bXQ}*#Ufx9IQ+nUI zq)5GiJdz5XP{^UeU?NLs?e#8|sjR2ej1M63Jm+_M|Ldq|3$+i0k`QPq0g1#U6jBet zCpI{JbV8k}iS#vDYx1WicVOlVh!c*m#yV!Mg-f5Kpr?VHdal#Bi<6<4KL%rbecZ}1k% zt!h(gx9X|05>*>}^k16UqZMvTNf&zH(GdMzBEIQ%Ixo8&1n7>qH*4ZHZAWnEj<`+j zsjNrbCQfBN;x-+`x#^C$O`WK$N8F~lI2qj$w<(Rvdck+pp zl*)RWtx-V4ZTcL$g(7a#L@FTS zHr1vAB5u=Z+6GuxQvwwbahukY>LTJcwV?tcZqtvXWw64gKe6`3MyQafKt%Tpvs_D} z^-*AO`_tn(T4&WNa(dQgcg2jJ!R(G$(eoSjOib)GiN%QGUW4#Vv_tQz>|oJ^-c6bR zIw%#qJ3Q}#`-B&;cf|46GT2+fqmRO~+KTKxLp`r!=ZHmb1c@ts;@Jw}>T{W`7MJ_J zK-hMv-#GrHl4#yP&R>ODElVg*4VaFRHm3eC>^gwKN*yPSE~MlGuQ#qZE$P$wpfdQ z$B7>Xx8~LiQD;adkIfJhhGeo|#o;08?40;#2rQClJ#;IZBz_y(nmrMXUXPEO3Qecz zmZqz?swJ8{wAZQdhOU4O^}d+%dfmokAn2e?QEdM1XHJN^^9NAO+h{-?qCmlXY82f! z;B@{C%cHIm>g#RTBN0C=7&)!1VNo4le;@fnqZ*GtdOjHG-Ap8@;CHy($!*(}1;*fL zPu!tR?5e(}#V+)ik-W##>K_#H7h0BJ&1vsV5{HLXVe7>g!>S>D@M2hm&+DhSA^+)= z+`8wCZ;9%|NBEia9;awy!^K)G)(^Mfo%F%skrlR_ga?N(6nV8f!z}}+Yt{i%G3>2D z;imIf3=Y>3LV!)_iXo3sIvr<2OZ>?ieSMpp>dDdL7?WHs%7n*YYC3q5a$N5dHhKp`I}hMr>a=+Mq3`$ zY+2uC!hga7<}6w>p%LQ^lZ!r`xQ>O?dI!@&P?4>iZ;jZ5WZF939A|t_*e6Ar8@z-- z3Qh08ibDKvi^G#_Y=lUk+?>~4EoM)y!97=t?UUO@I98Dn$y61);&p_MQT<&MgqYID zxmr}7lGJg)|3*=>0H+u$st;tXXVB~kv)=SF0k#*l}j~He8n+lIh6X)Kn4c&hHrj`9DT21ZA78b3V`Zi~aMZFm@ z2pMx`WU*ANUx`f#cZ~)&S}F# z7K-I_a!v2q@yOybQWVh8Eh1=cPu5(FpF5ge5qIW(>OTTzm15?UgPz48UGZ0OW?mh3 zOgx+y%T@}@{9ZgePK=*ljdzO^E9dv+2j`2sa|4QeY$I7%<~(gBazorl&?8lRLOWTl zGEXd9Fvjx1TwQhPmXWj<@*YrKSnSooU~~KCO6{E5*ySk^5>;H+Ww|AOw?E|m)x`aU z>AZQZqFRMVI9FoCkBg^S?6oz+MPb3Xi!=(RGg(Yp@(~*-nk^k#w?^zM+pT#SBW9C@ z>-rE2t77EJXm>}umVd;Rr8P|Rs=k6u5`0-L-wS0RgR6?B%Uae+%!BmW!G&Cq%I0UP z7_=!N73N;k-FcD%}pg}NEDAy!WL&Wic zi6TeDn6eUIp*|I}M3k>5odk4^4pc*;*d<;=*j(}LLcTB>OA#pcyxpqOvFYF|8fk0u z!5q8?Fb;|mY0vmm1smDgk!{=$fRnO~KwU}YMtb>8D#z;O-ld&_ zbwCRO(9z{AuLB|o;7fofkO)XUMPm4{7Ixg%0k;X@LyrWUpXrbj1gS^>+%Z$1Ri%CQ z>3|8PfDJmJGXc!hg&q^3OCkZZar1P59{|oVdimRMG~%!`I0x#0<>7gNBoV}YlQxo2 zC|q%-=qTv~pyuyojxv}4+8mDQfYt=ir2Bymh$a9@5M6q}b*x5iexWb0w{z~^k;|!{j6Ql)fy{Ja(RGb0SRI1UE6gNgKyc83jqLEXL zxGD}s%^6yP>4Vw@aZHAp3O>NDw`D#BAR$EDms3~=(Rbw+yj~U2cvTL&E#|L^$lC!j zM~EAk;W+ZP<`aN4vIOut0VrfF0kr-vAcg>1c<83#0yqDnagP9+Z{@}~O#p}_uaxQ< zg3!!MhRGuUt#k=s5CKRUC4d(H?Gp4~z+WNgLJC^a(DQjqxr4%F6je0+6bfjQbt|w1kc}EH=O-f{?D3pmZldS*nc)P*z8L2|zkq z(nZB*QvX`KPY6(Utu_;&Y?pZiFh!IhGV;HD+5{H0TC>T6^%Os>tJ}OGX0H@x-?bKI z?op2qWrhXWDuSJ;SdQvHbmUrT9s`m^4!*(13!mDWf?o3|$xF^lyqhbHLPr(s<&PZH6 zR_AWjrED~XihFyj1TB66Dd0ryL61E9LtJ3kQYlmf?0d}S7L_lGV?2|Kg#AgCYI{J+ zw(r#9O>PRf}zHopF<3Edkypl;b6} z`=}wqqSh?|Y${5=6jUzwGsMj5Je!-)x2P4D$1uMZ4ZF70gZKGK_4~>CPro|KriueMyYZ@bh3QrTdnj7nimlA=pm&fSqG#FeU=bZ+(ybN9IhbyT z;Tpc?ZD%e1E%9+nO`G8!^3gX0c&sL9fOB&mVEGt0xG9={9l?%>-e0%p9*x9~ucMKZ zy8LxtK08tKaZ|rJz2qNjJpGq$5>#688+Z{TN`%w{}1)kM|hv!c`YBRE#z-cRv( zTTw}EoaOmB$1X752cjO`em{n=aRk2c6Y-IG5?l5HHXJ^3%Dkp)lF^KhE6{WoAl0p0 z1!Ach;ynUnu%||TCW_RHJStAibS}cyF#TMC@#WRQW{`+44&ufeBCEKz*H_oIvB!() z#cv}(_Wvc64>&FA{*uGHT^F-{nZkY%&wj~nc6=?AaLyCOb}SyIL$R$LhCjJA6uYSl zwG>*u$7Pz!Qhy$pLYz@>kIVx-C^Qxn&HlA6W8aG1zXj8+;cuPTG7B~svKa@6=?_3x?#K@-` zND-dZ3cSBWn;?Cfe9q{5x+gJ!OZwK2m$S%BL44mzIU<6{wLUTnjHcE(!b+91}*lG zzjg2kHO}m8H>HX1|E_6CIz#KJdGMxR_G?Sn=pzyRqCWdfeV?~Zftf==-IJ+sV|5WifTIeDB=6Hnqdm8U3L!{-PI$!XoYK%2M^vUeLYxx=5Vz1 zV51oiIVyL0vie-vA;0xxbt+xLmzDIzZQHKyt#a5=#mK6Au%8|2UaTBr(_~w3Hm-87 zgM{~7UER@*mvvBH_GXO&-aG$_zo9_FCRi*3E3m)#8ym<<<%;qDrfsg!nJR zyO$TI!|+zyDeqNaTi9ATzamRwZ_85^!SP`Es3PmfJ!i^JJ}i#ilGA)xEIT0A`>b|U5bkQ`ZSpHLPF1SLm5gz}V z3yx6<5xEfx}n>#C7HTH7~8CUwKQL>(UxY^E=_fw>Z2T3)GC zJwMP<({{-}{8?SgZB$D%cZA+#*yU(kiJf5Vb@`++i{|0GWJmy;!5h+AI?Tp$Iv9u@rVjb_&BD zRMyCuVXRuj0BtS*vj?5@J%wU#G*O-kV-e-E$I#d(^V?omvk zwhd9NVbFz5CBlT47l++UvTL?U7Dut8furHqkiw257jTMpfEOCa$z#zhhTWHUqggm# zyihKQWP#EW!=|%*xh#ft;VFxx8pAq<7U1$k?eIO3G+iqsQdVNGkx#VjR27D3yPQ^) zwc@qjllP)o7;m&+-mJ@)dhH5S%1Y6zWjCv)*Qz?1 zozsv=#KB#JMttLgL%h&(`vYn^<+98q9P$W0B+<~@Jfj_WuIq3P?3Vdjmm8WRF^bBC zmfh&-va~7b_MX-a4+xE~4fg0{$iLzV6LteS(oO67MC;l>@0zc5HI;Oot92zGq!!xM zk36^`0o(gj!VNvQ@A~2#w(_y+EIzZ}3fcz7DeFosSIc

+ + @@ -29,5 +31,8 @@ + + + \ No newline at end of file From a6127ac92f90e043681333e1b92904fe33a87b50 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 30 Jan 2022 01:05:19 -0500 Subject: [PATCH 04/38] overlay: dx11 hook POC --- .../EntryPoint.cs | 3 +- .../Hooks/Direct3D11/D3D11DeviceOrdinals.cs | 86 ++++++++++ .../Hooks/Direct3D11/Direct3D11Hook.cs | 158 ++++++++++++++++++ .../Hooks/Direct3D9/Direct3D9Hook.cs | 2 +- .../Render/ImGuiInstance.cs | 1 - ...chestration.Overlay.Runtime.Windows.csproj | 8 +- 6 files changed, 248 insertions(+), 10 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index c07aa6b8d..fb2c713cb 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -2,6 +2,7 @@ using System; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks; using System.Reflection; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -25,7 +26,7 @@ private static int Main() { Vanara.PInvoke.Kernel32.AllocConsole(); Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); - new Direct3D9Hook().Activate(); + new Direct3D11Hook().Activate(); return 0; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs new file mode 100644 index 000000000..c8061d8c5 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 +{ + internal enum D3D11DeviceOrdinals + { + QueryInterface = 0, + AddRef = 1, + Release = 2, + + // ID3D11Device + CreateBuffer = 3, + CreateTexture1D = 4, + CreateTexture2D = 5, + CreateTexture3D = 6, + CreateShaderResourceView = 7, + CreateUnorderedAccessView = 8, + CreateRenderTargetView = 9, + CreateDepthStencilView = 10, + CreateInputLayout = 11, + CreateVertexShader = 12, + CreateGeometryShader = 13, + CreateGeometryShaderWithStreamOutput = 14, + CreatePixelShader = 15, + CreateHullShader = 16, + CreateDomainShader = 17, + CreateComputeShader = 18, + CreateClassLinkage = 19, + CreateBlendState = 20, + CreateDepthStencilState = 21, + CreateRasterizerState = 22, + CreateSamplerState = 23, + CreateQuery = 24, + CreatePredicate = 25, + CreateCounter = 26, + CreateDeferredContext = 27, + OpenSharedResource = 28, + CheckFormatSupport = 29, + CheckMultisampleQualityLevels = 30, + CheckCounterInfo = 31, + CheckCounter = 32, + CheckFeatureSupport = 33, + GetPrivateData = 34, + SetPrivateData = 35, + SetPrivateDataInterface = 36, + GetFeatureLevel = 37, + GetCreationFlags = 38, + GetDeviceRemovedReason = 39, + GetImmediateContext = 40, + SetExceptionMode = 41, + GetExceptionMode = 42, + } + + internal enum DXGISwapChainOrdinals + { + // IUnknown + QueryInterface = 0, + AddRef = 1, + Release = 2, + + // IDXGIObject + SetPrivateData = 3, + SetPrivateDataInterface = 4, + GetPrivateData = 5, + GetParent = 6, + + // IDXGIDeviceSubObject + GetDevice = 7, + + // IDXGISwapChain + Present = 8, + GetBuffer = 9, + SetFullscreenState = 10, + GetFullscreenState = 11, + GetDesc = 12, + ResizeBuffers = 13, + ResizeTarget = 14, + GetContainingOutput = 15, + GetFrameStatistics = 16, + GetLastPresentCount = 17, + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs new file mode 100644 index 000000000..bd93d5b74 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using Reloaded.Hooks; +using Reloaded.Hooks.Definitions; +using Reloaded.Hooks.Tools; +using Silk.NET.Direct3D11; +using Silk.NET.Core.Native; + +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9; + +using X64 = Reloaded.Hooks.Definitions.X64; +using X86 = Reloaded.Hooks.Definitions.X86; + +using ImGui = DearImguiSharp.ImGui; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using Silk.NET.DXGI; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 +{ + internal class Direct3D11Hook + { + const int D3D11_DEVICE_METHOD_COUNT = 43; + const int D3D11_SWAPCHAIN_METHOD_COUNT = 18; + + public Direct3D11Hook() + { + (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) = GetDirect3D11VTable(); + unsafe + { + this.PresentHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.Present, this.PresentImpl); + this.ResizeBuffersHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.ResizeBuffers, this.ResizeBuffersImpl); + } + this.ImGuiInstance = new ImGuiInstance(Open); + } + + private void Open() + { + bool open = true; + DearImguiSharp.ImGui.ShowDemoWindow(ref open); + } + + public void Activate() + { + Console.WriteLine("Activated D3D11 Hooks"); + this.PresentHook.Activate(); + this.ResizeBuffersHook.Activate(); + } + + private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount, uint width, uint height, Format newFormat, uint swapChainFlags) + { + Console.WriteLine("Hook Resize"); + return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); + } + + private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uint flags) + { + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + } + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate int Present(IDXGISwapChain* swapChain, uint syncInterval, uint flags); + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + public unsafe delegate int ResizeBuffers(IDXGISwapChain* swapChain, uint bufferCount, uint width, uint height, Format newFormat, uint swapChainFlags); + + private static readonly D3DFeatureLevel[] FEATURE_LEVELS = new[] { D3DFeatureLevel.D3DFeatureLevel101, + D3DFeatureLevel.D3DFeatureLevel110 }; + + public IHook PresentHook { get; } + public IHook ResizeBuffersHook { get; } + public ImGuiInstance ImGuiInstance { get; } + + private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) GetDirect3D11VTable() + { + using var window = new RenderWindow(); + + var d3d11Api = D3D11.GetApi(); + D3DFeatureLevel outFeatureLevel = 0; + Span requestFeatureLevels = FEATURE_LEVELS.AsSpan(); + + SwapChainDesc swapChainDesc = new() + { + BufferDesc = new() + { + Width = 100, + Height = 100, + RefreshRate = new() + { + Numerator = 60, + Denominator = 1 + }, + Format = Format.FormatR8G8B8A8Unorm, + ScanlineOrdering = ModeScanlineOrder.ModeScanlineOrderUnspecified, + Scaling = ModeScaling.ModeScalingUnspecified, + }, + SampleDesc = new() + { + Count = 1, + Quality = 0 + }, + Windowed = 1, + BufferUsage = DXGI.UsageRenderTargetOutput, + BufferCount = 1, + OutputWindow = window.WindowHandle.DangerousGetHandle(), + SwapEffect = SwapEffect.SwapEffectDiscard, + Flags = ((uint)SwapChainFlag.SwapChainFlagAllowModeSwitch) + }; + + IDXGISwapChain* swapChain = null; + ID3D11Device* device = null; + ID3D11DeviceContext* context = null; + int? result = 0; + fixed (D3DFeatureLevel* featureLevels = requestFeatureLevels) { + result = d3d11Api?.CreateDeviceAndSwapChain( + null, + D3DDriverType.D3DDriverTypeHardware, + 0, + 0, + featureLevels, + (uint)requestFeatureLevels.Length, + D3D11.SdkVersion, + ref swapChainDesc, + ref swapChain, + ref device, + ref outFeatureLevel, + ref context + ); + } + + if (result == null || result.Value < 0) + { + Console.WriteLine("Failed to create D3D11 Device"); + throw new PlatformNotSupportedException("Direct3D11 not supported."); + } + + Console.WriteLine("Succeeded D3D11 Init"); + + VirtualFunctionTable deviceVtable = VirtualFunctionTable.FromObject((nint)device, D3D11_DEVICE_METHOD_COUNT); + VirtualFunctionTable swapChainVtable = VirtualFunctionTable.FromObject((nint)swapChain, D3D11_SWAPCHAIN_METHOD_COUNT); + + //order is important! + swapChain->Release(); + device->Release(); + context->Release(); + return (deviceVtable, swapChainVtable); + //d3d9->Release(); + //return vtable; + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs index 99fc085f8..4ce30174c 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs @@ -185,7 +185,7 @@ private unsafe VirtualFunctionTable GetDirect3Device9VTable() { Console.WriteLine("Failed to create D3D9 Device"); d3d9->Release(); - throw new PlatformNotSupportedException("Direct3D 9 not supported."); + throw new PlatformNotSupportedException("Direct3D9 not supported."); } Console.WriteLine("Succeeded D3D9 Init"); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs index 51f086950..1ed7945b4 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs @@ -23,7 +23,6 @@ internal class ImGuiInstance public ImGuiInstance(Action render) { this.DoRender = render; - Console.WriteLine($"[ImguiHook] Init with Window Handle {(long)WindowHandle:X}"); this.Context = ImGui.CreateContext(null); ImGui.StyleColorsDark(null); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index 66affef62..ebb88e3c7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -25,14 +25,8 @@ + - - - - - - - \ No newline at end of file From 60c18f8aa29698193264f9b88c9d8e284bbd8db9 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 30 Jan 2022 01:06:20 -0500 Subject: [PATCH 05/38] overlay(cef): Host CEF as a module --- src/Snowflake.Bootstrap.Windows/Program.cs | 17 ++- .../Snowflake.Bootstrap.Windows.csproj | 2 +- .../SnowflakeShell.cs | 4 + .../Orchestration/ICefBrowserService.cs | 19 +++ .../AssemblyLoader/AssemblyModuleLoader.cs | 4 +- .../CefRendererComposable.cs | 29 ++++ .../CefSharpBrowserService.cs | 136 ++++++++++++++++++ ...hestration.Overlay.Renderer.Windows.csproj | 11 ++ .../module.json | 8 ++ src/Snowflake.sln | 27 ++++ 10 files changed, 254 insertions(+), 3 deletions(-) create mode 100644 src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/module.json diff --git a/src/Snowflake.Bootstrap.Windows/Program.cs b/src/Snowflake.Bootstrap.Windows/Program.cs index c88d3fd86..359b7cfd2 100644 --- a/src/Snowflake.Bootstrap.Windows/Program.cs +++ b/src/Snowflake.Bootstrap.Windows/Program.cs @@ -3,12 +3,27 @@ class Program { + private static SnowflakeShell snowflakeShell; + static void Main(string[] args) { Console.WriteLine("Starting Shell..."); - var snowflakeShell = new SnowflakeShell(); + AppDomain.CurrentDomain.ProcessExit += ExitHandler; + Program.snowflakeShell = new SnowflakeShell(); snowflakeShell.StartCore(); while (Console.ReadLine() != "exit") ; + + Console.WriteLine("Shutting down..."); snowflakeShell.ShutdownCore(); + + } + + private static void ExitHandler(object sender, EventArgs e) + { + Console.WriteLine("Shutting down due to force exit..."); + if (!snowflakeShell.IsShutdown) + { + snowflakeShell.ShutdownCore(); + } } } diff --git a/src/Snowflake.Bootstrap.Windows/Snowflake.Bootstrap.Windows.csproj b/src/Snowflake.Bootstrap.Windows/Snowflake.Bootstrap.Windows.csproj index 81ff566ce..5f882f919 100644 --- a/src/Snowflake.Bootstrap.Windows/Snowflake.Bootstrap.Windows.csproj +++ b/src/Snowflake.Bootstrap.Windows/Snowflake.Bootstrap.Windows.csproj @@ -3,7 +3,7 @@ Exe net6.0 - win-x64;win10-x64; + win-x64 diff --git a/src/Snowflake.Bootstrap.Windows/SnowflakeShell.cs b/src/Snowflake.Bootstrap.Windows/SnowflakeShell.cs index 21c718b6a..a990773f4 100644 --- a/src/Snowflake.Bootstrap.Windows/SnowflakeShell.cs +++ b/src/Snowflake.Bootstrap.Windows/SnowflakeShell.cs @@ -19,6 +19,8 @@ internal class SnowflakeShell private IServiceContainer loadedCore; + public bool IsShutdown { get; private set; } = false; + internal SnowflakeShell() { } @@ -35,12 +37,14 @@ public void RestartCore() { this.ShutdownCore(); this.StartCore(); + this.IsShutdown = false; } public void ShutdownCore() { this.loadedCore.Dispose(); GC.WaitForPendingFinalizers(); + this.IsShutdown = true; } } } diff --git a/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs b/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs new file mode 100644 index 000000000..069c05020 --- /dev/null +++ b/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.IO.Pipes; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Remoting.Orchestration +{ + // todo move this to its own thing? + public interface ICefBrowserService + { + public Task Initialize(); + public void Shutdown(); + public void Browse(Uri uri); + public Uri? CurrentLocation { get; } + public NamedPipeClientStream GetCommandPipe(); + } +} diff --git a/src/Snowflake.Framework.Services/AssemblyLoader/AssemblyModuleLoader.cs b/src/Snowflake.Framework.Services/AssemblyLoader/AssemblyModuleLoader.cs index c36ab878a..f163ef9f1 100644 --- a/src/Snowflake.Framework.Services/AssemblyLoader/AssemblyModuleLoader.cs +++ b/src/Snowflake.Framework.Services/AssemblyLoader/AssemblyModuleLoader.cs @@ -44,7 +44,9 @@ public IEnumerable LoadModule(IModule module) cfg.LoggerTag = module.Entry.Replace(".dll", "").Replace("Snowflake.Support.", "SF.S."); // We need to load into the default context to allow accessing services exposed by other plugins. cfg.PreferSharedTypes = true; - cfg.LoadInMemory = true; + + // loading in memory makes some native-hosted Dlls act weird. + cfg.LoadInMemory = false; cfg.IsUnloadable = false; }); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs new file mode 100644 index 000000000..54129a25d --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs @@ -0,0 +1,29 @@ +using Snowflake.Extensibility; +using Snowflake.Loader; +using Snowflake.Remoting.Orchestration; +using Snowflake.Services; +using System.Threading; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows +{ + public class CefRendererComposable : IComposable + { + [ImportService(typeof(IServiceRegistrationProvider))] + [ImportService(typeof(ILogProvider))] + public void Compose(IModule composableModule, Loader.IServiceRepository serviceContainer) + { + + var logger = serviceContainer.Get(); + var services = serviceContainer.Get(); + + var cachePath = composableModule.ContentsDirectory.CreateSubdirectory("cache"); + var browser = new CefSharpBrowserService(logger.GetLogger("cefsharp"), cachePath); + services.RegisterService(browser); + Task.Run(async () => { + await browser.Initialize(); + browser.Browse(new System.Uri("https://snowflakepowe.red")); + }); + } + } +} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs new file mode 100644 index 000000000..888bf9829 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs @@ -0,0 +1,136 @@ +using CefSharp; +using CefSharp.OffScreen; +using Snowflake.Extensibility; +using Snowflake.Remoting.Orchestration; +using System; +using System.Collections.Generic; +using System.IO; +using System.IO.Pipes; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows +{ + internal class CefSharpBrowserService : ICefBrowserService, IDisposable + { + private bool disposedValue; + + public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) + { + this.Logger = logger; + this.CacheDirectory = cachePath; + this.ShutdownEvent = new ManualResetEventSlim(); + this.StartEvent = new ManualResetEventSlim(); + this.InitializedEvent = new SemaphoreSlim(0, 1); + this.CefThread = new Thread(this.MainCefLoop); + this.CefThread.Start(); + + } + + public ManualResetEventSlim StartEvent { get; } + public SemaphoreSlim InitializedEvent { get; } + public ManualResetEventSlim ShutdownEvent { get; } + public Thread CefThread { get; } + public ILogger Logger { get; } + public DirectoryInfo CacheDirectory { get; } + private ChromiumWebBrowser? Browser { get; set; } = null; + public Uri? CurrentLocation => this.Browser?.Address != null ? new Uri(this.Browser?.Address) : null; + private bool Initialized { get; set; } + public void Browse(Uri uri) + { + if (uri.Equals(this.CurrentLocation)) + { + this.Browser?.Reload(); + return; + } + + this.Browser?.Load(uri.AbsoluteUri); + } + + public NamedPipeClientStream GetCommandPipe() + { + throw new NotImplementedException(); + } + + private void MainCefLoop() + { + this.Logger.Info("Entered CEF Loop thread, waiting for init."); + this.StartEvent.Wait(); + this.Logger.Info("CEF start event received."); + + CefSettings settings = new() + { + CachePath = this.CacheDirectory.FullName, + RemoteDebuggingPort = 10037, + // stop CEF from clogging up the console. + LogSeverity = LogSeverity.Fatal + }; + Cef.EnableHighDPISupport(); + + settings.CefCommandLineArgs["autoplay-policy"] = "no-user-gesture-required"; + settings.EnableAudio(); + settings.SetOffScreenRenderingBestPerformanceArgs(); + Cef.Initialize(settings, true, browserProcessHandler: null); + this.Logger.Info("CEF started."); + this.Browser = new ChromiumWebBrowser("about:blank"); + this.InitializedEvent.Release(); + this.ShutdownEvent.Wait(); + this.Logger.Info("CEF shutting down..."); + Cef.Shutdown(); + this.Logger.Info("CEF shut down."); + } + + public async Task Initialize() + { + if (this.Initialized) + return; + this.StartEvent.Set(); + await this.InitializedEvent.WaitAsync(); + WindowInfo windowInfo = new() + { + Width = 100, + Height = 100, + WindowlessRenderingEnabled = true, + }; + windowInfo.SetAsWindowless((nint)0); + + BrowserSettings browserSettings = new() + { + WindowlessFrameRate = 60 + }; + this.Browser.CreateBrowser(windowInfo, browserSettings); + this.Initialized = true; + } + + public void Shutdown() + { + this.ShutdownEvent.Set(); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + this.Shutdown(); + this.Logger.Info("Waiting for CEF Thread to exit..."); + this.CefThread.Join(); + } + + // TODO: free unmanaged resources (unmanaged objects) and override finalizer + // TODO: set large fields to null + disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj new file mode 100644 index 000000000..4f733b24b --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -0,0 +1,11 @@ + + + net6.0 + <_SnowflakeUseDevelopmentSDK>true + win-x64 + + + + + + diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/module.json b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/module.json new file mode 100644 index 000000000..485c1f80a --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/module.json @@ -0,0 +1,8 @@ +{ + "entry": "Snowflake.Support.Orchestration.Overlay.Renderer.Windows.dll", + "loader": "assembly", + "frameworkVersion": "1.0.0", + "version": "1.0.0", + "author": "Snowflake", + "name": "Snowflake CefSharp Renderer" +} \ No newline at end of file diff --git a/src/Snowflake.sln b/src/Snowflake.sln index ddeb1dd93..c31a3afc4 100644 --- a/src/Snowflake.sln +++ b/src/Snowflake.sln @@ -98,6 +98,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Plugin.Scraping.F EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Support.Orchestration.Overlay.Runtime.Windows", "Snowflake.Support.Orchestration.Overlay.Runtime.Windows\Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj", "{32E9E587-B66D-419E-ACE0-261D1688709E}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Snowflake.Support.Orchestration.Overlay.Renderer.Windows", "Snowflake.Support.Orchestration.Overlay.Renderer.Windows\Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj", "{BCE0A187-9D45-41C7-8C6F-D0AE20D97866}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -928,6 +930,30 @@ Global {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x64.Build.0 = Release|Any CPU {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x86.ActiveCfg = Release|Any CPU {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x86.Build.0 = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|x64.ActiveCfg = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|x64.Build.0 = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|x86.ActiveCfg = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|x86.Build.0 = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug-Module|Any CPU.ActiveCfg = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug-Module|Any CPU.Build.0 = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug-Module|x64.ActiveCfg = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug-Module|x64.Build.0 = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug-Module|x86.ActiveCfg = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug-Module|x86.Build.0 = Debug|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release|Any CPU.Build.0 = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release|x64.ActiveCfg = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release|x64.Build.0 = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release|x86.ActiveCfg = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release|x86.Build.0 = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|Any CPU.ActiveCfg = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|Any CPU.Build.0 = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x64.ActiveCfg = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x64.Build.0 = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x86.ActiveCfg = Release|Any CPU + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -971,6 +997,7 @@ Global {966B61B4-183E-40DE-8E47-40BEBD117638} = {49B7A61F-B3BE-485E-84D0-B78C08656412} {09F314C3-054A-4907-96A4-C180976FA4DD} = {86D5767F-B32D-4E1B-BBA2-B87A0DEC6C6F} {32E9E587-B66D-419E-ACE0-261D1688709E} = {FBD15674-246A-4C57-B865-07214D8BB9A1} + {BCE0A187-9D45-41C7-8C6F-D0AE20D97866} = {FBD15674-246A-4C57-B865-07214D8BB9A1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {532F5D25-2D82-45B3-BF60-DDA40A0FB795} From eae1f5a96d5966ed01539c63b6dd84c7400aa7c7 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 30 Jan 2022 04:27:16 -0500 Subject: [PATCH 06/38] overlay(ipc): sketch out rough IPC protocol over named pipes --- .../CefSharpBrowserService.cs | 12 +- .../Remoting/RendererCommand.cs | 128 +++++++++++++++++ .../Remoting/RendererCommandServer.cs | 101 ++++++++++++++ ...hestration.Overlay.Renderer.Windows.csproj | 1 + .../EntryPoint.cs | 17 +++ .../Render/RendererCommand.cs | 132 ++++++++++++++++++ 6 files changed, 388 insertions(+), 3 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs index 888bf9829..88a4f6fd7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs @@ -2,6 +2,7 @@ using CefSharp.OffScreen; using Snowflake.Extensibility; using Snowflake.Remoting.Orchestration; +using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; using System; using System.Collections.Generic; using System.IO; @@ -25,10 +26,14 @@ public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) this.StartEvent = new ManualResetEventSlim(); this.InitializedEvent = new SemaphoreSlim(0, 1); this.CefThread = new Thread(this.MainCefLoop); + this.CommandServer = new RendererCommandServer(); + this.CommandServer.Activate(); + this.CefThread.Start(); } + public RendererCommandServer CommandServer { get; } public ManualResetEventSlim StartEvent { get; } public SemaphoreSlim InitializedEvent { get; } public ManualResetEventSlim ShutdownEvent { get; } @@ -65,13 +70,13 @@ private void MainCefLoop() CachePath = this.CacheDirectory.FullName, RemoteDebuggingPort = 10037, // stop CEF from clogging up the console. - LogSeverity = LogSeverity.Fatal + LogSeverity = LogSeverity.Fatal, }; Cef.EnableHighDPISupport(); settings.CefCommandLineArgs["autoplay-policy"] = "no-user-gesture-required"; - settings.EnableAudio(); settings.SetOffScreenRenderingBestPerformanceArgs(); + settings.EnableAudio(); Cef.Initialize(settings, true, browserProcessHandler: null); this.Logger.Info("CEF started."); this.Browser = new ChromiumWebBrowser("about:blank"); @@ -98,7 +103,7 @@ public async Task Initialize() BrowserSettings browserSettings = new() { - WindowlessFrameRate = 60 + WindowlessFrameRate = 60, }; this.Browser.CreateBrowser(windowInfo, browserSettings); this.Initialized = true; @@ -107,6 +112,7 @@ public async Task Initialize() public void Shutdown() { this.ShutdownEvent.Set(); + this.CommandServer.Stop(); } protected virtual void Dispose(bool disposing) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs new file mode 100644 index 000000000..94eee2d3c --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting +{ + public enum RendererCommandType : byte + { + Handshake = 1, + SharedTextureHandle = 2, + WndProcEvent = 3, + MouseEvent = 4, + CursorEvent = 5, + ResizeEvent = 6, + ShutdownEvent = 7, + } + + [StructLayout(LayoutKind.Explicit, Pack = 0)] + public struct RendererCommand + { + public const byte RendererMagic = 0x9F; + + [FieldOffset(0)] public byte Magic; + [FieldOffset(1)] public RendererCommandType Type; + [FieldOffset(6)] public SharedTextureHandleParams SharedTextureParams; + [FieldOffset(6)] public WndProcEvent WndProcMessageEvent; + [FieldOffset(6)] public MouseEventParams MouseEvent; + [FieldOffset(6)] public ResizeParams ResizeEvent; + + public ReadOnlySpan ToBuffer() + { + return StructUtils.ToSpan(this); + } + + public static RendererCommand Handshake() + { + return new() + { + Magic = RendererMagic, + Type = RendererCommandType.Handshake, + }; + } + + private static class StructUtils + { + public static unsafe ReadOnlySpan ToSpan(T value) where T : unmanaged + { + byte* pointer = (byte*)&value; + + Span bytes = new byte[Marshal.SizeOf() + 1]; + for (int i = 0; i < sizeof(T); i++) + { + bytes[i] = pointer[i]; + } + + bytes[bytes.Length - 1] = 0; + return bytes; + } + + public static unsafe T? FromSpan(ReadOnlySpan value) where T : unmanaged + { + if (value.Length != Marshal.SizeOf() + 1) + return null; + + return MemoryMarshal.Cast(value)[0]; + } + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct SharedTextureHandleParams + { + public nint TextureHandle; + } + + [StructLayout(LayoutKind.Sequential)] + public struct WndProcEvent + { + public int Message; + public ulong WParam; + public int LParam; + } + + [StructLayout(LayoutKind.Sequential)] + public struct MouseEventParams + { + public MouseButton MouseDoubleClick; + + public MouseButton MouseDown; + public MouseButton MouseUp; + public ModifierKeys Modifiers; + + public float MouseX; + public float MouseY; + public float WheelX; + public float WheelY; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ResizeParams + { + public int Height; + public int Width; + } + + [Flags] + public enum ModifierKeys : byte + { + None = 0, + Shift = 1 << 0, + Control = 1 << 1, + Alt = 1 << 2 + } + + [Flags] + public enum MouseButton : byte + { + None = 0, + Mouse1 = 1 << 0, + Mouse2 = 1 << 1, + Mouse3 = 1 << 2, + Mouse4 = 1 << 3, + Mouse5 = 1 << 4 + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs new file mode 100644 index 000000000..256c09c62 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections.Generic; +using System.IO.Pipes; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting +{ + internal class RendererCommandServer + { + CancellationTokenSource TokenSource { get; } + + Thread Thread { get; set; } + public RendererCommandServer() + { + this.TokenSource = new CancellationTokenSource(); + } + + public void Activate() + { + this.Thread = new Thread(ServerThread); + this.Thread.Start(this.TokenSource.Token); + } + + public void Stop() + { + this.TokenSource.Cancel(); + } + + public NamedPipeClientStream OpenNew() + { + return new NamedPipeClientStream("Snowflake.Orchestration.Renderer"); + } + + public void ServerThread(object? data) + { + Console.WriteLine("Started IPC server"); + var shutdownEvent = (CancellationToken)data; + var pipeServer = new NamedPipeServerStream("Snowflake.Orchestration.Renderer", + PipeDirection.InOut, 1); + + pipeServer.WaitForConnection(); + Console.WriteLine("Connection Established"); + + pipeServer.Write(RendererCommand.Handshake().ToBuffer()); + + Console.WriteLine("Handshake established."); + + Span readBuffer = stackalloc byte[Marshal.SizeOf()]; + + while (true) + { + if (shutdownEvent.IsCancellationRequested) + break; + int next; + if ((next = pipeServer.ReadByte()) == -1) + break; + byte magic = (byte)next; + if (magic != RendererCommand.RendererMagic) + continue; + if ((next = pipeServer.ReadByte()) == -1) + break; + + RendererCommandType type = (RendererCommandType)next; + + RendererCommand command; + unsafe + { + readBuffer[0] = magic; + readBuffer[1] = (byte)type; + if (pipeServer.Read(readBuffer[2..]) != Marshal.SizeOf() - 2) + continue; + command = MemoryMarshal.Cast(readBuffer)[0]; + } + + switch (command.Type) + { + case RendererCommandType.Handshake: + break; + case RendererCommandType.SharedTextureHandle: + break; + case RendererCommandType.WndProcEvent: + break; + case RendererCommandType.MouseEvent: + break; + case RendererCommandType.CursorEvent: + break; + case RendererCommandType.ResizeEvent: + break; + case RendererCommandType.ShutdownEvent: + break; + } + } + + Console.WriteLine("Connection closed."); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj index 4f733b24b..695b36c66 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -3,6 +3,7 @@ net6.0 <_SnowflakeUseDevelopmentSDK>true win-x64 + true diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index fb2c713cb..9f99bbe73 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -3,6 +3,8 @@ using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks; using System.Reflection; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11; +using System.IO.Pipes; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -27,6 +29,21 @@ private static int Main() Vanara.PInvoke.Kernel32.AllocConsole(); Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); new Direct3D11Hook().Activate(); + var npc = new NamedPipeClientStream("Snowflake.Orchestration.Renderer"); + npc.Connect(); + Span test = new byte[Marshal.SizeOf() + 1]; + Console.WriteLine( npc.Read(test)); + + RendererCommand? command = RendererCommand.FromBuffer(test); + + if (command.HasValue) + { + Console.WriteLine(Enum.GetName(command.Value.Type)); + } + else + { + Console.WriteLine("nope"); + } return 0; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs new file mode 100644 index 000000000..1158d3f98 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render +{ + public enum RendererCommandType : byte + { + Handshake = 1, + SharedTextureHandle = 2, + WndProcEvent = 3, + MouseEvent = 4, + CursorEvent = 5, + ResizeEvent = 6, + ShutdownEvent = 7, + } + + [StructLayout(LayoutKind.Explicit, Pack = 0)] + public struct RendererCommand + { + public const byte RendererMagic = 0x9F; + + [FieldOffset(0)] public byte Magic; + [FieldOffset(1)] public RendererCommandType Type; + [FieldOffset(6)] public SharedTextureHandleParams SharedTextureParams; + [FieldOffset(6)] public WndProcEvent WndProcMessageEvent; + [FieldOffset(6)] public MouseEventParams MouseEvent; + [FieldOffset(6)] public ResizeParams ResizeEvent; + + public ReadOnlySpan ToBuffer() + { + return StructUtils.ToSpan(this); + } + + public static RendererCommand? FromBuffer(ReadOnlySpan value) + { + return StructUtils.FromSpan(value); + } + public static RendererCommand Handshake() + { + return new() + { + Magic = RendererMagic, + Type = RendererCommandType.Handshake, + }; + } + + private static class StructUtils + { + public static unsafe ReadOnlySpan ToSpan(T value) where T : unmanaged + { + byte* pointer = (byte*)&value; + + Span bytes = new byte[Marshal.SizeOf() + 1]; + for (int i = 0; i < sizeof(T); i++) + { + bytes[i] = pointer[i]; + } + + bytes[bytes.Length - 1] = 0; + return bytes; + } + + public static unsafe T? FromSpan(ReadOnlySpan value) where T : unmanaged + { + if (value.Length != Marshal.SizeOf() + 1) + return null; + + return MemoryMarshal.Cast(value)[0]; + } + } + } + + [StructLayout(LayoutKind.Sequential)] + public struct SharedTextureHandleParams + { + public nint TextureHandle; + } + + [StructLayout(LayoutKind.Sequential)] + public struct WndProcEvent + { + public int Message; + public ulong WParam; + public int LParam; + } + + [StructLayout(LayoutKind.Sequential)] + public struct MouseEventParams + { + public MouseButton MouseDoubleClick; + + public MouseButton MouseDown; + public MouseButton MouseUp; + public ModifierKeys Modifiers; + + public float MouseX; + public float MouseY; + public float WheelX; + public float WheelY; + } + + [StructLayout(LayoutKind.Sequential)] + public struct ResizeParams + { + public int Height; + public int Width; + } + + [Flags] + public enum ModifierKeys : byte + { + None = 0, + Shift = 1 << 0, + Control = 1 << 1, + Alt = 1 << 2 + } + + [Flags] + public enum MouseButton : byte + { + None = 0, + Mouse1 = 1 << 0, + Mouse2 = 1 << 1, + Mouse3 = 1 << 2, + Mouse4 = 1 << 3, + Mouse5 = 1 << 4 + } +} From 32187ae53d0f84930c59fcab026d4ba22be41fc0 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 30 Jan 2022 16:40:17 -0500 Subject: [PATCH 07/38] orchestration(GameEmulation): Add GUID as part of the instance properties. --- .../Orchestration/Extensibility/IGameEmulation.cs | 5 +++++ .../Model/Orchestration/GameEmulationType.cs | 3 +++ .../Orchestration/Extensibility/GameEmulation.cs | 3 ++- .../Mutations/Orchestration/OrchestrationMutations.cs | 5 ++--- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Extensibility/IGameEmulation.cs b/src/Snowflake.Framework.Primitives/Orchestration/Extensibility/IGameEmulation.cs index 9fbc6a924..6d6cf5488 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Extensibility/IGameEmulation.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Extensibility/IGameEmulation.cs @@ -16,6 +16,11 @@ namespace Snowflake.Orchestration.Extensibility /// public interface IGameEmulation { + /// + /// A unique ID used to identify this emulation instance. + /// + Guid Guid { get; } + /// /// A list of that representes the input devices that will be used /// in this emulation instance. diff --git a/src/Snowflake.Framework.Remoting.GraphQL/Model/Orchestration/GameEmulationType.cs b/src/Snowflake.Framework.Remoting.GraphQL/Model/Orchestration/GameEmulationType.cs index e0e3d88e7..0df874ed2 100644 --- a/src/Snowflake.Framework.Remoting.GraphQL/Model/Orchestration/GameEmulationType.cs +++ b/src/Snowflake.Framework.Remoting.GraphQL/Model/Orchestration/GameEmulationType.cs @@ -27,6 +27,9 @@ protected override void Configure(IObjectTypeDescriptor descript descriptor.Field(e => e.EmulationState) .Description("The current state of the emulation.") .Type>(); + descriptor.Field(e => e.Guid) + .Description("The GUID of the game emulation instance.") + .Type>(); } } } diff --git a/src/Snowflake.Framework/Orchestration/Extensibility/GameEmulation.cs b/src/Snowflake.Framework/Orchestration/Extensibility/GameEmulation.cs index e67dd5098..d5b8762a2 100644 --- a/src/Snowflake.Framework/Orchestration/Extensibility/GameEmulation.cs +++ b/src/Snowflake.Framework/Orchestration/Extensibility/GameEmulation.cs @@ -16,6 +16,7 @@ namespace Snowflake.Orchestration.Extensibility public abstract class GameEmulation : IAsyncDisposable, IGameEmulation { public IGame Game { get; } + public Guid Guid { get; } public IEnumerable ControllerPorts { get; } @@ -27,6 +28,7 @@ public GameEmulation(IGame game, this.Game = game; this.ControllerPorts = controllerPorts; this.SaveProfile = saveProfile; + this.Guid = Guid.NewGuid(); } public abstract Task SetupEnvironment(); @@ -48,7 +50,6 @@ public GameEmulation(IGame game, private bool IsDisposed { get; set; } = false; public GameEmulationState EmulationState { get; protected set; } = GameEmulationState.RequiresSetupEnvironment; - public async ValueTask DisposeAsync() { if (this.IsDisposed) return; diff --git a/src/Snowflake.Support.GraphQL.FrameworkQueries/Mutations/Orchestration/OrchestrationMutations.cs b/src/Snowflake.Support.GraphQL.FrameworkQueries/Mutations/Orchestration/OrchestrationMutations.cs index 9c541bbe0..29ea7eace 100644 --- a/src/Snowflake.Support.GraphQL.FrameworkQueries/Mutations/Orchestration/OrchestrationMutations.cs +++ b/src/Snowflake.Support.GraphQL.FrameworkQueries/Mutations/Orchestration/OrchestrationMutations.cs @@ -87,12 +87,11 @@ protected override void Configure(IObjectTypeDescriptor descriptor) .Build(); var instance = orchestrator.ProvisionEmulationInstance(game, controllers, input.CollectionID, save); - var guid = Guid.NewGuid(); - if (ctx.GetGameCache().TryAdd(guid, instance)) + if (ctx.GetGameCache().TryAdd(instance.Guid, instance)) return new EmulationInstancePayload() { GameEmulation = instance, - InstanceID = guid + InstanceID = instance.Guid }; return ErrorBuilder.New() .SetCode("ORCH_ERR_CREATE") From 2ed932e83585b12d50e23b15b5aea2270f0f7013 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 30 Jan 2022 18:15:05 -0500 Subject: [PATCH 08/38] overlay(ipc): move to a multi-tab model to allow for instances to have unique browsers --- .../Orchestration/IBrowserTab.cs | 18 +++ .../Orchestration/ICefBrowserService.cs | 7 +- .../{ => Browser}/CefSharpBrowserService.cs | 62 ++++----- .../Browser/CefSharpBrowserTab.cs | 91 +++++++++++++ .../CefRendererComposable.cs | 8 +- .../Remoting/RendererCommand.cs | 128 ------------------ .../Remoting/RendererCommandServer.cs | 91 ++++++++----- ...hestration.Overlay.Renderer.Windows.csproj | 4 + .../EntryPoint.cs | 40 +++++- .../Render/RendererCommand.cs | 41 ++++-- 10 files changed, 270 insertions(+), 220 deletions(-) create mode 100644 src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs rename src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/{ => Browser}/CefSharpBrowserService.cs (77%) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs diff --git a/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs b/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs new file mode 100644 index 000000000..6a0476613 --- /dev/null +++ b/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.IO.Pipes; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Remoting.Orchestration +{ + public interface IBrowserTab : IDisposable + { + public void Navigate(Uri uri); + public Uri? CurrentLocation { get; } + public Task InitializeAsync() => this.InitializeAsync(new Uri("about:blank")); + public Task InitializeAsync(Uri uri); + public NamedPipeClientStream GetCommandPipe(); + } +} diff --git a/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs b/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs index 069c05020..3d47170f2 100644 --- a/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs +++ b/src/Snowflake.Framework.Remoting/Orchestration/ICefBrowserService.cs @@ -10,10 +10,9 @@ namespace Snowflake.Remoting.Orchestration // todo move this to its own thing? public interface ICefBrowserService { - public Task Initialize(); + public Task InitializeAsync(); public void Shutdown(); - public void Browse(Uri uri); - public Uri? CurrentLocation { get; } - public NamedPipeClientStream GetCommandPipe(); + public IBrowserTab GetTab(Guid tabId); + public void FreeTab(Guid tabId); } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs similarity index 77% rename from src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs rename to src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs index 88a4f6fd7..e0d28deaa 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefSharpBrowserService.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs @@ -4,6 +4,7 @@ using Snowflake.Remoting.Orchestration; using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.IO.Pipes; @@ -12,7 +13,7 @@ using System.Threading; using System.Threading.Tasks; -namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser { internal class CefSharpBrowserService : ICefBrowserService, IDisposable { @@ -26,33 +27,21 @@ public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) this.StartEvent = new ManualResetEventSlim(); this.InitializedEvent = new SemaphoreSlim(0, 1); this.CefThread = new Thread(this.MainCefLoop); - this.CommandServer = new RendererCommandServer(); - this.CommandServer.Activate(); - + this.Tabs = new ConcurrentDictionary(); this.CefThread.Start(); } - - public RendererCommandServer CommandServer { get; } public ManualResetEventSlim StartEvent { get; } public SemaphoreSlim InitializedEvent { get; } + public ManualResetEventSlim ShutdownEvent { get; } public Thread CefThread { get; } public ILogger Logger { get; } public DirectoryInfo CacheDirectory { get; } - private ChromiumWebBrowser? Browser { get; set; } = null; - public Uri? CurrentLocation => this.Browser?.Address != null ? new Uri(this.Browser?.Address) : null; - private bool Initialized { get; set; } - public void Browse(Uri uri) - { - if (uri.Equals(this.CurrentLocation)) - { - this.Browser?.Reload(); - return; - } - this.Browser?.Load(uri.AbsoluteUri); - } + public ConcurrentDictionary Tabs; + + private bool Initialized { get; set; } public NamedPipeClientStream GetCommandPipe() { @@ -79,7 +68,6 @@ private void MainCefLoop() settings.EnableAudio(); Cef.Initialize(settings, true, browserProcessHandler: null); this.Logger.Info("CEF started."); - this.Browser = new ChromiumWebBrowser("about:blank"); this.InitializedEvent.Release(); this.ShutdownEvent.Wait(); this.Logger.Info("CEF shutting down..."); @@ -87,32 +75,22 @@ private void MainCefLoop() this.Logger.Info("CEF shut down."); } - public async Task Initialize() + public async Task InitializeAsync() { if (this.Initialized) return; this.StartEvent.Set(); await this.InitializedEvent.WaitAsync(); - WindowInfo windowInfo = new() - { - Width = 100, - Height = 100, - WindowlessRenderingEnabled = true, - }; - windowInfo.SetAsWindowless((nint)0); - - BrowserSettings browserSettings = new() - { - WindowlessFrameRate = 60, - }; - this.Browser.CreateBrowser(windowInfo, browserSettings); this.Initialized = true; } public void Shutdown() { this.ShutdownEvent.Set(); - this.CommandServer.Stop(); + foreach (var tab in this.Tabs) + { + tab.Value.Dispose(); + } } protected virtual void Dispose(bool disposing) @@ -138,5 +116,21 @@ public void Dispose() Dispose(disposing: true); GC.SuppressFinalize(this); } + + public IBrowserTab GetTab(Guid tabId) + { + if (!this.Initialized) + throw new InvalidOperationException("Can not allocate a tab when service was not initialized."); + return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(tabId)); + + } + + public void FreeTab(Guid tabId) + { + if (this.Tabs.Remove(tabId, out var browserTab)) + { + browserTab.Dispose(); + } + } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs new file mode 100644 index 000000000..f21557474 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -0,0 +1,91 @@ +using CefSharp; +using CefSharp.OffScreen; +using Snowflake.Remoting.Orchestration; +using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; +using System; +using System.Collections.Generic; +using System.IO.Pipes; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser +{ + internal class CefSharpBrowserTab : IBrowserTab + { + private bool disposedValue; + + public CefSharpBrowserTab(Guid tabGuid) + { + this.TabGuid = tabGuid; + } + + private ChromiumWebBrowser Browser { get; set; } + + private bool Initialized { get; set; } = false; + public Uri? CurrentLocation => this.Browser?.Address != null ? new Uri(this.Browser?.Address) : null; + + public RendererCommandServer CommandServer { get; private set; } + public Guid TabGuid { get; } + + public NamedPipeClientStream GetCommandPipe() + { + throw new NotImplementedException(); + } + + public async Task InitializeAsync(Uri uri) + { + if (this.Initialized || this.disposedValue) + return; + + this.CommandServer = new RendererCommandServer(this.TabGuid); + this.CommandServer.Activate(); + this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); + WindowInfo windowInfo = new() + { + Width = 100, + Height = 100, + WindowlessRenderingEnabled = true, + }; + windowInfo.SetAsWindowless((nint)0); + + BrowserSettings browserSettings = new() + { + WindowlessFrameRate = 60, + }; + await this.Browser.CreateBrowserAsync(windowInfo, browserSettings); + this.Initialized = true; + } + + public void Navigate(Uri uri) + { + if (uri.Equals(this.CurrentLocation)) + { + this.Browser?.Reload(); + return; + } + + this.Browser?.Load(uri.AbsoluteUri); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + this.Browser.Dispose(); + this.CommandServer.Stop(); + } + disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs index 54129a25d..1feed2664 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs @@ -2,6 +2,8 @@ using Snowflake.Loader; using Snowflake.Remoting.Orchestration; using Snowflake.Services; +using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser; +using System; using System.Threading; using System.Threading.Tasks; @@ -21,8 +23,10 @@ public void Compose(IModule composableModule, Loader.IServiceRepository serviceC var browser = new CefSharpBrowserService(logger.GetLogger("cefsharp"), cachePath); services.RegisterService(browser); Task.Run(async () => { - await browser.Initialize(); - browser.Browse(new System.Uri("https://snowflakepowe.red")); + await browser.InitializeAsync(); + // todo: this should be done by the emulator orchestrator, but for debug purposes we'll do one empty. + var tab = browser.GetTab(Guid.Empty); + await tab.InitializeAsync(); }); } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs deleted file mode 100644 index 94eee2d3c..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommand.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting -{ - public enum RendererCommandType : byte - { - Handshake = 1, - SharedTextureHandle = 2, - WndProcEvent = 3, - MouseEvent = 4, - CursorEvent = 5, - ResizeEvent = 6, - ShutdownEvent = 7, - } - - [StructLayout(LayoutKind.Explicit, Pack = 0)] - public struct RendererCommand - { - public const byte RendererMagic = 0x9F; - - [FieldOffset(0)] public byte Magic; - [FieldOffset(1)] public RendererCommandType Type; - [FieldOffset(6)] public SharedTextureHandleParams SharedTextureParams; - [FieldOffset(6)] public WndProcEvent WndProcMessageEvent; - [FieldOffset(6)] public MouseEventParams MouseEvent; - [FieldOffset(6)] public ResizeParams ResizeEvent; - - public ReadOnlySpan ToBuffer() - { - return StructUtils.ToSpan(this); - } - - public static RendererCommand Handshake() - { - return new() - { - Magic = RendererMagic, - Type = RendererCommandType.Handshake, - }; - } - - private static class StructUtils - { - public static unsafe ReadOnlySpan ToSpan(T value) where T : unmanaged - { - byte* pointer = (byte*)&value; - - Span bytes = new byte[Marshal.SizeOf() + 1]; - for (int i = 0; i < sizeof(T); i++) - { - bytes[i] = pointer[i]; - } - - bytes[bytes.Length - 1] = 0; - return bytes; - } - - public static unsafe T? FromSpan(ReadOnlySpan value) where T : unmanaged - { - if (value.Length != Marshal.SizeOf() + 1) - return null; - - return MemoryMarshal.Cast(value)[0]; - } - } - } - - [StructLayout(LayoutKind.Sequential)] - public struct SharedTextureHandleParams - { - public nint TextureHandle; - } - - [StructLayout(LayoutKind.Sequential)] - public struct WndProcEvent - { - public int Message; - public ulong WParam; - public int LParam; - } - - [StructLayout(LayoutKind.Sequential)] - public struct MouseEventParams - { - public MouseButton MouseDoubleClick; - - public MouseButton MouseDown; - public MouseButton MouseUp; - public ModifierKeys Modifiers; - - public float MouseX; - public float MouseY; - public float WheelX; - public float WheelY; - } - - [StructLayout(LayoutKind.Sequential)] - public struct ResizeParams - { - public int Height; - public int Width; - } - - [Flags] - public enum ModifierKeys : byte - { - None = 0, - Shift = 1 << 0, - Control = 1 << 1, - Alt = 1 << 2 - } - - [Flags] - public enum MouseButton : byte - { - None = 0, - Mouse1 = 1 << 0, - Mouse2 = 1 << 1, - Mouse3 = 1 << 2, - Mouse4 = 1 << 3, - Mouse5 = 1 << 4 - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs index 256c09c62..0713a9e5c 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs @@ -1,4 +1,5 @@ -using System; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using System; using System.Collections.Generic; using System.IO.Pipes; using System.Linq; @@ -14,14 +15,16 @@ internal class RendererCommandServer CancellationTokenSource TokenSource { get; } Thread Thread { get; set; } - public RendererCommandServer() + public Guid TabGuid { get; } + public RendererCommandServer(Guid tabGuid) { this.TokenSource = new CancellationTokenSource(); + this.TabGuid = tabGuid; } public void Activate() { - this.Thread = new Thread(ServerThread); + this.Thread = new Thread(async (data) => await ServerThread((CancellationToken)data)); this.Thread.Start(this.TokenSource.Token); } @@ -32,53 +35,36 @@ public void Stop() public NamedPipeClientStream OpenNew() { - return new NamedPipeClientStream("Snowflake.Orchestration.Renderer"); + return new NamedPipeClientStream("Snowflake.Orchestration.Renderer-"+this.TabGuid.ToString("N")); } - public void ServerThread(object? data) + public async Task ServerWorkThread(NamedPipeServerStream pipeServer, CancellationToken shutdownEvent) { - Console.WriteLine("Started IPC server"); - var shutdownEvent = (CancellationToken)data; - var pipeServer = new NamedPipeServerStream("Snowflake.Orchestration.Renderer", - PipeDirection.InOut, 1); - - pipeServer.WaitForConnection(); - Console.WriteLine("Connection Established"); - - pipeServer.Write(RendererCommand.Handshake().ToBuffer()); - - Console.WriteLine("Handshake established."); - - Span readBuffer = stackalloc byte[Marshal.SizeOf()]; + // todo: handle broken pipe + Memory readBuffer = new byte[Marshal.SizeOf()]; while (true) { if (shutdownEvent.IsCancellationRequested) break; - int next; - if ((next = pipeServer.ReadByte()) == -1) + int bytesRead = await pipeServer.ReadAsync(readBuffer, shutdownEvent); + if (shutdownEvent.IsCancellationRequested) break; - byte magic = (byte)next; - if (magic != RendererCommand.RendererMagic) + if (readBuffer.Span[0] != RendererCommand.RendererMagic || bytesRead != readBuffer.Length) continue; - if ((next = pipeServer.ReadByte()) == -1) - break; + - RendererCommandType type = (RendererCommandType)next; - - RendererCommand command; - unsafe - { - readBuffer[0] = magic; - readBuffer[1] = (byte)type; - if (pipeServer.Read(readBuffer[2..]) != Marshal.SizeOf() - 2) - continue; - command = MemoryMarshal.Cast(readBuffer)[0]; - } + RendererCommand? commandBytes = RendererCommand.FromBuffer(readBuffer); + if (!commandBytes.HasValue) + continue; + var command = commandBytes.Value; switch (command.Type) { case RendererCommandType.Handshake: + Console.WriteLine("send pong handshake of " + command.HandshakeParams.Guid.ToString("N")); + var buffer = command.ToBuffer(); + await pipeServer.WriteAsync(buffer, shutdownEvent); break; case RendererCommandType.SharedTextureHandle: break; @@ -94,8 +80,41 @@ public void ServerThread(object? data) break; } } - + pipeServer.Dispose(); Console.WriteLine("Connection closed."); } + + public async Task ServerThread(CancellationToken shutdownEvent) + { + Console.WriteLine("Started IPC server"); + // todo proper cancellation. + while(!shutdownEvent.IsCancellationRequested) + { + var pipeServer = new NamedPipeServerStream( + "Snowflake.Orchestration.Renderer-" + this.TabGuid.ToString("N"), + PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances); + try + { + await pipeServer.WaitForConnectionAsync(shutdownEvent); + if (shutdownEvent.IsCancellationRequested) + break; + Console.WriteLine("Connection Established"); + await pipeServer.WriteAsync(RendererCommand.Handshake(this.TabGuid).ToBuffer(), shutdownEvent); + if (shutdownEvent.IsCancellationRequested) + break; + Console.WriteLine("Handshake established."); + new Thread(async (data) => + { + (NamedPipeServerStream pipeServer, CancellationToken shutdownEvent) = + ((NamedPipeServerStream, CancellationToken))data; + await this.ServerWorkThread(pipeServer, shutdownEvent); + }).Start((pipeServer, shutdownEvent)); + } + catch + { + continue; + } + } + } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj index 695b36c66..820d9d93a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -9,4 +9,8 @@ + + + + diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 9f99bbe73..9ed03185a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -29,21 +29,53 @@ private static int Main() Vanara.PInvoke.Kernel32.AllocConsole(); Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); new Direct3D11Hook().Activate(); - var npc = new NamedPipeClientStream("Snowflake.Orchestration.Renderer"); + var npc = new NamedPipeClientStream("Snowflake.Orchestration.Renderer-" + Guid.Empty.ToString("N")); npc.Connect(); - Span test = new byte[Marshal.SizeOf() + 1]; - Console.WriteLine( npc.Read(test)); + Memory test = new byte[Marshal.SizeOf()]; + Console.WriteLine(npc.Read(test.Span)); RendererCommand? command = RendererCommand.FromBuffer(test); if (command.HasValue) { - Console.WriteLine(Enum.GetName(command.Value.Type)); + var value = command.Value; + Console.WriteLine(Enum.GetName(value.Type)); + if (command.Value.Type == RendererCommandType.Handshake) + { + Console.WriteLine(value.HandshakeParams.Guid.ToString("N")); + } } else { Console.WriteLine("nope"); } + + var ping = Guid.NewGuid(); + Console.WriteLine("ping " + ping.ToString("N")); + npc.Write(new RendererCommand() + { + Magic = RendererCommand.RendererMagic, + Type = RendererCommandType.Handshake, + HandshakeParams = new() + { + Guid = ping + } + }.ToBuffer().Span); + Console.WriteLine("read ok"); + Console.WriteLine(npc.Read(test.Span)); + RendererCommand? pong = RendererCommand.FromBuffer(test); + if (pong.HasValue) + { + var value = pong.Value; + Console.WriteLine(Enum.GetName(value.Type)); + if (value.Type == RendererCommandType.Handshake) + { + Console.WriteLine(value.HandshakeParams.Guid.ToString("N")); + } + } else + { + Console.WriteLine("what"); + } return 0; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs index 1158d3f98..699efafef 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs @@ -25,55 +25,72 @@ public struct RendererCommand [FieldOffset(0)] public byte Magic; [FieldOffset(1)] public RendererCommandType Type; + [FieldOffset(6)] public HandshakeParams HandshakeParams; [FieldOffset(6)] public SharedTextureHandleParams SharedTextureParams; [FieldOffset(6)] public WndProcEvent WndProcMessageEvent; [FieldOffset(6)] public MouseEventParams MouseEvent; [FieldOffset(6)] public ResizeParams ResizeEvent; - public ReadOnlySpan ToBuffer() + public ReadOnlyMemory ToBuffer() { - return StructUtils.ToSpan(this); + return StructUtils.ToMemory(this); } - public static RendererCommand? FromBuffer(ReadOnlySpan value) + public static RendererCommand? FromBuffer(ReadOnlyMemory buffer) { - return StructUtils.FromSpan(value); + return StructUtils.FromSpan(buffer); } - public static RendererCommand Handshake() + + public static RendererCommand Handshake(Guid id) { return new() { Magic = RendererMagic, Type = RendererCommandType.Handshake, + HandshakeParams = new() + { + Guid = id, + } }; } private static class StructUtils { - public static unsafe ReadOnlySpan ToSpan(T value) where T : unmanaged + public static unsafe ReadOnlyMemory ToMemory(T value) where T : unmanaged { byte* pointer = (byte*)&value; - Span bytes = new byte[Marshal.SizeOf() + 1]; + Memory _bytes = new byte[Marshal.SizeOf()]; + Span bytes = _bytes.Span; + for (int i = 0; i < sizeof(T); i++) { bytes[i] = pointer[i]; } - bytes[bytes.Length - 1] = 0; - return bytes; + return _bytes; } - public static unsafe T? FromSpan(ReadOnlySpan value) where T : unmanaged + public static unsafe T? FromSpan(ReadOnlyMemory value) where T : unmanaged { - if (value.Length != Marshal.SizeOf() + 1) + if (value.Length != Marshal.SizeOf()) + { + Console.WriteLine("Expected size " + Marshal.SizeOf() + " but got " + value.Length); return null; + } - return MemoryMarshal.Cast(value)[0]; + return MemoryMarshal.Cast(value.Span)[0]; } } } + + [StructLayout(LayoutKind.Sequential)] + public struct HandshakeParams + { + public Guid Guid; + } + [StructLayout(LayoutKind.Sequential)] public struct SharedTextureHandleParams { From 2e4f5094d418850c70a71ab60750a679be0e6607 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 30 Jan 2022 21:35:19 -0500 Subject: [PATCH 09/38] overlay(ipc): allow broadcast to all open pipes --- .../Browser/CefSharpBrowserService.cs | 17 +- .../Browser/CefSharpBrowserTab.cs | 20 ++- .../Remoting/RendererCommandServer.cs | 161 +++++++++++++----- ...hestration.Overlay.Renderer.Windows.csproj | 1 + .../EntryPoint.cs | 7 +- .../Render/RendererCommand.cs | 79 +++++++-- 6 files changed, 217 insertions(+), 68 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs index e0d28deaa..6d62334a1 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs @@ -1,5 +1,7 @@ using CefSharp; using CefSharp.OffScreen; +using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; using Snowflake.Extensibility; using Snowflake.Remoting.Orchestration; using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; @@ -18,7 +20,8 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser internal class CefSharpBrowserService : ICefBrowserService, IDisposable { private bool disposedValue; - + private D3D11 Direct3D; + private ID3D11Device Device; public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) { this.Logger = logger; @@ -29,7 +32,15 @@ public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) this.CefThread = new Thread(this.MainCefLoop); this.Tabs = new ConcurrentDictionary(); this.CefThread.Start(); - + this.Direct3D = D3D11.GetApi(); + var fLevel = D3DFeatureLevel.D3DFeatureLevel110; + //this.Direct3D.CreateDevice(null, + // Silk.NET.Core.Native.D3DDriverType.D3DDriverTypeHardware, + // 0, + // CreateDeviceFlag.CreateDeviceBgraSupport | CreateDeviceFlag.CreateDeviceDebug, + // ref fLevel, 1, D3D11.SdkVersion, null, null, null + + // ).; } public ManualResetEventSlim StartEvent { get; } public SemaphoreSlim InitializedEvent { get; } @@ -121,7 +132,7 @@ public IBrowserTab GetTab(Guid tabId) { if (!this.Initialized) throw new InvalidOperationException("Can not allocate a tab when service was not initialized."); - return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(tabId)); + return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(this.Logger, tabId)); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index f21557474..e1e3eec94 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -1,5 +1,6 @@ using CefSharp; using CefSharp.OffScreen; +using Snowflake.Extensibility; using Snowflake.Remoting.Orchestration; using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; using System; @@ -8,6 +9,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Silk.NET.Direct3D11; +using CefSharp.Structs; namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser { @@ -15,19 +18,26 @@ internal class CefSharpBrowserTab : IBrowserTab { private bool disposedValue; - public CefSharpBrowserTab(Guid tabGuid) + public CefSharpBrowserTab(ILogger logger, Guid tabGuid) { + this.Logger = logger; this.TabGuid = tabGuid; } private ChromiumWebBrowser Browser { get; set; } - private bool Initialized { get; set; } = false; public Uri? CurrentLocation => this.Browser?.Address != null ? new Uri(this.Browser?.Address) : null; - public RendererCommandServer CommandServer { get; private set; } + public ILogger Logger { get; } public Guid TabGuid { get; } + + private D3DSharedTextureRenderHandler Renderer { get; } + internal void Resize(Size size, nint handle) + { + + } + public NamedPipeClientStream GetCommandPipe() { throw new NotImplementedException(); @@ -38,9 +48,10 @@ public async Task InitializeAsync(Uri uri) if (this.Initialized || this.disposedValue) return; - this.CommandServer = new RendererCommandServer(this.TabGuid); + this.CommandServer = new RendererCommandServer(this); this.CommandServer.Activate(); this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); + WindowInfo windowInfo = new() { Width = 100, @@ -54,6 +65,7 @@ public async Task InitializeAsync(Uri uri) WindowlessFrameRate = 60, }; await this.Browser.CreateBrowserAsync(windowInfo, browserSettings); + this.Initialized = true; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs index 0713a9e5c..17863befc 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs @@ -1,5 +1,8 @@ -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using Snowflake.Extensibility; +using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.IO.Pipes; using System.Linq; @@ -12,20 +15,25 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting { internal class RendererCommandServer { + public CefSharpBrowserTab Browser { get; } + public ILogger Logger { get; } CancellationTokenSource TokenSource { get; } + + Thread WatchdogThread { get; set; } + ConcurrentQueue OpenPipes { get; set; } - Thread Thread { get; set; } - public Guid TabGuid { get; } - public RendererCommandServer(Guid tabGuid) + public RendererCommandServer(CefSharpBrowserTab browserTab) { - this.TokenSource = new CancellationTokenSource(); - this.TabGuid = tabGuid; + this.Browser = browserTab; + this.Logger = this.Browser.Logger; + this.TokenSource = new(); + this.OpenPipes = new(); } public void Activate() { - this.Thread = new Thread(async (data) => await ServerThread((CancellationToken)data)); - this.Thread.Start(this.TokenSource.Token); + this.WatchdogThread = new Thread(async (data) => await ServerThread((CancellationToken)data)); + this.WatchdogThread.Start(this.TokenSource.Token); } public void Stop() @@ -35,53 +43,107 @@ public void Stop() public NamedPipeClientStream OpenNew() { - return new NamedPipeClientStream("Snowflake.Orchestration.Renderer-"+this.TabGuid.ToString("N")); + return new NamedPipeClientStream("Snowflake.Orchestration.Renderer-"+this.Browser.TabGuid.ToString("N")); } - public async Task ServerWorkThread(NamedPipeServerStream pipeServer, CancellationToken shutdownEvent) + public void Broadcast(RendererCommand command) { - // todo: handle broken pipe + Task.Run(async () => await this.BroadcastAsync(command)).ConfigureAwait(false); + } - Memory readBuffer = new byte[Marshal.SizeOf()]; - while (true) + public async Task BroadcastAsync(RendererCommand command) + { + List tempStreams = new(); + + while (this.OpenPipes.TryDequeue(out var pipe)) { - if (shutdownEvent.IsCancellationRequested) - break; - int bytesRead = await pipeServer.ReadAsync(readBuffer, shutdownEvent); - if (shutdownEvent.IsCancellationRequested) - break; - if (readBuffer.Span[0] != RendererCommand.RendererMagic || bytesRead != readBuffer.Length) - continue; - + if (!pipe.IsConnected) + await pipe.DisposeAsync(); // goodbye pipe + await pipe.WriteAsync(command.ToBuffer(), this.TokenSource.Token); + tempStreams.Add(pipe); + } - RendererCommand? commandBytes = RendererCommand.FromBuffer(readBuffer); - if (!commandBytes.HasValue) - continue; - var command = commandBytes.Value; + // add pipes back to working set. + foreach (var pipe in tempStreams) + { + this.OpenPipes.Enqueue(pipe); + } + } - switch (command.Type) + public async Task ServerWorkThread(NamedPipeServerStream pipeServer, CancellationToken shutdownEvent) + { + // todo: handle broken pipe + Console.WriteLine("in thead"); + Memory readBuffer = new byte[Marshal.SizeOf()]; + try + { + while (!shutdownEvent.IsCancellationRequested && pipeServer.IsConnected) { - case RendererCommandType.Handshake: - Console.WriteLine("send pong handshake of " + command.HandshakeParams.Guid.ToString("N")); - var buffer = command.ToBuffer(); - await pipeServer.WriteAsync(buffer, shutdownEvent); - break; - case RendererCommandType.SharedTextureHandle: - break; - case RendererCommandType.WndProcEvent: - break; - case RendererCommandType.MouseEvent: - break; - case RendererCommandType.CursorEvent: - break; - case RendererCommandType.ResizeEvent: + Console.WriteLine("starting read..."); + int bytesRead = await pipeServer.ReadAsync(readBuffer, shutdownEvent); + if (shutdownEvent.IsCancellationRequested) + { + this.Logger.Info("Cancellation requested."); break; - case RendererCommandType.ShutdownEvent: + } + + if (bytesRead == 0) + { + this.Logger.Info("Pipe closed"); break; + } + if (readBuffer.Span[0] != RendererCommand.RendererMagic) + { + this.Logger.Info("Unexpected magic number: " + readBuffer.Span[0]); + continue; + } + + if (bytesRead != readBuffer.Length) + { + this.Logger.Info($"Unexpected length {bytesRead}, expected {readBuffer.Length}"); + continue; + } + + RendererCommand? commandBytes = RendererCommand.FromBuffer(readBuffer); + if (!commandBytes.HasValue) + { + this.Logger.Info($"Unexpected payload."); + continue; + } + var command = commandBytes.Value; + + switch (command.Type) + { + case RendererCommandType.Handshake: + this.Logger.Info("Got handshake pong command in cmdthread " + this.Browser.TabGuid); + this.Logger.Info("Sending pong with " + command.HandshakeEvent.Guid.ToString("N")); + var buffer = command.ToBuffer(); + await pipeServer.WriteAsync(buffer, shutdownEvent); + break; + case RendererCommandType.ResizeEvent: + break; + case RendererCommandType.WndProcEvent: + break; + case RendererCommandType.MouseEvent: + break; + case RendererCommandType.CursorEvent: + break; + case RendererCommandType.ShutdownEvent: + this.Logger.Info("cmdthread shutdown request for " + this.Browser.TabGuid); + this.TokenSource.Cancel(); + break; + } } + } + catch + { + this.Logger.Info("client pipe broken for " + this.Browser.TabGuid); + } + finally + { + pipeServer.Dispose(); + this.Logger.Info("client connection closed " + this.Browser.TabGuid); } - pipeServer.Dispose(); - Console.WriteLine("Connection closed."); } public async Task ServerThread(CancellationToken shutdownEvent) @@ -91,18 +153,21 @@ public async Task ServerThread(CancellationToken shutdownEvent) while(!shutdownEvent.IsCancellationRequested) { var pipeServer = new NamedPipeServerStream( - "Snowflake.Orchestration.Renderer-" + this.TabGuid.ToString("N"), - PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances); + "Snowflake.Orchestration.Renderer-" + this.Browser.TabGuid.ToString("N"), + PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, + PipeTransmissionMode.Byte, PipeOptions.Asynchronous); try { await pipeServer.WaitForConnectionAsync(shutdownEvent); if (shutdownEvent.IsCancellationRequested) break; Console.WriteLine("Connection Established"); - await pipeServer.WriteAsync(RendererCommand.Handshake(this.TabGuid).ToBuffer(), shutdownEvent); + await pipeServer.WriteAsync(RendererCommand.Handshake(this.Browser.TabGuid).ToBuffer(), shutdownEvent); if (shutdownEvent.IsCancellationRequested) break; Console.WriteLine("Handshake established."); + this.OpenPipes.Enqueue(pipeServer); + // hand off ownership of pipe to handler thread. new Thread(async (data) => { (NamedPipeServerStream pipeServer, CancellationToken shutdownEvent) = @@ -110,8 +175,10 @@ public async Task ServerThread(CancellationToken shutdownEvent) await this.ServerWorkThread(pipeServer, shutdownEvent); }).Start((pipeServer, shutdownEvent)); } - catch + catch(Exception e) { + Console.WriteLine("uhhh shit died."); + Console.WriteLine(e); continue; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj index 820d9d93a..54dcf7e2f 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 9ed03185a..4fc8dc01e 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -42,7 +42,7 @@ private static int Main() Console.WriteLine(Enum.GetName(value.Type)); if (command.Value.Type == RendererCommandType.Handshake) { - Console.WriteLine(value.HandshakeParams.Guid.ToString("N")); + Console.WriteLine(value.HandshakeEvent.Guid.ToString("N")); } } else @@ -56,7 +56,7 @@ private static int Main() { Magic = RendererCommand.RendererMagic, Type = RendererCommandType.Handshake, - HandshakeParams = new() + HandshakeEvent = new() { Guid = ping } @@ -70,12 +70,13 @@ private static int Main() Console.WriteLine(Enum.GetName(value.Type)); if (value.Type == RendererCommandType.Handshake) { - Console.WriteLine(value.HandshakeParams.Guid.ToString("N")); + Console.WriteLine(value.HandshakeEvent.Guid.ToString("N")); } } else { Console.WriteLine("what"); } + return 0; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs index 699efafef..4fb3eb1c1 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs @@ -10,12 +10,11 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render public enum RendererCommandType : byte { Handshake = 1, - SharedTextureHandle = 2, + ResizeEvent = 2, WndProcEvent = 3, MouseEvent = 4, CursorEvent = 5, - ResizeEvent = 6, - ShutdownEvent = 7, + ShutdownEvent = 6, } [StructLayout(LayoutKind.Explicit, Pack = 0)] @@ -25,11 +24,11 @@ public struct RendererCommand [FieldOffset(0)] public byte Magic; [FieldOffset(1)] public RendererCommandType Type; - [FieldOffset(6)] public HandshakeParams HandshakeParams; - [FieldOffset(6)] public SharedTextureHandleParams SharedTextureParams; + [FieldOffset(6)] public HandshakeParams HandshakeEvent; + [FieldOffset(6)] public ResizeParams ResizeEvent; [FieldOffset(6)] public WndProcEvent WndProcMessageEvent; [FieldOffset(6)] public MouseEventParams MouseEvent; - [FieldOffset(6)] public ResizeParams ResizeEvent; + [FieldOffset(6)] public CursorEventParams CursorEvent; public ReadOnlyMemory ToBuffer() { @@ -47,7 +46,7 @@ public static RendererCommand Handshake(Guid id) { Magic = RendererMagic, Type = RendererCommandType.Handshake, - HandshakeParams = new() + HandshakeEvent = new() { Guid = id, } @@ -92,9 +91,11 @@ public struct HandshakeParams } [StructLayout(LayoutKind.Sequential)] - public struct SharedTextureHandleParams + public struct ResizeParams { public nint TextureHandle; + public int Height; + public int Width; } [StructLayout(LayoutKind.Sequential)] @@ -121,10 +122,66 @@ public struct MouseEventParams } [StructLayout(LayoutKind.Sequential)] - public struct ResizeParams + public struct CursorEventParams { - public int Height; - public int Width; + public Cursor Cursor; + } + + /// + /// Cursor types. These are the same as CefSharp cursors + /// + public enum Cursor : byte + { + Pointer = 0, + Cross, + Hand, + IBeam, + Wait, + Help, + EastResize, + NorthResize, + NortheastResize, + NorthwestResize, + SouthResize, + SoutheastResize, + SouthwestResize, + WestResize, + NorthSouthResize, + EastWestResize, + NortheastSouthwestResize, + NorthwestSoutheastResize, + ColumnResize, + RowResize, + MiddlePanning, + EastPanning, + NorthPanning, + NortheastPanning, + NorthwestPanning, + SouthPanning, + SoutheastPanning, + SouthwestPanning, + WestPanning, + Move, + VerticalText, + Cell, + ContextMenu, + Alias, + Progress, + NoDrop, + Copy, + None, + NotAllowed, + ZoomIn, + ZoomOut, + Grab, + Grabbing, + MiddlePanningVertical, + MiddlePanningHorizontal, + Custom, + DndNone, + DndMove, + DndCopy, + DndLink } [Flags] From b744b8a86a2081e51fa9ec06c47e5be754495e65 Mon Sep 17 00:00:00 2001 From: chyyran Date: Mon, 31 Jan 2022 02:24:29 -0500 Subject: [PATCH 10/38] orchestration(ingame): Move renderer IPC into ingame API --- .../Orchestration/Ingame/CursorEventParams.cs | 73 +++++++ .../Orchestration/Ingame/GameWindowCommand.cs | 78 +++++++ .../Ingame/GameWindowCommandType.cs | 19 ++ .../Ingame/HandshakeEventParams.cs | 15 ++ .../Orchestration/Ingame/MouseEventParams.cs | 44 ++++ .../Ingame/OverlayTextureEventParams.cs | 17 ++ .../Ingame/WindowMessageEventParams.cs | 18 ++ .../Ingame/WindowResizeEventParams.cs | 17 ++ .../Snowflake.Framework.Primitives.csproj | 1 + .../Snowflake.Framework.csproj | 1 + .../Browser/CefSharpBrowserService.cs | 13 +- .../Browser/CefSharpBrowserTab.cs | 11 +- ...ndServer.cs => IngameCommandController.cs} | 61 +++--- .../EntryPoint.cs | 17 +- .../Render/RendererCommand.cs | 206 ------------------ 15 files changed, 328 insertions(+), 263 deletions(-) create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommandType.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs create mode 100644 src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs rename src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/{RendererCommandServer.cs => IngameCommandController.cs} (77%) delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs new file mode 100644 index 000000000..f34c2cca5 --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + + [StructLayout(LayoutKind.Sequential)] + public struct CursorEventParams + { + public Cursor Cursor; + } + + /// + /// Cursor types. These are the same as CefSharp cursors + /// + public enum Cursor : byte + { + Pointer = 0, + Cross, + Hand, + IBeam, + Wait, + Help, + EastResize, + NorthResize, + NortheastResize, + NorthwestResize, + SouthResize, + SoutheastResize, + SouthwestResize, + WestResize, + NorthSouthResize, + EastWestResize, + NortheastSouthwestResize, + NorthwestSoutheastResize, + ColumnResize, + RowResize, + MiddlePanning, + EastPanning, + NorthPanning, + NortheastPanning, + NorthwestPanning, + SouthPanning, + SoutheastPanning, + SouthwestPanning, + WestPanning, + Move, + VerticalText, + Cell, + ContextMenu, + Alias, + Progress, + NoDrop, + Copy, + None, + NotAllowed, + ZoomIn, + ZoomOut, + Grab, + Grabbing, + MiddlePanningVertical, + MiddlePanningHorizontal, + Custom, + DndNone, + DndMove, + DndCopy, + DndLink + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs new file mode 100644 index 000000000..9932eea34 --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + + + [StructLayout(LayoutKind.Explicit, Pack = 0)] + public struct GameWindowCommand + { + public const byte GameWindowMagic = 0x9F; + + [FieldOffset(0)] public byte Magic; + [FieldOffset(1)] public GameWindowCommandType Type; + [FieldOffset(6)] public HandshakeEventParams HandshakeEvent; + [FieldOffset(6)] public WindowResizeEventParams ResizeEvent; + [FieldOffset(6)] public WindowMessageEventParams WindowMessageEvent; + [FieldOffset(6)] public MouseEventParams MouseEvent; + [FieldOffset(6)] public CursorEventParams CursorEvent; + [FieldOffset(6)] public OverlayTextureEventParams TextureEvent; + + public ReadOnlyMemory ToBuffer() + { + return StructUtils.ToMemory(this); + } + + public static GameWindowCommand? FromBuffer(ReadOnlyMemory buffer) + { + return StructUtils.FromSpan(buffer); + } + + public static GameWindowCommand Handshake(Guid id) + { + return new() + { + Magic = GameWindowMagic, + Type = GameWindowCommandType.Handshake, + HandshakeEvent = new() + { + Guid = id, + } + }; + } + + private static class StructUtils + { + public static unsafe ReadOnlyMemory ToMemory(T value) where T : unmanaged + { + byte* pointer = (byte*)&value; + + Memory _bytes = new byte[Marshal.SizeOf()]; + Span bytes = _bytes.Span; + + for (int i = 0; i < sizeof(T); i++) + { + bytes[i] = pointer[i]; + } + + return _bytes; + } + + public static unsafe T? FromSpan(ReadOnlyMemory value) where T : unmanaged + { + if (value.Length != Marshal.SizeOf()) + { + Console.WriteLine("Expected size " + Marshal.SizeOf() + " but got " + value.Length); + return null; + } + + return MemoryMarshal.Cast(value.Span)[0]; + } + } + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommandType.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommandType.cs new file mode 100644 index 000000000..59b6ed562 --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommandType.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + public enum GameWindowCommandType : byte + { + Handshake = 1, + WindowResizeEvent = 2, + WindowMessageEvent = 3, + MouseEvent = 4, + CursorEvent = 5, + OverlayTextureEvent = 6, + ShutdownEvent = 7, + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs new file mode 100644 index 000000000..642726b55 --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + [StructLayout(LayoutKind.Sequential)] + public struct HandshakeEventParams + { + public Guid Guid; + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs new file mode 100644 index 000000000..679157f66 --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + [StructLayout(LayoutKind.Sequential)] + public struct MouseEventParams + { + public MouseButton MouseDoubleClick; + + public MouseButton MouseDown; + public MouseButton MouseUp; + public ModifierKeys Modifiers; + + public float MouseX; + public float MouseY; + public float WheelX; + public float WheelY; + } + + [Flags] + public enum ModifierKeys : byte + { + None = 0, + Shift = 1 << 0, + Control = 1 << 1, + Alt = 1 << 2 + } + + [Flags] + public enum MouseButton : byte + { + None = 0, + Mouse1 = 1 << 0, + Mouse2 = 1 << 1, + Mouse3 = 1 << 2, + Mouse4 = 1 << 3, + Mouse5 = 1 << 4 + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs new file mode 100644 index 000000000..e00b1dfaf --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + + [StructLayout(LayoutKind.Sequential)] + public struct OverlayTextureEventParams + { + public nint TextureHandle; + public int SourceProcessId; + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs new file mode 100644 index 000000000..c693c1fc4 --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + + [StructLayout(LayoutKind.Sequential)] + public struct WindowMessageEventParams + { + public int Message; + public ulong WParam; + public int LParam; + } +} diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs new file mode 100644 index 000000000..50d22445b --- /dev/null +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Orchestration.Ingame +{ + + [StructLayout(LayoutKind.Sequential)] + public struct WindowResizeEventParams + { + public int Height; + public int Width; + } +} diff --git a/src/Snowflake.Framework.Primitives/Snowflake.Framework.Primitives.csproj b/src/Snowflake.Framework.Primitives/Snowflake.Framework.Primitives.csproj index 0137c0f63..bbf863052 100644 --- a/src/Snowflake.Framework.Primitives/Snowflake.Framework.Primitives.csproj +++ b/src/Snowflake.Framework.Primitives/Snowflake.Framework.Primitives.csproj @@ -6,6 +6,7 @@ 10.0 enable <_SnowflakeUseDevelopmentSDK>true + true diff --git a/src/Snowflake.Framework/Snowflake.Framework.csproj b/src/Snowflake.Framework/Snowflake.Framework.csproj index 083b74c62..6552fc5a8 100644 --- a/src/Snowflake.Framework/Snowflake.Framework.csproj +++ b/src/Snowflake.Framework/Snowflake.Framework.csproj @@ -7,6 +7,7 @@ 10.0 enable <_SnowflakeUseDevelopmentSDK>true + true diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs index 6d62334a1..8aeb95777 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs @@ -20,8 +20,7 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser internal class CefSharpBrowserService : ICefBrowserService, IDisposable { private bool disposedValue; - private D3D11 Direct3D; - private ID3D11Device Device; + public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) { this.Logger = logger; @@ -32,16 +31,8 @@ public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) this.CefThread = new Thread(this.MainCefLoop); this.Tabs = new ConcurrentDictionary(); this.CefThread.Start(); - this.Direct3D = D3D11.GetApi(); - var fLevel = D3DFeatureLevel.D3DFeatureLevel110; - //this.Direct3D.CreateDevice(null, - // Silk.NET.Core.Native.D3DDriverType.D3DDriverTypeHardware, - // 0, - // CreateDeviceFlag.CreateDeviceBgraSupport | CreateDeviceFlag.CreateDeviceDebug, - // ref fLevel, 1, D3D11.SdkVersion, null, null, null - - // ).; } + public ManualResetEventSlim StartEvent { get; } public SemaphoreSlim InitializedEvent { get; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index e1e3eec94..e8ca5afb3 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -27,16 +27,11 @@ public CefSharpBrowserTab(ILogger logger, Guid tabGuid) private ChromiumWebBrowser Browser { get; set; } private bool Initialized { get; set; } = false; public Uri? CurrentLocation => this.Browser?.Address != null ? new Uri(this.Browser?.Address) : null; - public RendererCommandServer CommandServer { get; private set; } + public IngameCommandController CommandServer { get; private set; } public ILogger Logger { get; } public Guid TabGuid { get; } - - private D3DSharedTextureRenderHandler Renderer { get; } - internal void Resize(Size size, nint handle) - { - - } + public NamedPipeClientStream GetCommandPipe() { @@ -48,7 +43,7 @@ public async Task InitializeAsync(Uri uri) if (this.Initialized || this.disposedValue) return; - this.CommandServer = new RendererCommandServer(this); + this.CommandServer = new IngameCommandController(this.Logger, this.TabGuid); this.CommandServer.Activate(); this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs similarity index 77% rename from src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs rename to src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs index 17863befc..1ca43baa4 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/RendererCommandServer.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs @@ -1,4 +1,5 @@ using Snowflake.Extensibility; +using Snowflake.Orchestration.Ingame; using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using System; @@ -13,19 +14,21 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting { - internal class RendererCommandServer + internal class IngameCommandController { - public CefSharpBrowserTab Browser { get; } - public ILogger Logger { get; } + private ILogger Logger { get; } CancellationTokenSource TokenSource { get; } - Thread WatchdogThread { get; set; } ConcurrentQueue OpenPipes { get; set; } - public RendererCommandServer(CefSharpBrowserTab browserTab) + public delegate void IngameCommandHandler(GameWindowCommand command); + public event IngameCommandHandler CommandReceived; + + private Guid InstanceGuid { get; } + public IngameCommandController(ILogger logger, Guid instanceGuid) { - this.Browser = browserTab; - this.Logger = this.Browser.Logger; + this.InstanceGuid = instanceGuid; + this.Logger = logger; this.TokenSource = new(); this.OpenPipes = new(); } @@ -43,15 +46,15 @@ public void Stop() public NamedPipeClientStream OpenNew() { - return new NamedPipeClientStream("Snowflake.Orchestration.Renderer-"+this.Browser.TabGuid.ToString("N")); + return new NamedPipeClientStream("Snowflake.Orchestration.Renderer-"+this.InstanceGuid.ToString("N")); } - public void Broadcast(RendererCommand command) + public void Broadcast(GameWindowCommand command) { Task.Run(async () => await this.BroadcastAsync(command)).ConfigureAwait(false); } - public async Task BroadcastAsync(RendererCommand command) + public async Task BroadcastAsync(GameWindowCommand command) { List tempStreams = new(); @@ -74,7 +77,7 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio { // todo: handle broken pipe Console.WriteLine("in thead"); - Memory readBuffer = new byte[Marshal.SizeOf()]; + Memory readBuffer = new byte[Marshal.SizeOf()]; try { while (!shutdownEvent.IsCancellationRequested && pipeServer.IsConnected) @@ -92,7 +95,7 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio this.Logger.Info("Pipe closed"); break; } - if (readBuffer.Span[0] != RendererCommand.RendererMagic) + if (readBuffer.Span[0] != GameWindowCommand.GameWindowMagic) { this.Logger.Info("Unexpected magic number: " + readBuffer.Span[0]); continue; @@ -104,7 +107,7 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio continue; } - RendererCommand? commandBytes = RendererCommand.FromBuffer(readBuffer); + GameWindowCommand? commandBytes = GameWindowCommand.FromBuffer(readBuffer); if (!commandBytes.HasValue) { this.Logger.Info($"Unexpected payload."); @@ -114,35 +117,34 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio switch (command.Type) { - case RendererCommandType.Handshake: - this.Logger.Info("Got handshake pong command in cmdthread " + this.Browser.TabGuid); + case GameWindowCommandType.Handshake: + this.Logger.Info("Got handshake pong command in cmdthread " + this.InstanceGuid); this.Logger.Info("Sending pong with " + command.HandshakeEvent.Guid.ToString("N")); var buffer = command.ToBuffer(); await pipeServer.WriteAsync(buffer, shutdownEvent); break; - case RendererCommandType.ResizeEvent: - break; - case RendererCommandType.WndProcEvent: - break; - case RendererCommandType.MouseEvent: - break; - case RendererCommandType.CursorEvent: - break; - case RendererCommandType.ShutdownEvent: - this.Logger.Info("cmdthread shutdown request for " + this.Browser.TabGuid); + case GameWindowCommandType.ShutdownEvent: + this.Logger.Info("cmdthread shutdown request for " + this.InstanceGuid); this.TokenSource.Cancel(); break; + case GameWindowCommandType.WindowResizeEvent: + case GameWindowCommandType.WindowMessageEvent: + case GameWindowCommandType.OverlayTextureEvent: + case GameWindowCommandType.MouseEvent: + case GameWindowCommandType.CursorEvent: + this.CommandReceived?.Invoke(command); + break; } } } catch { - this.Logger.Info("client pipe broken for " + this.Browser.TabGuid); + this.Logger.Info("client pipe broken for " + this.InstanceGuid); } finally { pipeServer.Dispose(); - this.Logger.Info("client connection closed " + this.Browser.TabGuid); + this.Logger.Info("client connection closed " + this.InstanceGuid); } } @@ -153,7 +155,7 @@ public async Task ServerThread(CancellationToken shutdownEvent) while(!shutdownEvent.IsCancellationRequested) { var pipeServer = new NamedPipeServerStream( - "Snowflake.Orchestration.Renderer-" + this.Browser.TabGuid.ToString("N"), + "Snowflake.Orchestration.Renderer-" + this.InstanceGuid.ToString("N"), PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances, PipeTransmissionMode.Byte, PipeOptions.Asynchronous); try @@ -162,7 +164,7 @@ public async Task ServerThread(CancellationToken shutdownEvent) if (shutdownEvent.IsCancellationRequested) break; Console.WriteLine("Connection Established"); - await pipeServer.WriteAsync(RendererCommand.Handshake(this.Browser.TabGuid).ToBuffer(), shutdownEvent); + await pipeServer.WriteAsync(GameWindowCommand.Handshake(this.InstanceGuid).ToBuffer(), shutdownEvent); if (shutdownEvent.IsCancellationRequested) break; Console.WriteLine("Handshake established."); @@ -177,7 +179,6 @@ public async Task ServerThread(CancellationToken shutdownEvent) } catch(Exception e) { - Console.WriteLine("uhhh shit died."); Console.WriteLine(e); continue; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 4fc8dc01e..6b7dbdcf6 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -5,6 +5,7 @@ using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11; using System.IO.Pipes; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using Snowflake.Orchestration.Ingame; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -31,16 +32,16 @@ private static int Main() new Direct3D11Hook().Activate(); var npc = new NamedPipeClientStream("Snowflake.Orchestration.Renderer-" + Guid.Empty.ToString("N")); npc.Connect(); - Memory test = new byte[Marshal.SizeOf()]; + Memory test = new byte[Marshal.SizeOf()]; Console.WriteLine(npc.Read(test.Span)); - RendererCommand? command = RendererCommand.FromBuffer(test); + GameWindowCommand? command = GameWindowCommand.FromBuffer(test); if (command.HasValue) { var value = command.Value; Console.WriteLine(Enum.GetName(value.Type)); - if (command.Value.Type == RendererCommandType.Handshake) + if (command.Value.Type == GameWindowCommandType.Handshake) { Console.WriteLine(value.HandshakeEvent.Guid.ToString("N")); } @@ -52,10 +53,10 @@ private static int Main() var ping = Guid.NewGuid(); Console.WriteLine("ping " + ping.ToString("N")); - npc.Write(new RendererCommand() + npc.Write(new GameWindowCommand() { - Magic = RendererCommand.RendererMagic, - Type = RendererCommandType.Handshake, + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.Handshake, HandshakeEvent = new() { Guid = ping @@ -63,12 +64,12 @@ private static int Main() }.ToBuffer().Span); Console.WriteLine("read ok"); Console.WriteLine(npc.Read(test.Span)); - RendererCommand? pong = RendererCommand.FromBuffer(test); + GameWindowCommand? pong = GameWindowCommand.FromBuffer(test); if (pong.HasValue) { var value = pong.Value; Console.WriteLine(Enum.GetName(value.Type)); - if (value.Type == RendererCommandType.Handshake) + if (value.Type == GameWindowCommandType.Handshake) { Console.WriteLine(value.HandshakeEvent.Guid.ToString("N")); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs deleted file mode 100644 index 4fb3eb1c1..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/RendererCommand.cs +++ /dev/null @@ -1,206 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render -{ - public enum RendererCommandType : byte - { - Handshake = 1, - ResizeEvent = 2, - WndProcEvent = 3, - MouseEvent = 4, - CursorEvent = 5, - ShutdownEvent = 6, - } - - [StructLayout(LayoutKind.Explicit, Pack = 0)] - public struct RendererCommand - { - public const byte RendererMagic = 0x9F; - - [FieldOffset(0)] public byte Magic; - [FieldOffset(1)] public RendererCommandType Type; - [FieldOffset(6)] public HandshakeParams HandshakeEvent; - [FieldOffset(6)] public ResizeParams ResizeEvent; - [FieldOffset(6)] public WndProcEvent WndProcMessageEvent; - [FieldOffset(6)] public MouseEventParams MouseEvent; - [FieldOffset(6)] public CursorEventParams CursorEvent; - - public ReadOnlyMemory ToBuffer() - { - return StructUtils.ToMemory(this); - } - - public static RendererCommand? FromBuffer(ReadOnlyMemory buffer) - { - return StructUtils.FromSpan(buffer); - } - - public static RendererCommand Handshake(Guid id) - { - return new() - { - Magic = RendererMagic, - Type = RendererCommandType.Handshake, - HandshakeEvent = new() - { - Guid = id, - } - }; - } - - private static class StructUtils - { - public static unsafe ReadOnlyMemory ToMemory(T value) where T : unmanaged - { - byte* pointer = (byte*)&value; - - Memory _bytes = new byte[Marshal.SizeOf()]; - Span bytes = _bytes.Span; - - for (int i = 0; i < sizeof(T); i++) - { - bytes[i] = pointer[i]; - } - - return _bytes; - } - - public static unsafe T? FromSpan(ReadOnlyMemory value) where T : unmanaged - { - if (value.Length != Marshal.SizeOf()) - { - Console.WriteLine("Expected size " + Marshal.SizeOf() + " but got " + value.Length); - return null; - } - - return MemoryMarshal.Cast(value.Span)[0]; - } - } - } - - - [StructLayout(LayoutKind.Sequential)] - public struct HandshakeParams - { - public Guid Guid; - } - - [StructLayout(LayoutKind.Sequential)] - public struct ResizeParams - { - public nint TextureHandle; - public int Height; - public int Width; - } - - [StructLayout(LayoutKind.Sequential)] - public struct WndProcEvent - { - public int Message; - public ulong WParam; - public int LParam; - } - - [StructLayout(LayoutKind.Sequential)] - public struct MouseEventParams - { - public MouseButton MouseDoubleClick; - - public MouseButton MouseDown; - public MouseButton MouseUp; - public ModifierKeys Modifiers; - - public float MouseX; - public float MouseY; - public float WheelX; - public float WheelY; - } - - [StructLayout(LayoutKind.Sequential)] - public struct CursorEventParams - { - public Cursor Cursor; - } - - /// - /// Cursor types. These are the same as CefSharp cursors - /// - public enum Cursor : byte - { - Pointer = 0, - Cross, - Hand, - IBeam, - Wait, - Help, - EastResize, - NorthResize, - NortheastResize, - NorthwestResize, - SouthResize, - SoutheastResize, - SouthwestResize, - WestResize, - NorthSouthResize, - EastWestResize, - NortheastSouthwestResize, - NorthwestSoutheastResize, - ColumnResize, - RowResize, - MiddlePanning, - EastPanning, - NorthPanning, - NortheastPanning, - NorthwestPanning, - SouthPanning, - SoutheastPanning, - SouthwestPanning, - WestPanning, - Move, - VerticalText, - Cell, - ContextMenu, - Alias, - Progress, - NoDrop, - Copy, - None, - NotAllowed, - ZoomIn, - ZoomOut, - Grab, - Grabbing, - MiddlePanningVertical, - MiddlePanningHorizontal, - Custom, - DndNone, - DndMove, - DndCopy, - DndLink - } - - [Flags] - public enum ModifierKeys : byte - { - None = 0, - Shift = 1 << 0, - Control = 1 << 1, - Alt = 1 << 2 - } - - [Flags] - public enum MouseButton : byte - { - None = 0, - Mouse1 = 1 << 0, - Mouse2 = 1 << 1, - Mouse3 = 1 << 2, - Mouse4 = 1 << 3, - Mouse5 = 1 << 4 - } -} From 93c4b44879ace5c1b596748ac5e65d48db10771e Mon Sep 17 00:00:00 2001 From: chyyran Date: Tue, 1 Feb 2022 01:28:55 -0500 Subject: [PATCH 11/38] overlay(render): finish dx11 drawing of texture --- .../Orchestration/IBrowserTab.cs | 2 +- .../Browser/CefSharpBrowserService.cs | 4 +- .../Browser/CefSharpBrowserTab.cs | 19 +- .../Browser/D3DSharedTextureRenderHandler.cs | 287 ++++++++++++++++++ .../Browser/Direct3DDevice.cs | 118 +++++++ .../Remoting/IngameCommandController.cs | 8 +- ...chestration.Overlay.Runtime.Windows.csproj | 3 + 7 files changed, 430 insertions(+), 11 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs diff --git a/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs b/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs index 6a0476613..5ceeb68df 100644 --- a/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs +++ b/src/Snowflake.Framework.Remoting/Orchestration/IBrowserTab.cs @@ -11,7 +11,7 @@ public interface IBrowserTab : IDisposable { public void Navigate(Uri uri); public Uri? CurrentLocation { get; } - public Task InitializeAsync() => this.InitializeAsync(new Uri("about:blank")); + public Task InitializeAsync() => this.InitializeAsync(new Uri("https://google.com")); public Task InitializeAsync(Uri uri); public NamedPipeClientStream GetCommandPipe(); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs index 8aeb95777..07706d525 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs @@ -31,8 +31,10 @@ public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) this.CefThread = new Thread(this.MainCefLoop); this.Tabs = new ConcurrentDictionary(); this.CefThread.Start(); + this.Device = new Direct3DDevice(); } + public Direct3DDevice Device { get; } public ManualResetEventSlim StartEvent { get; } public SemaphoreSlim InitializedEvent { get; } @@ -123,7 +125,7 @@ public IBrowserTab GetTab(Guid tabId) { if (!this.Initialized) throw new InvalidOperationException("Can not allocate a tab when service was not initialized."); - return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(this.Logger, tabId)); + return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(this.Logger, tabId, this.Device)); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index e8ca5afb3..352674592 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -18,10 +18,11 @@ internal class CefSharpBrowserTab : IBrowserTab { private bool disposedValue; - public CefSharpBrowserTab(ILogger logger, Guid tabGuid) + public CefSharpBrowserTab(ILogger logger, Guid tabGuid, Direct3DDevice device) { this.Logger = logger; this.TabGuid = tabGuid; + this.Device = device; } private ChromiumWebBrowser Browser { get; set; } @@ -30,8 +31,8 @@ public CefSharpBrowserTab(ILogger logger, Guid tabGuid) public IngameCommandController CommandServer { get; private set; } public ILogger Logger { get; } public Guid TabGuid { get; } - private D3DSharedTextureRenderHandler Renderer { get; } - + public Direct3DDevice Device { get; } + private D3DSharedTextureRenderHandler Renderer { get; set; } public NamedPipeClientStream GetCommandPipe() { @@ -45,12 +46,16 @@ public async Task InitializeAsync(Uri uri) this.CommandServer = new IngameCommandController(this.Logger, this.TabGuid); this.CommandServer.Activate(); + this.Renderer = new D3DSharedTextureRenderHandler(this.Device, this.CommandServer); + this.Renderer.Resize(new(300, 300)); this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); - + + this.Browser.RenderHandler = this.Renderer; + WindowInfo windowInfo = new() { - Width = 100, - Height = 100, + Width = 300, + Height = 300, WindowlessRenderingEnabled = true, }; windowInfo.SetAsWindowless((nint)0); @@ -60,6 +65,8 @@ public async Task InitializeAsync(Uri uri) WindowlessFrameRate = 60, }; await this.Browser.CreateBrowserAsync(windowInfo, browserSettings); + await this.Browser.WaitForInitialLoadAsync(); + this.Browser.Size = new(300, 300); this.Initialized = true; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs new file mode 100644 index 000000000..cf23f1370 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -0,0 +1,287 @@ +using CefSharp; +using CefSharp.Enums; +using CefSharp.OffScreen; +using CefSharp.Structs; +using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; +using Silk.NET.DXGI; +using Snowflake.Orchestration.Ingame; +using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser; +using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.ConstrainedExecution; +using System.Runtime.InteropServices; +using System.Security; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows +{ + internal class D3DSharedTextureRenderHandler : IRenderHandler + { + [DllImport("user32.dll")] + private static extern nint MonitorFromWindow(nint hwnd, uint dwFlags); + [DllImport("shcore.dll")] + private static extern void GetScaleFactorForMonitor(nint hMon, out uint pScale); + + [DllImport("kernel32.dll", SetLastError = true)] + [SuppressUnmanagedCodeSecurity] + private static extern bool CloseHandle(IntPtr hObject); + + // Texture paint stuff. + private ConcurrentQueue<(nint texturePointer, nint sharedHandle)> ObsoleteResources { get; } + + private unsafe ID3D11Texture2D* TargetTexture; + + private Texture2DDesc TargetTextureDescription; + public nint SharedTextureHandle { get; set; } + + // D3D device is plugin-wide. + private Direct3DDevice Device { get; } + private float DpiScaleFactor { get; } + private readonly object TextureLock = new(); + + // CEF buffers are 32-bit BGRA + private const byte CEFBufferBPP = 4; + private const uint INFINITE = 0xFFFFFFFF; + + // Command server to notify ppl + private IngameCommandController CommandServer { get; } + + public unsafe D3DSharedTextureRenderHandler(Direct3DDevice device, IngameCommandController commandServer) + { + this.CommandServer = commandServer; + this.ObsoleteResources = new ConcurrentQueue<(nint texturePointer, nint sharedHandle)>(); + // Todo: ask ingame for scale monitor handle. + nint hMon = MonitorFromWindow(0, 0x1); + GetScaleFactorForMonitor(hMon, out uint scale); + this.DpiScaleFactor = scale / 100f; + this.Device = device; + } + + public ScreenInfo? GetScreenInfo() + { + return new() + { + DeviceScaleFactor = this.DpiScaleFactor + }; + } + + public bool GetScreenPoint(int viewX, int viewY, out int screenX, out int screenY) + { + screenX = viewX; + screenY = viewY; + + return false; + } + + public void Resize(Size size) + { + Console.WriteLine("Resize buffer requested"); + nint texPtr = this.Device.CreateNewCefTargetTexture(size); + unsafe + { + // Released when disposed in OnPaint. + ID3D11Texture2D* texture = (ID3D11Texture2D*)texPtr; + + // released on resize. + IDXGIResource1* texResrc = null; + lock (this.TextureLock) + { + nint oldTexture = (nint)this.TargetTexture; + nint oldHandle = this.SharedTextureHandle; + + Guid resourceId = IDXGIResource1.Guid; + texture->QueryInterface(&resourceId, (void**)&texResrc); + + int res; + void* handle = null; + if ((res = texResrc->CreateSharedHandle(null, unchecked((uint)0x80000000ul), (char*)null, &handle)) != 0) + { + throw new InvalidOperationException($"Unable to update shared handled: {res}"); + } + + texture->GetDesc(ref this.TargetTextureDescription); + this.SharedTextureHandle = (nint)handle; + this.TargetTexture = texture; + this.ObsoleteResources.Enqueue((oldTexture, oldHandle)); + + // release resource + texResrc->Release(); + Console.WriteLine("updated buffer"); + } + } + + // Broadcast to all listeners to update their texture handle. + this.CommandServer.Broadcast(new() + { + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.OverlayTextureEvent, + TextureEvent = new() + { + TextureHandle = this.SharedTextureHandle, + SourceProcessId = Environment.ProcessId + } + }); + } + + public Rect GetViewRect() + { + // thanks browsingway. + static Rect DpiScaleRect(Rect rect, float scaleFactor) + { + return new Rect(rect.X, rect.Y, (int)Math.Ceiling(rect.Width * (1 / scaleFactor)), + (int)Math.Ceiling(rect.Height * (1 / scaleFactor))); + } + + // todo: scale dpi + return DpiScaleRect(new(0, 0, (int)this.TargetTextureDescription.Width, + (int)this.TargetTextureDescription.Height), this.DpiScaleFactor); + } + + public void OnCursorChange(IntPtr cursor, CursorType type, CursorInfo customCursorInfo) + { + this.CommandServer.Broadcast(new() + { + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.CursorEvent, + CursorEvent = new() { Cursor = (Cursor)(byte)type, } + }); + } + + public void OnPaint(PaintElementType type, Rect dirtyRect, IntPtr buffer, int width, int height) + { + // Don't care about popups. + if (type != PaintElementType.View) + return; + lock(this.TextureLock) + { + unsafe + { + // not initialized. + if (this.TargetTexture == null) + return; + } + + // thanks browsingway + int rowPitch = width * CEFBufferBPP; + int depthPitch = rowPitch * height; + + var texDesc = this.TargetTextureDescription; + Box destRegion = new() + { + Top = Math.Min(unchecked((uint)dirtyRect.Y), texDesc.Height), + Bottom = Math.Min(unchecked((uint)dirtyRect.Y) + unchecked((uint)dirtyRect.Height), texDesc.Height), + Left = Math.Min(unchecked((uint)dirtyRect.X), texDesc.Width), + Right = Math.Min(unchecked((uint)dirtyRect.X) + unchecked((uint)dirtyRect.Width), texDesc.Width), + Front = 0, + Back = 1 + }; + + unsafe + { + nint sourcePtr = buffer + (dirtyRect.X * CEFBufferBPP) + (dirtyRect.Y * rowPitch); + + ID3D11Device* device = null; + ID3D11DeviceContext* context = null; + ID3D11Resource* textureResc = null; + // this is going to be a pain isnt it. + IDXGIKeyedMutex* textureMtx = null; + + Guid resourceId = ID3D11Resource.Guid; + Guid mutexId = IDXGIKeyedMutex.Guid; + this.TargetTexture->QueryInterface(&resourceId, (void**)&textureResc); + this.TargetTexture->QueryInterface(&mutexId, (void**)&textureMtx); + + this.TargetTexture->GetDevice(ref device); + device->GetImmediateContext(ref context); + + textureMtx->AcquireSync(0, INFINITE); // infinite + context->UpdateSubresource(textureResc, 0, ref destRegion, (void*)sourcePtr, (uint)rowPitch, (uint)depthPitch); + context->Flush(); + textureMtx->ReleaseSync(0); + + + // ensure we release all local COM pointers here. + // really wish C# had traits + textureResc->Release(); + textureMtx->Release(); + context->Release(); + device->Release(); + } + + // cleanup.. + while (this.ObsoleteResources.TryDequeue(out (nint texturePointer, nint sharedHandle) texture)) + { + unsafe + { + // Honestly should check error but if this fails we just leak it. + // Expectation is that Resize is always client-side triggered anyways, + // so if their handle is properly duped this doesn't matter. + CloseHandle(texture.sharedHandle); + + // Texture will _actually_ be freeded when all clients acually let go of it. + if (texture.texturePointer != 0) + ((ID3D11Texture2D*)texture.texturePointer)->Release(); + } + } + } + } + + public void Dispose() + { + // todo... + + return; + } + + #region Not Supported + public void OnAcceleratedPaint(PaintElementType type, Rect dirtyRect, IntPtr sharedHandle) + { + // Not supported. + return; + } + + public void OnImeCompositionRangeChanged(CefSharp.Structs.Range selectedRange, Rect[] characterBounds) + { + // Not supported. + return; + } + + + public void OnPopupShow(bool show) + { + // Not supported. + return; + } + + public void OnPopupSize(Rect rect) + { + // Not supported. + return; + } + + public void OnVirtualKeyboardRequested(IBrowser browser, TextInputMode inputMode) + { + // Not supported. + return; + } + + public bool StartDragging(IDragData dragData, DragOperationsMask mask, int x, int y) + { + // not supported. + return false; + } + + public void UpdateDragCursor(DragOperationsMask operation) + { + return; + } + #endregion + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs new file mode 100644 index 000000000..c085cecff --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs @@ -0,0 +1,118 @@ +using CefSharp.Structs; +using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser +{ + internal class Direct3DDevice : IDisposable + { + private D3D11 Direct3D; + private unsafe ID3D11Device* RenderDevice; + private unsafe ID3D11DeviceContext* RenderContext; + private bool disposedValue; + private static readonly D3DFeatureLevel[] FEATURE_LEVELS = new[] { D3DFeatureLevel.D3DFeatureLevel111 }; + + public Direct3DDevice() + { + this.Direct3D = D3D11.GetApi(); + unsafe + { + Span requestFeatureLevels = FEATURE_LEVELS.AsSpan(); + D3DFeatureLevel outFeatureLevel = 0; + + // Released on dispose. + ID3D11Device* device = null; + ID3D11DeviceContext* context = null; + + int? result = 0; + fixed (D3DFeatureLevel* featureLevels = requestFeatureLevels) + { + result = Direct3D.CreateDevice( + null, + D3DDriverType.D3DDriverTypeHardware, + 0, + (uint)(CreateDeviceFlag.CreateDeviceBgraSupport|CreateDeviceFlag.CreateDeviceDebug), + featureLevels, + (uint)requestFeatureLevels.Length, + D3D11.SdkVersion, + ref device, + ref outFeatureLevel, + ref context + ); + } + + if (result == null || result.Value < 0) + { + throw new PlatformNotSupportedException("Direct3D11 not supported."); + } + + this.RenderDevice = device; + this.RenderContext = context; + } + } + + /// + /// Creates a target texture to paint CEF with the given size. + /// + /// + /// + /// + public nint CreateNewCefTargetTexture(Size size) + { + Texture2DDesc texture2DDesc = new() + { + Width = (uint)size.Width, + Height = (uint)size.Height, + MipLevels = 1, + ArraySize = 1, + Format = Silk.NET.DXGI.Format.FormatB8G8R8A8Unorm, + SampleDesc = new(1,0), + Usage = Usage.UsageDefault, + BindFlags = (uint)(BindFlag.BindShaderResource), + // needs NT Handle for DX12/OGL/vK interop + MiscFlags = (uint)(ResourceMiscFlag.ResourceMiscSharedNthandle | ResourceMiscFlag.ResourceMiscSharedKeyedmutex), + CPUAccessFlags = 0, + }; + + unsafe + { + ID3D11Texture2D* texture = null; + int result = 0; + if ((result = this.RenderDevice->CreateTexture2D(ref texture2DDesc, null, ref texture)) != 0) + { + throw new InvalidOperationException($"Failed to create D3D11 Texture: {result}"); + } + return (nint)texture; + } + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + unsafe + { + this.RenderDevice->Release(); + this.RenderContext->Release(); + } + } + disposedValue = true; + } + } + + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs index 1ca43baa4..38754da0a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs @@ -150,7 +150,7 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio public async Task ServerThread(CancellationToken shutdownEvent) { - Console.WriteLine("Started IPC server"); + this.Logger.Info("Started ingame overlay IPC server."); // todo proper cancellation. while(!shutdownEvent.IsCancellationRequested) { @@ -163,12 +163,13 @@ public async Task ServerThread(CancellationToken shutdownEvent) await pipeServer.WaitForConnectionAsync(shutdownEvent); if (shutdownEvent.IsCancellationRequested) break; - Console.WriteLine("Connection Established"); + this.Logger.Info("Connection established to new client"); await pipeServer.WriteAsync(GameWindowCommand.Handshake(this.InstanceGuid).ToBuffer(), shutdownEvent); if (shutdownEvent.IsCancellationRequested) break; - Console.WriteLine("Handshake established."); + this.Logger.Info("Handshake sent to client, shunting to handler thread."); this.OpenPipes.Enqueue(pipeServer); + // hand off ownership of pipe to handler thread. new Thread(async (data) => { @@ -177,6 +178,7 @@ public async Task ServerThread(CancellationToken shutdownEvent) await this.ServerWorkThread(pipeServer, shutdownEvent); }).Start((pipeServer, shutdownEvent)); } + catch(Exception e) { Console.WriteLine(e); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index ebb88e3c7..ec266a0dd 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -29,4 +29,7 @@ + + + \ No newline at end of file From 9a5bfbd023d0bb9bc606d6eaa539179afa1d088a Mon Sep 17 00:00:00 2001 From: chyyran Date: Tue, 1 Feb 2022 02:42:34 -0500 Subject: [PATCH 12/38] ingame(hook): Start IPC server ingame --- .../Orchestration/Ingame/GameWindowCommand.cs | 18 ++ .../Browser/CefSharpBrowserTab.cs | 2 +- .../Remoting/IngameCommandController.cs | 2 +- .../EntryPoint.cs | 57 ++----- .../Hooks/Direct3D11/Direct3D11Hook.cs | 4 +- .../IngameIpc.cs | 159 ++++++++++++++++++ ...chestration.Overlay.Runtime.Windows.csproj | 3 + 7 files changed, 196 insertions(+), 49 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs index 9932eea34..2bfb72143 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs @@ -28,6 +28,11 @@ public ReadOnlyMemory ToBuffer() return StructUtils.ToMemory(this); } + public bool IntoBuffer(ref Span buffer) + { + return StructUtils.IntoSpan(this, ref buffer); + } + public static GameWindowCommand? FromBuffer(ReadOnlyMemory buffer) { return StructUtils.FromSpan(buffer); @@ -63,6 +68,19 @@ public static unsafe ReadOnlyMemory ToMemory(T value) where T : unmanag return _bytes; } + public static unsafe bool IntoSpan(T value, ref Span bytes) where T : unmanaged + { + if (bytes.Length != Marshal.SizeOf()) + return false; + + byte* pointer = (byte*)&value; + for (int i = 0; i < sizeof(T); i++) + { + bytes[i] = pointer[i]; + } + return true; + } + public static unsafe T? FromSpan(ReadOnlyMemory value) where T : unmanaged { if (value.Length != Marshal.SizeOf()) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index 352674592..95860371e 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -45,7 +45,7 @@ public async Task InitializeAsync(Uri uri) return; this.CommandServer = new IngameCommandController(this.Logger, this.TabGuid); - this.CommandServer.Activate(); + this.CommandServer.Start(); this.Renderer = new D3DSharedTextureRenderHandler(this.Device, this.CommandServer); this.Renderer.Resize(new(300, 300)); this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs index 38754da0a..4e95455d0 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs @@ -33,7 +33,7 @@ public IngameCommandController(ILogger logger, Guid instanceGuid) this.OpenPipes = new(); } - public void Activate() + public void Start() { this.WatchdogThread = new Thread(async (data) => await ServerThread((CancellationToken)data)); this.WatchdogThread.Start(this.TokenSource.Token); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 6b7dbdcf6..dcb240423 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -29,55 +29,20 @@ private static int Main() { Vanara.PInvoke.Kernel32.AllocConsole(); Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); - new Direct3D11Hook().Activate(); - var npc = new NamedPipeClientStream("Snowflake.Orchestration.Renderer-" + Guid.Empty.ToString("N")); - npc.Connect(); - Memory test = new byte[Marshal.SizeOf()]; - Console.WriteLine(npc.Read(test.Span)); - - GameWindowCommand? command = GameWindowCommand.FromBuffer(test); - - if (command.HasValue) + var ipc = new IngameIpc(Guid.Empty); + ipc.CommandReceived += (c) => { - var value = command.Value; - Console.WriteLine(Enum.GetName(value.Type)); - if (command.Value.Type == GameWindowCommandType.Handshake) - { - Console.WriteLine(value.HandshakeEvent.Guid.ToString("N")); - } - } - else + Console.WriteLine($"Received command {c.Type}"); + }; + Task.Run(async () => { - Console.WriteLine("nope"); - } - - var ping = Guid.NewGuid(); - Console.WriteLine("ping " + ping.ToString("N")); - npc.Write(new GameWindowCommand() - { - Magic = GameWindowCommand.GameWindowMagic, - Type = GameWindowCommandType.Handshake, - HandshakeEvent = new() - { - Guid = ping - } - }.ToBuffer().Span); - Console.WriteLine("read ok"); - Console.WriteLine(npc.Read(test.Span)); - GameWindowCommand? pong = GameWindowCommand.FromBuffer(test); - if (pong.HasValue) - { - var value = pong.Value; - Console.WriteLine(Enum.GetName(value.Type)); - if (value.Type == GameWindowCommandType.Handshake) - { - Console.WriteLine(value.HandshakeEvent.Guid.ToString("N")); - } - } else - { - Console.WriteLine("what"); - } + var result = await ipc.ConnectAsync(); + Console.WriteLine($"IPC Connection: {result}"); + ipc.Listen(); + new Direct3D11Hook(ipc).Activate(); + }); + return 0; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index bd93d5b74..b52619e52 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -27,8 +27,9 @@ internal class Direct3D11Hook const int D3D11_DEVICE_METHOD_COUNT = 43; const int D3D11_SWAPCHAIN_METHOD_COUNT = 18; - public Direct3D11Hook() + public Direct3D11Hook(IngameIpc ipc) { + this.IngameIpc = ipc; (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) = GetDirect3D11VTable(); unsafe { @@ -77,6 +78,7 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin public IHook PresentHook { get; } public IHook ResizeBuffersHook { get; } public ImGuiInstance ImGuiInstance { get; } + public IngameIpc IngameIpc { get; } private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) GetDirect3D11VTable() { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs new file mode 100644 index 000000000..c92c97be3 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs @@ -0,0 +1,159 @@ +using Snowflake.Orchestration.Ingame; +using System; +using System.Collections.Generic; +using System.IO.Pipes; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows +{ + internal class IngameIpc + { + public IngameIpc(Guid instanceGuid) + { + this.Cancellation = new CancellationTokenSource(); + this.InstanceGuid = instanceGuid; + this.ClientStream = new NamedPipeClientStream(".", "Snowflake.Orchestration.Renderer-" + this.InstanceGuid.ToString("N"), PipeDirection.InOut, PipeOptions.Asynchronous); + } + + private CancellationTokenSource Cancellation { get; } + private Guid InstanceGuid { get; } + private NamedPipeClientStream ClientStream { get; } + + public delegate void IngameCommandHandler(GameWindowCommand command); + public event IngameCommandHandler CommandReceived; + + private bool IsListening { get; set; } = false; + public async ValueTask ConnectAsync(CancellationToken cancellationToken = default) + { + Console.WriteLine("Waiting for IPC connection..."); + Memory handshakePacket = new byte[Marshal.SizeOf()]; + try + { + await this.ClientStream.ConnectAsync(cancellationToken); + await this.ClientStream.ReadAsync(handshakePacket, cancellationToken); + } + catch + { + return IpcConnectStatus.ConnectionError; + } + if (cancellationToken.IsCancellationRequested) + return IpcConnectStatus.ConnectionTimeout; + + // failed to parse packet + GameWindowCommand? _command = GameWindowCommand.FromBuffer(handshakePacket); + if (!_command.HasValue) + return IpcConnectStatus.InvalidCommand; + + // got unexpected handshake?? + GameWindowCommand handshake = _command.Value; + if (handshake.Type != GameWindowCommandType.Handshake + && handshake.HandshakeEvent.Guid != this.InstanceGuid) + return IpcConnectStatus.InvalidHandshake; + + return IpcConnectStatus.Success; + } + + public bool SendRequest(GameWindowCommand command) + { + Span buffer = stackalloc byte[Marshal.SizeOf()]; + command.IntoBuffer(ref buffer); + + // this should return immediately... + try + { + this.ClientStream.Write(buffer); + return true; + } + catch + { + return false; + } + } + + public void Listen() + { + if (this.IsListening) + return; + Task.Run(async () => await this.ServerWorkThread(this.Cancellation.Token)); + this.IsListening = true; + } + + public async ValueTask ServerWorkThread(CancellationToken shutdownEvent) + { + Memory readBuffer = new byte[Marshal.SizeOf()]; + Console.WriteLine("IPC Thread Running..."); + try + { + while (!shutdownEvent.IsCancellationRequested && this.ClientStream.IsConnected) + { + int bytesRead = await this.ClientStream.ReadAsync(readBuffer, shutdownEvent); + if (shutdownEvent.IsCancellationRequested) + { + Console.WriteLine("Cancellation requested."); + break; + } + + if (bytesRead == 0) + { + Console.WriteLine("Pipe closed"); + break; + } + if (readBuffer.Span[0] != GameWindowCommand.GameWindowMagic) + { + Console.WriteLine("Unexpected magic number: " + readBuffer.Span[0]); + continue; + } + + if (bytesRead != readBuffer.Length) + { + Console.WriteLine($"Unexpected length {bytesRead}, expected {readBuffer.Length}"); + continue; + } + + GameWindowCommand? commandBytes = GameWindowCommand.FromBuffer(readBuffer); + if (!commandBytes.HasValue) + { + Console.WriteLine($"Unexpected payload."); + continue; + } + var command = commandBytes.Value; + + switch (command.Type) + { + case GameWindowCommandType.WindowResizeEvent: + case GameWindowCommandType.WindowMessageEvent: + case GameWindowCommandType.OverlayTextureEvent: + case GameWindowCommandType.MouseEvent: + case GameWindowCommandType.CursorEvent: + this.CommandReceived?.Invoke(command); + break; + } + } + } + catch + { + } + finally + { + this.ClientStream.Dispose(); + } + } + + public void Stop() + { + this.Cancellation.Cancel(); + } + + public enum IpcConnectStatus + { + Success, + InvalidHandshake, + InvalidCommand, + ConnectionTimeout, + ConnectionError + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index ec266a0dd..d7abcbada 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -32,4 +32,7 @@ + + + \ No newline at end of file From 48b516e3ce2b9e0a2bd3916eb9e48b54f26f1941 Mon Sep 17 00:00:00 2001 From: chyyran Date: Wed, 2 Feb 2022 02:45:22 -0500 Subject: [PATCH 13/38] ingame(ipc): Fix synchronization issues by requiring client to initiate handshake --- .../Browser/CefSharpBrowserTab.cs | 12 +++++ .../Browser/D3DSharedTextureRenderHandler.cs | 18 ++++++- .../Browser/Direct3DDevice.cs | 4 +- .../Remoting/IngameCommandController.cs | 19 +++---- .../Hooks/Direct3D11/Direct3D11Hook.cs | 51 ++++++++++++++++++- .../IngameIpc.cs | 1 + 6 files changed, 91 insertions(+), 14 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index 95860371e..bfc2856a7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -11,6 +11,7 @@ using System.Threading.Tasks; using Silk.NET.Direct3D11; using CefSharp.Structs; +using Snowflake.Orchestration.Ingame; namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser { @@ -51,6 +52,17 @@ public async Task InitializeAsync(Uri uri) this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); this.Browser.RenderHandler = this.Renderer; + this.CommandServer.CommandReceived += (cmd) => + { + switch (cmd.Type) + { + case GameWindowCommandType.WindowResizeEvent: + System.Drawing.Size size = new(cmd.ResizeEvent.Width, cmd.ResizeEvent.Height); + this.Renderer.Resize(size); + this.Browser.Size = size; + break; + } + }; WindowInfo windowInfo = new() { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index cf23f1370..0e56ac1eb 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -62,6 +62,22 @@ public unsafe D3DSharedTextureRenderHandler(Direct3DDevice device, IngameCommand GetScaleFactorForMonitor(hMon, out uint scale); this.DpiScaleFactor = scale / 100f; this.Device = device; + this.CommandServer.CommandReceived += CommandReceivedHandler; + } + + private void CommandReceivedHandler(GameWindowCommand command) + { + if (command.Type == GameWindowCommandType.OverlayTextureEvent) + this.CommandServer.Broadcast(new() + { + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.OverlayTextureEvent, + TextureEvent = new() + { + SourceProcessId = Environment.ProcessId, + TextureHandle = this.SharedTextureHandle + } + }); } public ScreenInfo? GetScreenInfo() @@ -80,7 +96,7 @@ public bool GetScreenPoint(int viewX, int viewY, out int screenX, out int screen return false; } - public void Resize(Size size) + public void Resize(System.Drawing.Size size) { Console.WriteLine("Resize buffer requested"); nint texPtr = this.Device.CreateNewCefTargetTexture(size); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs index c085cecff..1dc353fd9 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs @@ -1,8 +1,8 @@ -using CefSharp.Structs; -using Silk.NET.Core.Native; +using Silk.NET.Core.Native; using Silk.NET.Direct3D11; using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs index 4e95455d0..a3771cc71 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs @@ -58,10 +58,17 @@ public async Task BroadcastAsync(GameWindowCommand command) { List tempStreams = new(); + this.Logger.Info($"Broadcast {command.Type}, {this.OpenPipes.Count} clients connected."); + while (this.OpenPipes.TryDequeue(out var pipe)) { if (!pipe.IsConnected) + { + this.Logger.Info($"Disposing stale client."); await pipe.DisposeAsync(); // goodbye pipe + continue; + } + this.Logger.Info($"Broadcasting {command.Type}"); await pipe.WriteAsync(command.ToBuffer(), this.TokenSource.Token); tempStreams.Add(pipe); } @@ -76,13 +83,12 @@ public async Task BroadcastAsync(GameWindowCommand command) public async Task ServerWorkThread(NamedPipeServerStream pipeServer, CancellationToken shutdownEvent) { // todo: handle broken pipe - Console.WriteLine("in thead"); Memory readBuffer = new byte[Marshal.SizeOf()]; try { while (!shutdownEvent.IsCancellationRequested && pipeServer.IsConnected) { - Console.WriteLine("starting read..."); + this.Logger.Info("Read loop."); int bytesRead = await pipeServer.ReadAsync(readBuffer, shutdownEvent); if (shutdownEvent.IsCancellationRequested) { @@ -137,7 +143,7 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio } } } - catch + catch(Exception e) { this.Logger.Info("client pipe broken for " + this.InstanceGuid); } @@ -163,13 +169,8 @@ public async Task ServerThread(CancellationToken shutdownEvent) await pipeServer.WaitForConnectionAsync(shutdownEvent); if (shutdownEvent.IsCancellationRequested) break; - this.Logger.Info("Connection established to new client"); - await pipeServer.WriteAsync(GameWindowCommand.Handshake(this.InstanceGuid).ToBuffer(), shutdownEvent); - if (shutdownEvent.IsCancellationRequested) - break; - this.Logger.Info("Handshake sent to client, shunting to handler thread."); + this.Logger.Info("Connection established to new client, shunting to handler thread."); this.OpenPipes.Enqueue(pipeServer); - // hand off ownership of pipe to handler thread. new Thread(async (data) => { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index b52619e52..1a95f7f1b 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -19,6 +19,7 @@ using ImGui = DearImguiSharp.ImGui; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using Silk.NET.DXGI; +using Snowflake.Orchestration.Ingame; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -27,6 +28,8 @@ internal class Direct3D11Hook const int D3D11_DEVICE_METHOD_COUNT = 43; const int D3D11_SWAPCHAIN_METHOD_COUNT = 18; + private bool resizeBuffersLock = false; + public Direct3D11Hook(IngameIpc ipc) { this.IngameIpc = ipc; @@ -37,6 +40,15 @@ public Direct3D11Hook(IngameIpc ipc) this.ResizeBuffersHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.ResizeBuffers, this.ResizeBuffersImpl); } this.ImGuiInstance = new ImGuiInstance(Open); + this.IngameIpc.CommandReceived += CommandReceivedHandler; + } + + private void CommandReceivedHandler(GameWindowCommand command) + { + if (command.Type == GameWindowCommandType.OverlayTextureEvent) + { + Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); + } } private void Open() @@ -54,8 +66,43 @@ public void Activate() private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount, uint width, uint height, Format newFormat, uint swapChainFlags) { - Console.WriteLine("Hook Resize"); - return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); + if (resizeBuffersLock) + { + Console.WriteLine("[DX11 ResizeBuffers] Entered under lock"); + return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); + } + resizeBuffersLock = true; + try + { + var bufferResult = this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); + + Guid guid = ID3D11Texture2D.Guid; + ID3D11Texture2D* backBuffer = null; + Texture2DDesc desc = new(); + + int res = swapChain->GetBuffer(0, ref guid, (void**)&backBuffer); + backBuffer->GetDesc(ref desc); + backBuffer->Release(); + + Console.WriteLine($"Hook Resize ({desc.Width}, {desc.Height})"); + + this.IngameIpc.SendRequest(new() + { + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.WindowResizeEvent, + ResizeEvent = new() + { + Height = (int)(desc.Height), + Width = (int)(desc.Width), + } + }); + + return bufferResult; + } + finally + { + this.resizeBuffersLock = false; + } } private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uint flags) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs index c92c97be3..afb3cb87c 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs @@ -33,6 +33,7 @@ public async ValueTask ConnectAsync(CancellationToken cancella try { await this.ClientStream.ConnectAsync(cancellationToken); + this.SendRequest(GameWindowCommand.Handshake(this.InstanceGuid)); await this.ClientStream.ReadAsync(handshakePacket, cancellationToken); } catch From e1308a215ac982f42163b3df50fc35eedbc619ba Mon Sep 17 00:00:00 2001 From: chyyran Date: Wed, 2 Feb 2022 16:02:37 -0500 Subject: [PATCH 14/38] ingame(runtime): fetch texture from shared memory --- .../Browser/D3DSharedTextureRenderHandler.cs | 16 ++-- .../Hooks/Direct3D11/Direct3D11Hook.cs | 87 +++++++++++++++++-- .../Hooks/GuidHelpers.cs | 18 ++++ 3 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index 0e56ac1eb..9f36c511a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -14,6 +14,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using System.Security; @@ -24,6 +25,12 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows { internal class D3DSharedTextureRenderHandler : IRenderHandler { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe Guid* RiidOf(Guid @in) + { + return &@in; + } + [DllImport("user32.dll")] private static extern nint MonitorFromWindow(nint hwnd, uint dwFlags); [DllImport("shcore.dll")] @@ -112,8 +119,7 @@ public void Resize(System.Drawing.Size size) nint oldTexture = (nint)this.TargetTexture; nint oldHandle = this.SharedTextureHandle; - Guid resourceId = IDXGIResource1.Guid; - texture->QueryInterface(&resourceId, (void**)&texResrc); + texture->QueryInterface(RiidOf(IDXGIResource1.Guid), (void**)&texResrc); int res; void* handle = null; @@ -209,10 +215,8 @@ public void OnPaint(PaintElementType type, Rect dirtyRect, IntPtr buffer, int wi // this is going to be a pain isnt it. IDXGIKeyedMutex* textureMtx = null; - Guid resourceId = ID3D11Resource.Guid; - Guid mutexId = IDXGIKeyedMutex.Guid; - this.TargetTexture->QueryInterface(&resourceId, (void**)&textureResc); - this.TargetTexture->QueryInterface(&mutexId, (void**)&textureMtx); + this.TargetTexture->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&textureResc); + this.TargetTexture->QueryInterface(RiidOf(IDXGIKeyedMutex.Guid), (void**)&textureMtx); this.TargetTexture->GetDevice(ref device); device->GetImmediateContext(ref context); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 1a95f7f1b..1ad60c63f 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -20,6 +20,9 @@ using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using Silk.NET.DXGI; using Snowflake.Orchestration.Ingame; +using Vanara.PInvoke; + +using static Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.GuidHelpers; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -29,10 +32,15 @@ internal class Direct3D11Hook const int D3D11_SWAPCHAIN_METHOD_COUNT = 18; private bool resizeBuffersLock = false; + private unsafe ID3D11Texture2D* overlayTexture = null; + private IntPtr overlayTextureHandle = IntPtr.Zero; + private unsafe ID3D11RenderTargetView* renderTargetView = null; + D3D11 API { get; } public Direct3D11Hook(IngameIpc ipc) { this.IngameIpc = ipc; + this.API = D3D11.GetApi(); (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) = GetDirect3D11VTable(); unsafe { @@ -48,6 +56,36 @@ private void CommandReceivedHandler(GameWindowCommand command) if (command.Type == GameWindowCommandType.OverlayTextureEvent) { Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); + var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)command.TextureEvent.SourceProcessId); + if (process.IsNull) + { + Console.WriteLine("unable to open source process..."); + return; + } + + if (!Kernel32.DuplicateHandle(process, command.TextureEvent.TextureHandle, Kernel32.GetCurrentProcess(), out IntPtr dupedHandle, + 0, false, Kernel32.DUPLICATE_HANDLE_OPTIONS.DUPLICATE_SAME_ACCESS)) + { + Console.WriteLine("unable to dupe handle"); + return; + }; + + Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")}"); + + // Release old texture + unsafe + { + if (this.overlayTexture != null) + { + this.overlayTexture->Release(); + this.overlayTexture = null; + } + } + // close the handle + Kernel32.CloseHandle(this.overlayTextureHandle); + + // new texture will be fetched on next paint. + this.overlayTextureHandle = dupedHandle; } } @@ -74,15 +112,20 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount resizeBuffersLock = true; try { + // Destroy existing ImGui + if (renderTargetView != null) + renderTargetView->Release(); + renderTargetView = null; + ImGui.ImGuiImplDX11InvalidateDeviceObjects(); + var bufferResult = this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); - Guid guid = ID3D11Texture2D.Guid; + // Request new overlay texture ID3D11Texture2D* backBuffer = null; Texture2DDesc desc = new(); - int res = swapChain->GetBuffer(0, ref guid, (void**)&backBuffer); + int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); backBuffer->GetDesc(ref desc); - backBuffer->Release(); Console.WriteLine($"Hook Resize ({desc.Width}, {desc.Height})"); @@ -97,6 +140,12 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount } }); + ImGui.ImGuiImplDX11CreateDeviceObjects(); + + + + backBuffer->Release(); + return bufferResult; } finally @@ -107,6 +156,35 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uint flags) { + // Haven't received texture handle yet + if (this.overlayTextureHandle == IntPtr.Zero) + { + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + } + + ID3D11Device1* device = null; + ID3D11Texture2D* tex2D = null; + swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device); + + // need to refresh texture + if (this.overlayTextureHandle != IntPtr.Zero && this.overlayTexture == null) + { + // todo: error check + int res; + if ((res = device->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), RiidOf(ID3D11Texture2D.Guid), (void**)&tex2D)) != 0) + { + Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); + device->Release(); + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + } + + Console.WriteLine("Opened shared texture."); + this.overlayTexture = tex2D; + } + + device->Release(); + + // now what return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } @@ -131,7 +209,6 @@ private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChai { using var window = new RenderWindow(); - var d3d11Api = D3D11.GetApi(); D3DFeatureLevel outFeatureLevel = 0; Span requestFeatureLevels = FEATURE_LEVELS.AsSpan(); @@ -168,7 +245,7 @@ private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChai ID3D11DeviceContext* context = null; int? result = 0; fixed (D3DFeatureLevel* featureLevels = requestFeatureLevels) { - result = d3d11Api?.CreateDeviceAndSwapChain( + result = API.CreateDeviceAndSwapChain( null, D3DDriverType.D3DDriverTypeHardware, 0, diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs new file mode 100644 index 000000000..2f78e7305 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks +{ + internal static class GuidHelpers + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe Guid* RiidOf(Guid @in) + { + return &@in; + } + } +} From 968f4bccd616f94d4ab54b3151b17649a4c4def7 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sat, 5 Feb 2022 04:15:18 -0500 Subject: [PATCH 15/38] overlay(render): I have no clue why its not working please... --- .../Browser/CefSharpBrowserService.cs | 7 +- .../Browser/CefSharpBrowserTab.cs | 7 +- .../Browser/D3DSharedTextureRenderHandler.cs | 8 +- .../CefRendererComposable.cs | 6 +- ...hestration.Overlay.Renderer.Windows.csproj | 1 + .../Hooks/Direct3D11/Direct3D11Hook.cs | 209 +++++++++++++++--- ...chestration.Overlay.Runtime.Windows.csproj | 1 + 7 files changed, 204 insertions(+), 35 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs index 07706d525..91068dd37 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserService.cs @@ -1,5 +1,6 @@ using CefSharp; using CefSharp.OffScreen; +using Evergine.Bindings.RenderDoc; using Silk.NET.Core.Native; using Silk.NET.Direct3D11; using Snowflake.Extensibility; @@ -21,10 +22,11 @@ internal class CefSharpBrowserService : ICefBrowserService, IDisposable { private bool disposedValue; - public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) + public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath, RenderDoc renderDoc) { this.Logger = logger; this.CacheDirectory = cachePath; + this.RenderDoc = renderDoc; this.ShutdownEvent = new ManualResetEventSlim(); this.StartEvent = new ManualResetEventSlim(); this.InitializedEvent = new SemaphoreSlim(0, 1); @@ -42,6 +44,7 @@ public CefSharpBrowserService(ILogger logger, DirectoryInfo cachePath) public Thread CefThread { get; } public ILogger Logger { get; } public DirectoryInfo CacheDirectory { get; } + public RenderDoc RenderDoc { get; } public ConcurrentDictionary Tabs; @@ -125,7 +128,7 @@ public IBrowserTab GetTab(Guid tabId) { if (!this.Initialized) throw new InvalidOperationException("Can not allocate a tab when service was not initialized."); - return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(this.Logger, tabId, this.Device)); + return this.Tabs.GetOrAdd(tabId, new CefSharpBrowserTab(this.Logger, tabId, this.Device, this.RenderDoc)); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index bfc2856a7..b0ca0260e 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -12,6 +12,7 @@ using Silk.NET.Direct3D11; using CefSharp.Structs; using Snowflake.Orchestration.Ingame; +using Evergine.Bindings.RenderDoc; namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser { @@ -19,11 +20,12 @@ internal class CefSharpBrowserTab : IBrowserTab { private bool disposedValue; - public CefSharpBrowserTab(ILogger logger, Guid tabGuid, Direct3DDevice device) + public CefSharpBrowserTab(ILogger logger, Guid tabGuid, Direct3DDevice device, Evergine.Bindings.RenderDoc.RenderDoc renderDoc) { this.Logger = logger; this.TabGuid = tabGuid; this.Device = device; + RenderDoc = renderDoc; } private ChromiumWebBrowser Browser { get; set; } @@ -33,6 +35,7 @@ public CefSharpBrowserTab(ILogger logger, Guid tabGuid, Direct3DDevice device) public ILogger Logger { get; } public Guid TabGuid { get; } public Direct3DDevice Device { get; } + public RenderDoc RenderDoc { get; } private D3DSharedTextureRenderHandler Renderer { get; set; } public NamedPipeClientStream GetCommandPipe() @@ -47,7 +50,7 @@ public async Task InitializeAsync(Uri uri) this.CommandServer = new IngameCommandController(this.Logger, this.TabGuid); this.CommandServer.Start(); - this.Renderer = new D3DSharedTextureRenderHandler(this.Device, this.CommandServer); + this.Renderer = new D3DSharedTextureRenderHandler(this.Device, this.CommandServer, this.RenderDoc); this.Renderer.Resize(new(300, 300)); this.Browser = new ChromiumWebBrowser(uri.AbsoluteUri); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index 9f36c511a..bd0733f25 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -2,6 +2,7 @@ using CefSharp.Enums; using CefSharp.OffScreen; using CefSharp.Structs; +using Evergine.Bindings.RenderDoc; using Silk.NET.Core.Native; using Silk.NET.Direct3D11; using Silk.NET.DXGI; @@ -59,10 +60,12 @@ internal class D3DSharedTextureRenderHandler : IRenderHandler // Command server to notify ppl private IngameCommandController CommandServer { get; } + public RenderDoc RenderDoc { get; } - public unsafe D3DSharedTextureRenderHandler(Direct3DDevice device, IngameCommandController commandServer) + public unsafe D3DSharedTextureRenderHandler(Direct3DDevice device, IngameCommandController commandServer, Evergine.Bindings.RenderDoc.RenderDoc renderDoc) { this.CommandServer = commandServer; + RenderDoc = renderDoc; this.ObsoleteResources = new ConcurrentQueue<(nint texturePointer, nint sharedHandle)>(); // Todo: ask ingame for scale monitor handle. nint hMon = MonitorFromWindow(0, 0x1); @@ -220,12 +223,15 @@ public void OnPaint(PaintElementType type, Rect dirtyRect, IntPtr buffer, int wi this.TargetTexture->GetDevice(ref device); device->GetImmediateContext(ref context); + this.RenderDoc.API.StartFrameCapture((nint)context, (IntPtr)null); textureMtx->AcquireSync(0, INFINITE); // infinite context->UpdateSubresource(textureResc, 0, ref destRegion, (void*)sourcePtr, (uint)rowPitch, (uint)depthPitch); context->Flush(); textureMtx->ReleaseSync(0); + this.RenderDoc.API.EndFrameCapture((nint)context, (IntPtr)null); + // ensure we release all local COM pointers here. // really wish C# had traits diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs index 1feed2664..f5ce0142a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/CefRendererComposable.cs @@ -1,4 +1,5 @@ -using Snowflake.Extensibility; +using Evergine.Bindings.RenderDoc; +using Snowflake.Extensibility; using Snowflake.Loader; using Snowflake.Remoting.Orchestration; using Snowflake.Services; @@ -20,7 +21,8 @@ public void Compose(IModule composableModule, Loader.IServiceRepository serviceC var services = serviceContainer.Get(); var cachePath = composableModule.ContentsDirectory.CreateSubdirectory("cache"); - var browser = new CefSharpBrowserService(logger.GetLogger("cefsharp"), cachePath); + RenderDoc.Load(out var rd); + var browser = new CefSharpBrowserService(logger.GetLogger("cefsharp"), cachePath, rd); services.RegisterService(browser); Task.Run(async () => { await browser.InitializeAsync(); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj index 54dcf7e2f..37a5f7e8e 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 1ad60c63f..3608fa4e9 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -23,6 +23,7 @@ using Vanara.PInvoke; using static Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.GuidHelpers; +using Evergine.Bindings.RenderDoc; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -32,9 +33,17 @@ internal class Direct3D11Hook const int D3D11_SWAPCHAIN_METHOD_COUNT = 18; private bool resizeBuffersLock = false; + private bool presentLock = false; + + private unsafe IDXGIKeyedMutex* overlayTextureMutex = null; + private unsafe ID3D11ShaderResourceView* overlayShaderResourceView = null; private unsafe ID3D11Texture2D* overlayTexture = null; + private Texture2DDesc overlayTextureDesc = new(); private IntPtr overlayTextureHandle = IntPtr.Zero; + private unsafe ID3D11RenderTargetView* renderTargetView = null; + private bool imguiInitialized = false; + protected RenderDoc renderDoc; D3D11 API { get; } public Direct3D11Hook(IngameIpc ipc) @@ -47,8 +56,15 @@ public Direct3D11Hook(IngameIpc ipc) this.PresentHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.Present, this.PresentImpl); this.ResizeBuffersHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.ResizeBuffers, this.ResizeBuffersImpl); } - this.ImGuiInstance = new ImGuiInstance(Open); + //this.ImGuiInstance = new ImGuiInstance(Open); + this.Context = ImGui.CreateContext(null); + ImGui.StyleColorsDark(null); this.IngameIpc.CommandReceived += CommandReceivedHandler; + RenderDoc.Load(out this.renderDoc); + if (this.renderDoc == null) + { + Console.WriteLine("NODOC"); + } } private void CommandReceivedHandler(GameWindowCommand command) @@ -77,8 +93,13 @@ private void CommandReceivedHandler(GameWindowCommand command) { if (this.overlayTexture != null) { + this.overlayShaderResourceView->Release(); + this.overlayTextureMutex->Release(); this.overlayTexture->Release(); + this.overlayTexture = null; + this.overlayTextureMutex = null; + this.overlayShaderResourceView = null; } } // close the handle @@ -112,19 +133,25 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount resizeBuffersLock = true; try { - // Destroy existing ImGui - if (renderTargetView != null) - renderTargetView->Release(); - renderTargetView = null; - ImGui.ImGuiImplDX11InvalidateDeviceObjects(); + if (this.imguiInitialized) + { + // Destroy existing ImGui + if (renderTargetView != null) + renderTargetView->Release(); + renderTargetView = null; + + ImGui.ImGuiImplDX11InvalidateDeviceObjects(); + } var bufferResult = this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); // Request new overlay texture + ID3D11Device* device = null; ID3D11Texture2D* backBuffer = null; Texture2DDesc desc = new(); int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); backBuffer->GetDesc(ref desc); Console.WriteLine($"Hook Resize ({desc.Width}, {desc.Height})"); @@ -140,10 +167,21 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount } }); - ImGui.ImGuiImplDX11CreateDeviceObjects(); + // Recreate ImGui objects + if (this.imguiInitialized) + { + ID3D11Resource* backBufferResource = null; + ID3D11RenderTargetView* newRenderTargetView = null; + backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); + device->CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); + renderTargetView = newRenderTargetView; + backBufferResource->Release(); + ImGui.ImGuiImplDX11CreateDeviceObjects(); + } + // release backbuffer backBuffer->Release(); return bufferResult; @@ -156,36 +194,152 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uint flags) { - // Haven't received texture handle yet - if (this.overlayTextureHandle == IntPtr.Zero) + if (presentLock) { + Console.WriteLine("[DX11 Present] Entered under lock"); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } - ID3D11Device1* device = null; - ID3D11Texture2D* tex2D = null; - swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device); - - // need to refresh texture - if (this.overlayTextureHandle != IntPtr.Zero && this.overlayTexture == null) + presentLock = true; + try { - // todo: error check - int res; - if ((res = device->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), RiidOf(ID3D11Texture2D.Guid), (void**)&tex2D)) != 0) + // Haven't received texture handle yet + if (this.overlayTextureHandle == IntPtr.Zero) { - Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); - device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } - Console.WriteLine("Opened shared texture."); - this.overlayTexture = tex2D; - } + ID3D11Device* device = null; + ID3D11Device1* device1 = null; + ID3D11DeviceContext* deviceContext = null; - device->Release(); + SwapChainDesc swapChainDesc = new(); + + swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); + swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device1); + swapChain->GetDesc(ref swapChainDesc); + + device->GetImmediateContext(ref deviceContext); + + // need to refresh texture + if (this.overlayTextureHandle != IntPtr.Zero && this.overlayTexture == null) + { + ID3D11Texture2D* tex2D = null; // moved to thhis.overlayTexture + Texture2DDesc tex2dDesc = new(); // dropped + ID3D11ShaderResourceView* texSRV = null; // moved to this.overlayShaderResourceView + IDXGIKeyedMutex* texMtx = null; // moved to this.overlayTextureMutex + ID3D11Resource* texRsrc = null; // dropped + // todo: error check + int res; + if ((res = device1->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), RiidOf(ID3D11Texture2D.Guid), (void**)&tex2D)) != 0) + { + Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); + device1->Release(); + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + } + + Console.WriteLine("Opened shared texture."); + tex2D->QueryInterface(RiidOf(IDXGIKeyedMutex.Guid), (void**)&texMtx); + tex2D->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&texRsrc); + + tex2D->GetDesc(ref tex2dDesc); + this.overlayTextureMutex = texMtx; + this.overlayTexture = tex2D; + this.overlayTextureDesc = tex2dDesc; + + // Acquire lock on mutex for SRV creation, not sure if this is needed. + this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); + ShaderResourceViewDesc srvDesc = new() + { + Format = tex2dDesc.Format, + ViewDimension = D3DSrvDimension.D3D101SrvDimensionTexture2D, + Anonymous = new(texture2D: new() + { + MipLevels = tex2dDesc.MipLevels, + MostDetailedMip = 0, + }) + }; + device->CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); + this.overlayTextureMutex->ReleaseSync(0); + + // Get text src + this.overlayShaderResourceView = texSRV; + texRsrc->Release(); + + } - // now what - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + if (!this.imguiInitialized) + { + ID3D11Texture2D* backBuffer = null; + ID3D11Resource* backBufferResource = null; + + ImGui.ImGuiImplWin32Init(swapChainDesc.OutputWindow); + + // todo: init wndproc + + ImGui.ImGuiImplDX11Init(device, deviceContext); + swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + + ID3D11RenderTargetView* newRenderTargetView = null; + + backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); + device->CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); + + renderTargetView = newRenderTargetView; + backBufferResource->Release(); + backBuffer->Release(); + + this.imguiInitialized = true; + } + + this.renderDoc.API.StartFrameCapture((nint)deviceContext, swapChainDesc.OutputWindow); + + + ImGui.ImGuiImplDX11NewFrame(); + ImGui.ImGuiImplWin32NewFrame(); + ImGui.NewFrame(); + // -- render function + bool x = true; + ImGui.ShowDemoWindow(ref x); + // bruh i need to make a shaderesourceview??? + + this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); + var vec = new DearImguiSharp.ImVec2.__Internal() { x = this.overlayTextureDesc.Width, y = this.overlayTextureDesc.Height }; + + ImGui.Begin("DirectX11 Texture Test", ref x, 0); + ImGui.Text($"pointer = {(nint)this.overlayShaderResourceView}"); + ImGui.Text($"size = {vec.x} x {vec.y}"); + ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, new(), new(), new(), new()); + ImGui.End(); + + // -- render function + ImGui.EndFrame(); + ImGui.Render(); + + ImGui.UpdatePlatformWindows(); + ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + + // set rendertargetview + deviceContext->OMSetRenderTargets(1, ref renderTargetView, null); + + using var drawData = ImGui.GetDrawData(); + ImGui.ImGuiImplDX11RenderDrawData(drawData); + + this.overlayTextureMutex->ReleaseSync(0); + device1->Release(); + device->Release(); + //var result = this.renderDoc.API.EndFrameCapture((nint)deviceContext, swapChainDesc.OutputWindow); + //if (result != 1) + //{ + // Console.WriteLine($"RD: {result.ToString("x")}"); + //} + // now what + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + } + finally + { + presentLock = false; + } } [X64.Function(X64.CallingConventions.Microsoft)] @@ -204,6 +358,7 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin public IHook ResizeBuffersHook { get; } public ImGuiInstance ImGuiInstance { get; } public IngameIpc IngameIpc { get; } + public DearImguiSharp.ImGuiContext Context { get; } private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) GetDirect3D11VTable() { @@ -277,8 +432,6 @@ ref context device->Release(); context->Release(); return (deviceVtable, swapChainVtable); - //d3d9->Release(); - //return vtable; } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index d7abcbada..5ea682127 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -23,6 +23,7 @@ + From 8e1d4bd07659a0977af16999f3f6e786c3693b10 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sat, 5 Feb 2022 04:28:47 -0500 Subject: [PATCH 16/38] overlay(render): set imgui uv coords --- .../Hooks/Direct3D11/Direct3D11Hook.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 3608fa4e9..278e0ed1b 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -305,11 +305,15 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); var vec = new DearImguiSharp.ImVec2.__Internal() { x = this.overlayTextureDesc.Width, y = this.overlayTextureDesc.Height }; + var uv_min = new DearImguiSharp.ImVec2.__Internal() { x = 0f, y = 0f }; // Top-left + var uv_max = new DearImguiSharp.ImVec2.__Internal() { x = 1f, y = 1f }; + var tint_col = new DearImguiSharp.ImVec4.__Internal() { x = 1.0f, y = 1.0f, w = 1.0f, z = 1.0f }; + var border_col = new DearImguiSharp.ImVec4.__Internal() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; ImGui.Begin("DirectX11 Texture Test", ref x, 0); ImGui.Text($"pointer = {(nint)this.overlayShaderResourceView}"); ImGui.Text($"size = {vec.x} x {vec.y}"); - ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, new(), new(), new(), new()); + ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, uv_min, uv_max, tint_col, border_col); ImGui.End(); // -- render function From b403fbf9f4a7ff906c66d18b6dd0e996d7aac02a Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 6 Feb 2022 02:03:45 -0500 Subject: [PATCH 17/38] overlay(render): fix viewport --- .../Browser/CefSharpBrowserTab.cs | 5 ++ .../Browser/D3DSharedTextureRenderHandler.cs | 1 + .../Remoting/IngameCommandController.cs | 2 +- .../Hooks/ComPtr.cs | 84 +++++++++++++++++ .../Hooks/Direct3D11/Direct3D11Hook.cs | 89 +++++++++++++------ .../IngameIpc.cs | 1 + 6 files changed, 156 insertions(+), 26 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index b0ca0260e..babcc8220 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -63,7 +63,12 @@ public async Task InitializeAsync(Uri uri) System.Drawing.Size size = new(cmd.ResizeEvent.Width, cmd.ResizeEvent.Height); this.Renderer.Resize(size); this.Browser.Size = size; + this.Browser.GetBrowserHost().Invalidate(PaintElementType.View); break; + case GameWindowCommandType.OverlayTextureEvent: + this.Browser.GetBrowserHost().Invalidate(PaintElementType.View); + break; + } }; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index bd0733f25..50d6a15e1 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -109,6 +109,7 @@ public bool GetScreenPoint(int viewX, int viewY, out int screenX, out int screen public void Resize(System.Drawing.Size size) { Console.WriteLine("Resize buffer requested"); + nint texPtr = this.Device.CreateNewCefTargetTexture(size); unsafe { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs index a3771cc71..21b81e51a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs @@ -145,7 +145,7 @@ public async Task ServerWorkThread(NamedPipeServerStream pipeServer, Cancellatio } catch(Exception e) { - this.Logger.Info("client pipe broken for " + this.InstanceGuid); + this.Logger.Info("client pipe broken for " + this.InstanceGuid + $" because \n {e}"); } finally { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs new file mode 100644 index 000000000..c02ac963a --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks +{ + internal ref struct ComPtr where TPtr : unmanaged + { + public unsafe readonly ref TPtr Ref => ref *_pointer; + + public unsafe delegate void ComPtrRelease(TComRelease* source) + where TComRelease : unmanaged; + + private ComPtrRelease? Release { get; } + private bool _forgotten = false; + private unsafe TPtr* _pointer; + public unsafe void** OutPointer => (void**)AddressOf(this._pointer); + + public unsafe ComPtr(TPtr* nonOwningPointer) + { + this._pointer = nonOwningPointer; + this.Release = null; + } + + public unsafe ComPtr(ComPtrRelease release) + { + this._pointer = null; + this.Release = release; + } + + public unsafe ComPtr(TPtr* pointer, ComPtrRelease release) + { + this._pointer = pointer; + this.Release = release; + } + + public unsafe delegate void ComPtrCast(TSourcePtr* source, Guid* riid, void** outPtr) + where TSourcePtr: unmanaged; + public unsafe delegate int ComPtrCastInt(TSourcePtr* source, Guid* riid, void** outPtr) + where TSourcePtr : unmanaged; + + public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtr.ComPtrRelease? release) + where TOut: unmanaged + { + TOut* outPointer = null; + cast(this._pointer, &riid, (void**)&outPointer); + return new(outPointer, release); + } + + public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPtr.ComPtrRelease? release, out int result) + where TOut : unmanaged + { + TOut* outPointer = null; + result = cast(this._pointer, &riid, (void**)&outPointer); + return new(outPointer, release); + } + + public unsafe TPtr* Forget() + { + this._forgotten = true; + return this._pointer; + } + + public static unsafe implicit operator TPtr* (ComPtr ptr) => ptr._pointer; + + public void Dispose() + { + if (_forgotten) + return; + unsafe + { + if (this._pointer == null) + return; + this.Release?.Invoke(this._pointer); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe TPtr** AddressOf(TPtr* @in) => &@in; + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 278e0ed1b..c6b401379 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -130,6 +130,7 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount Console.WriteLine("[DX11 ResizeBuffers] Entered under lock"); return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); } + resizeBuffersLock = true; try { @@ -203,24 +204,46 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin presentLock = true; try { - // Haven't received texture handle yet - if (this.overlayTextureHandle == IntPtr.Zero) - { - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - } - ID3D11Device* device = null; ID3D11Device1* device1 = null; ID3D11DeviceContext* deviceContext = null; - SwapChainDesc swapChainDesc = new(); swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device1); swapChain->GetDesc(ref swapChainDesc); - + device->GetImmediateContext(ref deviceContext); + // Haven't received texture handle yet + if (this.overlayTextureHandle == IntPtr.Zero) + { + ID3D11Texture2D* backBuffer = null; + Texture2DDesc desc = new(); + int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + + if (desc.Height != 0 && desc.Width != 0) + { + Console.WriteLine("Requesting resize"); + this.IngameIpc.SendRequest(new() + { + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.WindowResizeEvent, + ResizeEvent = new() + { + Height = (int)(desc.Height), + Width = (int)(desc.Width), + } + }); + } + + backBuffer->Release(); + deviceContext->Release(); + device1->Release(); + device->Release(); + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + } + // need to refresh texture if (this.overlayTextureHandle != IntPtr.Zero && this.overlayTexture == null) { @@ -285,35 +308,56 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); device->CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); - renderTargetView = newRenderTargetView; + if (this.renderTargetView != null) + this.renderTargetView->Release(); + + this.renderTargetView = newRenderTargetView; backBufferResource->Release(); backBuffer->Release(); this.imguiInitialized = true; } - this.renderDoc.API.StartFrameCapture((nint)deviceContext, swapChainDesc.OutputWindow); - - + this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); ImGui.ImGuiImplDX11NewFrame(); ImGui.ImGuiImplWin32NewFrame(); ImGui.NewFrame(); // -- render function bool x = true; - ImGui.ShowDemoWindow(ref x); + //ImGui.ShowDemoWindow(ref x); // bruh i need to make a shaderesourceview??? - this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); var vec = new DearImguiSharp.ImVec2.__Internal() { x = this.overlayTextureDesc.Width, y = this.overlayTextureDesc.Height }; var uv_min = new DearImguiSharp.ImVec2.__Internal() { x = 0f, y = 0f }; // Top-left var uv_max = new DearImguiSharp.ImVec2.__Internal() { x = 1f, y = 1f }; - var tint_col = new DearImguiSharp.ImVec4.__Internal() { x = 1.0f, y = 1.0f, w = 1.0f, z = 1.0f }; + var tint_col = new DearImguiSharp.ImVec4.__Internal() { w = 1.0f, x = 1.0f, y = 1.0f, z = 1.0f, }; var border_col = new DearImguiSharp.ImVec4.__Internal() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; + var wndowpad = new DearImguiSharp.ImVec2.__Internal() { x = 0.0f, y = 0.0f }; + + var viewPort = ImGui.GetMainViewport(); + ImGui.SetNextWindowPos(viewPort.Pos, 1, new() + { + X = 0f, + Y = 0f, + }); + ImGui.SetNextWindowSize(viewPort.Size, 1); + ImGui.SetNextWindowFocus(); + //ImGui.PushStyleColorU32((int)DearImguiSharp.ImGuiCol.ImGuiColWindowBg, unchecked((uint)-1)); + ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowPadding, wndowpad); + ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, wndowpad); + + ImGui.Begin("DirectX11 Texture Test", ref x, + (int)(0 + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoMove + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoResize + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoBackground + //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings + )); - ImGui.Begin("DirectX11 Texture Test", ref x, 0); - ImGui.Text($"pointer = {(nint)this.overlayShaderResourceView}"); - ImGui.Text($"size = {vec.x} x {vec.y}"); ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, uv_min, uv_max, tint_col, border_col); + + ImGui.PopStyleVar(1); ImGui.End(); // -- render function @@ -328,16 +372,11 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin using var drawData = ImGui.GetDrawData(); ImGui.ImGuiImplDX11RenderDrawData(drawData); - this.overlayTextureMutex->ReleaseSync(0); + + deviceContext->Release(); device1->Release(); device->Release(); - //var result = this.renderDoc.API.EndFrameCapture((nint)deviceContext, swapChainDesc.OutputWindow); - //if (result != 1) - //{ - // Console.WriteLine($"RD: {result.ToString("x")}"); - //} - // now what return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } finally diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs index afb3cb87c..189710ef9 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs @@ -59,6 +59,7 @@ public async ValueTask ConnectAsync(CancellationToken cancella public bool SendRequest(GameWindowCommand command) { + // todo: reconnect on failure. Will need async :( Span buffer = stackalloc byte[Marshal.SizeOf()]; command.IntoBuffer(ref buffer); From bd1e1f4a7b1801ffb11d988431bc8c0aac81daac Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 6 Feb 2022 02:35:51 -0500 Subject: [PATCH 18/38] ipc(renderer): Use ComPtr wrapper --- .../Browser/D3DSharedTextureRenderHandler.cs | 4 +- .../Hooks/Direct3D11/Direct3D11Hook.cs | 51 ++++++++++++------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index 50d6a15e1..ce1f888da 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -224,14 +224,14 @@ public void OnPaint(PaintElementType type, Rect dirtyRect, IntPtr buffer, int wi this.TargetTexture->GetDevice(ref device); device->GetImmediateContext(ref context); - this.RenderDoc.API.StartFrameCapture((nint)context, (IntPtr)null); + //this.RenderDoc.API.StartFrameCapture((nint)context, (IntPtr)null); textureMtx->AcquireSync(0, INFINITE); // infinite context->UpdateSubresource(textureResc, 0, ref destRegion, (void*)sourcePtr, (uint)rowPitch, (uint)depthPitch); context->Flush(); textureMtx->ReleaseSync(0); - this.RenderDoc.API.EndFrameCapture((nint)context, (IntPtr)null); + //this.RenderDoc.API.EndFrameCapture((nint)context, (IntPtr)null); // ensure we release all local COM pointers here. diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index c6b401379..19dceb5c7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -134,6 +134,7 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount resizeBuffersLock = true; try { + // todo: handle device reset if (this.imguiInitialized) { // Destroy existing ImGui @@ -147,13 +148,18 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount var bufferResult = this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); // Request new overlay texture - ID3D11Device* device = null; - ID3D11Texture2D* backBuffer = null; + //ID3D11Device* device = null; + //ID3D11Texture2D* backBuffer = null; Texture2DDesc desc = new(); - - int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); - swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); - backBuffer->GetDesc(ref desc); + + var swapChainWrap = new ComPtr(swapChain); + using var backBuffer = swapChainWrap.Cast((p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release(), out int _); + using var device = swapChainWrap.Cast((p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, d => d->Release(), out int _); + + //int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + //swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); + + backBuffer.Ref.GetDesc(ref desc); Console.WriteLine($"Hook Resize ({desc.Width}, {desc.Height})"); @@ -171,20 +177,15 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount // Recreate ImGui objects if (this.imguiInitialized) { - ID3D11Resource* backBufferResource = null; + using var backBufferResource = backBuffer.Cast((p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, r => r->Release(), out int _); ID3D11RenderTargetView* newRenderTargetView = null; - - backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); - device->CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); + //backBuffer.Ref.QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); + device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); renderTargetView = newRenderTargetView; - backBufferResource->Release(); ImGui.ImGuiImplDX11CreateDeviceObjects(); } - // release backbuffer - backBuffer->Release(); - return bufferResult; } finally @@ -258,20 +259,35 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin { Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); device1->Release(); + deviceContext->Release(); + device->Release(); + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } Console.WriteLine("Opened shared texture."); tex2D->QueryInterface(RiidOf(IDXGIKeyedMutex.Guid), (void**)&texMtx); - tex2D->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&texRsrc); tex2D->GetDesc(ref tex2dDesc); + if (texMtx == null) + { + Console.WriteLine("Mutex not yet ready, can not open shared texture."); + + // not ready yet. + tex2D->Release(); + device1->Release(); + deviceContext->Release(); + device->Release(); + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + + } + + tex2D->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&texRsrc); + this.overlayTextureMutex = texMtx; this.overlayTexture = tex2D; this.overlayTextureDesc = tex2dDesc; - // Acquire lock on mutex for SRV creation, not sure if this is needed. - this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); ShaderResourceViewDesc srvDesc = new() { Format = tex2dDesc.Format, @@ -283,7 +299,6 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin }) }; device->CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); - this.overlayTextureMutex->ReleaseSync(0); // Get text src this.overlayShaderResourceView = texSRV; From 112250a7a526913285f21de2fa838525f48d7bcb Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 6 Feb 2022 03:23:30 -0500 Subject: [PATCH 19/38] ingame(hook): use more ComPtr to avoid leaks --- .../InputTests.cs | 1 - .../EntryPoint.cs | 2 + .../Hooks/ComPtr.cs | 20 +- .../Hooks/Direct3D11/Direct3D11Hook.cs | 232 ++++++++++-------- 4 files changed, 155 insertions(+), 100 deletions(-) diff --git a/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs b/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs index 31cf94268..23f029800 100644 --- a/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs +++ b/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs @@ -29,7 +29,6 @@ public void InjectRetroArch() var injector = new Injector(retroArchProcess); Debugger.Break(); injector.Inject(@"D:\coding\snowflake\src\Snowflake.Support.Orchestration.Overlay.Runtime.Windows\bin\Debug\net6.0\kaku-x64.dll"); - } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index dcb240423..2c0f3a8f6 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -20,7 +20,9 @@ public static int Main(nint args, int sizeBytes) } catch (Exception e) { + File.WriteAllText("E:\\Emulators\\error_s.log", e.ToString()); Console.WriteLine(e); + Console.ReadLine(); return 1; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs index c02ac963a..10036c920 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs @@ -42,6 +42,10 @@ public unsafe delegate void ComPtrCast(TSourcePtr* source, Guid* rii public unsafe delegate int ComPtrCastInt(TSourcePtr* source, Guid* riid, void** outPtr) where TSourcePtr : unmanaged; + public unsafe delegate void ComPtrCastT(TSourcePtr* source, TOutPtr** outPtr) + where TSourcePtr : unmanaged + where TOutPtr : unmanaged; + public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtr.ComPtrRelease? release) where TOut: unmanaged { @@ -58,14 +62,28 @@ public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPt return new(outPointer, release); } + public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr.ComPtrRelease? release) + where TOut : unmanaged + { + TOut* outPointer = null; + cast(this._pointer, &outPointer); + return new(outPointer, release); + } + public unsafe TPtr* Forget() { this._forgotten = true; - return this._pointer; + TPtr* @this = this._pointer; + this._pointer = null; + return @this; } + public static unsafe TPtr* operator ~(ComPtr ptr) => ptr._pointer; + public static unsafe implicit operator TPtr* (ComPtr ptr) => ptr._pointer; + public static unsafe implicit operator TPtr**(ComPtr ptr) => AddressOf(ptr._pointer); + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Dispose() { if (_forgotten) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 19dceb5c7..7dbdd3c96 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -45,6 +45,8 @@ internal class Direct3D11Hook private bool imguiInitialized = false; protected RenderDoc renderDoc; + public object MutexMutex = new(); + D3D11 API { get; } public Direct3D11Hook(IngameIpc ipc) { @@ -97,9 +99,12 @@ private void CommandReceivedHandler(GameWindowCommand command) this.overlayTextureMutex->Release(); this.overlayTexture->Release(); - this.overlayTexture = null; - this.overlayTextureMutex = null; - this.overlayShaderResourceView = null; + lock (this.MutexMutex) + { + this.overlayTexture = null; + this.overlayTextureMutex = null; + this.overlayShaderResourceView = null; + } } } // close the handle @@ -153,8 +158,8 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount Texture2DDesc desc = new(); var swapChainWrap = new ComPtr(swapChain); - using var backBuffer = swapChainWrap.Cast((p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release(), out int _); - using var device = swapChainWrap.Cast((p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, d => d->Release(), out int _); + using var backBuffer = swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release(), out int _); + using var device = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release(), out int _); //int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); //swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); @@ -177,7 +182,9 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount // Recreate ImGui objects if (this.imguiInitialized) { - using var backBufferResource = backBuffer.Cast((p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, r => r->Release(), out int _); + using var backBufferResource = backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), + ID3D11Resource.Guid, + static r => r->Release(), out int _); ID3D11RenderTargetView* newRenderTargetView = null; //backBuffer.Ref.QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); @@ -205,16 +212,24 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin presentLock = true; try { - ID3D11Device* device = null; - ID3D11Device1* device1 = null; - ID3D11DeviceContext* deviceContext = null; + ComPtr swapChainWrap = new(swapChain); + + //ID3D11Device* device = null; + //ID3D11Device1* device1 = null; + //ID3D11DeviceContext* deviceContext = null; SwapChainDesc swapChainDesc = new(); - swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); - swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device1); + using var device = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); + using var device1 = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device1.Guid, static d => d->Release()); + using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); + + //device.Ref.GetImmediateContext(deviceContext.OutPointerT); + + //swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); + //swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device1); swapChain->GetDesc(ref swapChainDesc); - device->GetImmediateContext(ref deviceContext); + //device->GetImmediateContext(ref deviceContext); // Haven't received texture handle yet if (this.overlayTextureHandle == IntPtr.Zero) @@ -239,53 +254,73 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin } backBuffer->Release(); - deviceContext->Release(); - device1->Release(); - device->Release(); + //deviceContext->Release(); + //device1->Release(); + //device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } // need to refresh texture if (this.overlayTextureHandle != IntPtr.Zero && this.overlayTexture == null) { - ID3D11Texture2D* tex2D = null; // moved to thhis.overlayTexture - Texture2DDesc tex2dDesc = new(); // dropped + ID3D11ShaderResourceView* texSRV = null; // moved to this.overlayShaderResourceView - IDXGIKeyedMutex* texMtx = null; // moved to this.overlayTextureMutex - ID3D11Resource* texRsrc = null; // dropped - // todo: error check - int res; - if ((res = device1->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), RiidOf(ID3D11Texture2D.Guid), (void**)&tex2D)) != 0) + //IDXGIKeyedMutex* texMtx = null; // moved to this.overlayTextureMutex + + + //ID3D11Resource* texRsrc = null; // dropped + + using ComPtr tex2D = + device1.Cast((p, g, o) => p->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), g, o), ID3D11Texture2D.Guid, d => d->Release(), out int res); + if (res != 0) { Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); - device1->Release(); - deviceContext->Release(); - device->Release(); + //device1->Release(); + //deviceContext->Release(); + //device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } + // todo: error check + //int res; + //if ((res = device1.Ref.OpenSharedResource1(this.overlayTextureHandle.ToPointer(), RiidOf(ID3D11Texture2D.Guid), (void**)&tex2D)) != 0) + //{ + // Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); + // //device1->Release(); + // //deviceContext->Release(); + // //device->Release(); + + // return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); + //} + Console.WriteLine("Opened shared texture."); - tex2D->QueryInterface(RiidOf(IDXGIKeyedMutex.Guid), (void**)&texMtx); + using var texMtx = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), IDXGIKeyedMutex.Guid, d => d->Release()); - tex2D->GetDesc(ref tex2dDesc); - if (texMtx == null) + //tex2D.Ref.QueryInterface(RiidOf(IDXGIKeyedMutex.Guid), (void**)&texMtx); + + if (~texMtx == null) { Console.WriteLine("Mutex not yet ready, can not open shared texture."); // not ready yet. - tex2D->Release(); - device1->Release(); - deviceContext->Release(); - device->Release(); + //device1->Release(); + //deviceContext->Release(); + //device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } - tex2D->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&texRsrc); + Texture2DDesc tex2dDesc = new(); // dropped + + tex2D.Ref.GetDesc(ref tex2dDesc); + + using var texRsrc = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, d => d->Release()); + + //tex2D.Ref.QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&texRsrc); - this.overlayTextureMutex = texMtx; - this.overlayTexture = tex2D; + this.overlayTextureMutex = texMtx.Forget(); + this.overlayTexture = tex2D.Forget(); this.overlayTextureDesc = tex2dDesc; ShaderResourceViewDesc srvDesc = new() @@ -298,12 +333,11 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin MostDetailedMip = 0, }) }; - device->CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); + + device.Ref.CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); // Get text src this.overlayShaderResourceView = texSRV; - texRsrc->Release(); - } if (!this.imguiInitialized) @@ -315,13 +349,13 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin // todo: init wndproc - ImGui.ImGuiImplDX11Init(device, deviceContext); + ImGui.ImGuiImplDX11Init(~device, ~deviceContext); swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); ID3D11RenderTargetView* newRenderTargetView = null; backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); - device->CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); + device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); if (this.renderTargetView != null) this.renderTargetView->Release(); @@ -333,65 +367,67 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin this.imguiInitialized = true; } - this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); - ImGui.ImGuiImplDX11NewFrame(); - ImGui.ImGuiImplWin32NewFrame(); - ImGui.NewFrame(); - // -- render function - bool x = true; - //ImGui.ShowDemoWindow(ref x); - // bruh i need to make a shaderesourceview??? - - var vec = new DearImguiSharp.ImVec2.__Internal() { x = this.overlayTextureDesc.Width, y = this.overlayTextureDesc.Height }; - var uv_min = new DearImguiSharp.ImVec2.__Internal() { x = 0f, y = 0f }; // Top-left - var uv_max = new DearImguiSharp.ImVec2.__Internal() { x = 1f, y = 1f }; - var tint_col = new DearImguiSharp.ImVec4.__Internal() { w = 1.0f, x = 1.0f, y = 1.0f, z = 1.0f, }; - var border_col = new DearImguiSharp.ImVec4.__Internal() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; - var wndowpad = new DearImguiSharp.ImVec2.__Internal() { x = 0.0f, y = 0.0f }; - - var viewPort = ImGui.GetMainViewport(); - ImGui.SetNextWindowPos(viewPort.Pos, 1, new() + lock (this.MutexMutex) { - X = 0f, - Y = 0f, - }); - ImGui.SetNextWindowSize(viewPort.Size, 1); - ImGui.SetNextWindowFocus(); - //ImGui.PushStyleColorU32((int)DearImguiSharp.ImGuiCol.ImGuiColWindowBg, unchecked((uint)-1)); - ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowPadding, wndowpad); - ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, wndowpad); - - ImGui.Begin("DirectX11 Texture Test", ref x, - (int)(0 - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoMove - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoResize - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoBackground - //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings - )); - - ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, uv_min, uv_max, tint_col, border_col); - - ImGui.PopStyleVar(1); - ImGui.End(); - - // -- render function - ImGui.EndFrame(); - ImGui.Render(); - - ImGui.UpdatePlatformWindows(); - ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); - - // set rendertargetview - deviceContext->OMSetRenderTargets(1, ref renderTargetView, null); - - using var drawData = ImGui.GetDrawData(); - ImGui.ImGuiImplDX11RenderDrawData(drawData); - this.overlayTextureMutex->ReleaseSync(0); - - deviceContext->Release(); - device1->Release(); - device->Release(); + this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); + ImGui.ImGuiImplDX11NewFrame(); + ImGui.ImGuiImplWin32NewFrame(); + ImGui.NewFrame(); + // -- render function + bool x = true; + //ImGui.ShowDemoWindow(ref x); + // bruh i need to make a shaderesourceview??? + + var vec = new DearImguiSharp.ImVec2.__Internal() { x = this.overlayTextureDesc.Width, y = this.overlayTextureDesc.Height }; + var uv_min = new DearImguiSharp.ImVec2.__Internal() { x = 0f, y = 0f }; // Top-left + var uv_max = new DearImguiSharp.ImVec2.__Internal() { x = 1f, y = 1f }; + var tint_col = new DearImguiSharp.ImVec4.__Internal() { w = 1.0f, x = 1.0f, y = 1.0f, z = 1.0f, }; + var border_col = new DearImguiSharp.ImVec4.__Internal() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; + var wndowpad = new DearImguiSharp.ImVec2.__Internal() { x = 0.0f, y = 0.0f }; + + var viewPort = ImGui.GetMainViewport(); + ImGui.SetNextWindowPos(viewPort.Pos, 1, new() + { + X = 0f, + Y = 0f, + }); + ImGui.SetNextWindowSize(viewPort.Size, 1); + ImGui.SetNextWindowFocus(); + //ImGui.PushStyleColorU32((int)DearImguiSharp.ImGuiCol.ImGuiColWindowBg, unchecked((uint)-1)); + ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowPadding, wndowpad); + ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, wndowpad); + + ImGui.Begin("DirectX11 Texture Test", ref x, + (int)(0 + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoMove + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoResize + | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoBackground + //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings + )); + + ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, uv_min, uv_max, tint_col, border_col); + + ImGui.PopStyleVar(1); + ImGui.End(); + + // -- render function + ImGui.EndFrame(); + ImGui.Render(); + + ImGui.UpdatePlatformWindows(); + ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + + // set rendertargetview + deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); + + using var drawData = ImGui.GetDrawData(); + ImGui.ImGuiImplDX11RenderDrawData(drawData); + this.overlayTextureMutex->ReleaseSync(0); + } + //deviceContext->Release(); + //device1->Release(); + //device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } finally From d582b4d17f21b079560d54cd1e84b7fc1a84ac89 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 6 Feb 2022 15:15:49 -0500 Subject: [PATCH 20/38] impl(comptr): Use ComPtr for more stuff --- .../Hooks/ComPtr.cs | 5 ++-- .../Hooks/Direct3D11/Direct3D11Hook.cs | 30 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs index 10036c920..d7c092d44 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs @@ -17,7 +17,6 @@ public unsafe delegate void ComPtrRelease(TComRelease* source) private ComPtrRelease? Release { get; } private bool _forgotten = false; private unsafe TPtr* _pointer; - public unsafe void** OutPointer => (void**)AddressOf(this._pointer); public unsafe ComPtr(TPtr* nonOwningPointer) { @@ -25,13 +24,13 @@ public unsafe ComPtr(TPtr* nonOwningPointer) this.Release = null; } - public unsafe ComPtr(ComPtrRelease release) + public unsafe ComPtr(ComPtrRelease? release) { this._pointer = null; this.Release = release; } - public unsafe ComPtr(TPtr* pointer, ComPtrRelease release) + public unsafe ComPtr(TPtr* pointer, ComPtrRelease? release) { this._pointer = pointer; this.Release = release; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 7dbdd3c96..a516c4473 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -234,13 +234,17 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin // Haven't received texture handle yet if (this.overlayTextureHandle == IntPtr.Zero) { - ID3D11Texture2D* backBuffer = null; + //ID3D11Texture2D* backBuffer = null; + //int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + Texture2DDesc desc = new(); - int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + using var backBuffer = + swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); + backBuffer.Ref.GetDesc(ref desc); if (desc.Height != 0 && desc.Width != 0) { - Console.WriteLine("Requesting resize"); + Console.WriteLine("Requesting resize because no texture handle"); this.IngameIpc.SendRequest(new() { Magic = GameWindowCommand.GameWindowMagic, @@ -253,7 +257,7 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin }); } - backBuffer->Release(); + //backBuffer->Release(); //deviceContext->Release(); //device1->Release(); //device->Release(); @@ -334,6 +338,7 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin }) }; + // not worth using ComPtr here because capture and lifetime of texSRV.. device.Ref.CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); // Get text src @@ -342,28 +347,31 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin if (!this.imguiInitialized) { - ID3D11Texture2D* backBuffer = null; - ID3D11Resource* backBufferResource = null; - + //ID3D11Texture2D* backBuffer = null; + //ID3D11Resource* backBufferResource = null; ImGui.ImGuiImplWin32Init(swapChainDesc.OutputWindow); // todo: init wndproc ImGui.ImGuiImplDX11Init(~device, ~deviceContext); - swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + //swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); + + using var backBuffer = + swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); + using var backBufferResource = backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, p => p->Release()); ID3D11RenderTargetView* newRenderTargetView = null; - backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); + //backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); if (this.renderTargetView != null) this.renderTargetView->Release(); this.renderTargetView = newRenderTargetView; - backBufferResource->Release(); - backBuffer->Release(); + //backBufferResource->Release(); + //backBuffer->Release(); this.imguiInitialized = true; } From 63df82067b6043f553693300e8917ed8af49b7c9 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 6 Feb 2022 15:25:28 -0500 Subject: [PATCH 21/38] doc(comptr): document comptr --- .../Hooks/ComPtr.cs | 105 +++++++++++++++++- 1 file changed, 99 insertions(+), 6 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs index d7c092d44..f54f9a1ac 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs @@ -7,10 +7,24 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks { + /// + /// Lightweight helper struct to help manage COM pointer lifetimes. + /// + /// The type of the pointer to wrap internal ref struct ComPtr where TPtr : unmanaged { + /// + /// Get a reference to the wrapped pointer. + /// public unsafe readonly ref TPtr Ref => ref *_pointer; + /// + /// Delegate to release the wrapped pointer. + /// + /// Prefer static delegates for best performance. + /// + /// The type of pointer to release. + /// The pointer to release. public unsafe delegate void ComPtrRelease(TComRelease* source) where TComRelease : unmanaged; @@ -18,33 +32,77 @@ public unsafe delegate void ComPtrRelease(TComRelease* source) private bool _forgotten = false; private unsafe TPtr* _pointer; + /// + /// Create a non-owning ComPtr wrapper. + /// + /// This wrapper will not release the pointer when disposed. + /// + /// The non-owning pointer. public unsafe ComPtr(TPtr* nonOwningPointer) { this._pointer = nonOwningPointer; this.Release = null; } - public unsafe ComPtr(ComPtrRelease? release) - { - this._pointer = null; - this.Release = release; - } - + /// + /// Create an owning ComPtr wrapper. + /// + /// Ownership of the passed pointer is moved into the ComPtr struct, and will be released on dispose. + /// + /// The pointer to move into the wrapper. + /// The delegate to call on dispose to release the pointer. public unsafe ComPtr(TPtr* pointer, ComPtrRelease? release) { this._pointer = pointer; this.Release = release; } + /// + /// Casting delegate to query a new interface of this COM pointer. + /// + /// 'Casting' here is generalized to mean any call to create a new COM handle. + /// + /// The type of the source pointer to cast. + /// The source pointer to cast. + /// The resource GUID of the target interface. + /// The pointer that will contain the new handle. public unsafe delegate void ComPtrCast(TSourcePtr* source, Guid* riid, void** outPtr) where TSourcePtr: unmanaged; + + /// + /// Casting delegate to query a new interface of this COM pointer. + /// + /// 'Casting' here is generalized to mean any call to create a new COM handle. + /// + /// The type of the source pointer to cast. + /// The source pointer to cast. + /// The resource GUID of the target interface. + /// The pointer that will contain the new handle. + /// The result of the casting operation. public unsafe delegate int ComPtrCastInt(TSourcePtr* source, Guid* riid, void** outPtr) where TSourcePtr : unmanaged; + + /// + /// Casting delegate to query a new interface of this COM pointer. + /// + /// 'Casting' here is generalized to mean any call to create a new COM handle. + /// + /// The type of the source pointer to cast. + /// The source pointer to cast. + /// The pointer that will contain the new handle. public unsafe delegate void ComPtrCastT(TSourcePtr* source, TOutPtr** outPtr) where TSourcePtr : unmanaged where TOutPtr : unmanaged; + /// + /// Casts this COM pointer to another interface, creating a new handle. + /// + /// The type of the new interface. + /// The delegate to cast this pointer with. + /// The resource GUID of the target interface. + /// The delegate that releases the new handle. + /// The new casted handle as a wrapped ComPtr public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtr.ComPtrRelease? release) where TOut: unmanaged { @@ -53,6 +111,15 @@ public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtr + /// Casts this COM pointer to another interface, creating a new handle. + /// + /// The type of the new interface. + /// The delegate to cast this pointer with. + /// The resource GUID of the target interface. + /// The delegate that releases the new handle. + /// The result of the casting operation. + /// The new casted handle as a wrapped ComPtr public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPtr.ComPtrRelease? release, out int result) where TOut : unmanaged { @@ -61,6 +128,13 @@ public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPt return new(outPointer, release); } + /// + /// Casts this COM pointer to another interface, creating a new handle. + /// + /// The type of the new interface. + /// The delegate to cast this pointer with. + /// The delegate that releases the new handle. + /// The new casted handle as a wrapped ComPtr public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr.ComPtrRelease? release) where TOut : unmanaged { @@ -69,6 +143,11 @@ public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr return new(outPointer, release); } + /// + /// Moves ownership of the pointer out of the ComPtr, and invalidates the ComPtr wrapper. + /// Disposing the ComPtr after calling Forget will do nothing. The caller is therefore responsible for releasing the handle afterwards. + /// + /// The wrapped pointer. public unsafe TPtr* Forget() { this._forgotten = true; @@ -77,9 +156,23 @@ public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr return @this; } + /// + /// Explicit cast to the containing pointer. This method is unsafe. + /// + /// The ComPtr handle. + /// The pointer contained by the ComPtr wrapper. public static unsafe TPtr* operator ~(ComPtr ptr) => ptr._pointer; + /// + /// Implicit cast to the containing pointer. This method is unsafe. + /// + /// The ComPtr handle. public static unsafe implicit operator TPtr* (ComPtr ptr) => ptr._pointer; + + /// + /// Implicit cast to a pointer of the containing pointer. This method is unsafe. + /// + /// The ComPtr handle. public static unsafe implicit operator TPtr**(ComPtr ptr) => AddressOf(ptr._pointer); [MethodImpl(MethodImplOptions.AggressiveInlining)] From ef4d5a842aed097d337b66112c6443d2867a5a6b Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 6 Feb 2022 19:18:49 -0500 Subject: [PATCH 22/38] ingame(overlay): abstract dx11 texture handling --- .../Hooks/ComPtr.cs | 5 +- .../Hooks/Direct3D11/Direct3D11Hook.cs | 232 ++---------------- .../Direct3D11/Direct3D11OverlayTexture.cs | 179 ++++++++++++++ .../Render/ImGuiFullscreenOverlay.cs | 49 ++++ 4 files changed, 256 insertions(+), 209 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs index f54f9a1ac..d3192e643 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs @@ -103,6 +103,7 @@ public unsafe delegate void ComPtrCastT(TSourcePtr* source, /// The resource GUID of the target interface. /// The delegate that releases the new handle. /// The new casted handle as a wrapped ComPtr + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtr.ComPtrRelease? release) where TOut: unmanaged { @@ -120,6 +121,7 @@ public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtrThe delegate that releases the new handle. /// The result of the casting operation. /// The new casted handle as a wrapped ComPtr + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPtr.ComPtrRelease? release, out int result) where TOut : unmanaged { @@ -135,6 +137,7 @@ public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPt /// The delegate to cast this pointer with. /// The delegate that releases the new handle. /// The new casted handle as a wrapped ComPtr + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr.ComPtrRelease? release) where TOut : unmanaged { @@ -175,7 +178,7 @@ public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr /// The ComPtr handle. public static unsafe implicit operator TPtr**(ComPtr ptr) => AddressOf(ptr._pointer); - [MethodImpl(MethodImplOptions.AggressiveInlining)] + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public void Dispose() { if (_forgotten) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index a516c4473..7d2d4e02d 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -35,23 +35,19 @@ internal class Direct3D11Hook private bool resizeBuffersLock = false; private bool presentLock = false; - private unsafe IDXGIKeyedMutex* overlayTextureMutex = null; - private unsafe ID3D11ShaderResourceView* overlayShaderResourceView = null; - private unsafe ID3D11Texture2D* overlayTexture = null; - private Texture2DDesc overlayTextureDesc = new(); - private IntPtr overlayTextureHandle = IntPtr.Zero; - private unsafe ID3D11RenderTargetView* renderTargetView = null; private bool imguiInitialized = false; protected RenderDoc renderDoc; - public object MutexMutex = new(); + public Direct3D11OverlayTexture Overlay { get; } D3D11 API { get; } public Direct3D11Hook(IngameIpc ipc) { this.IngameIpc = ipc; this.API = D3D11.GetApi(); + this.Overlay = new(); + (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) = GetDirect3D11VTable(); unsafe { @@ -67,6 +63,7 @@ public Direct3D11Hook(IngameIpc ipc) { Console.WriteLine("NODOC"); } + } private void CommandReceivedHandler(GameWindowCommand command) @@ -74,53 +71,10 @@ private void CommandReceivedHandler(GameWindowCommand command) if (command.Type == GameWindowCommandType.OverlayTextureEvent) { Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)command.TextureEvent.SourceProcessId); - if (process.IsNull) - { - Console.WriteLine("unable to open source process..."); - return; - } - - if (!Kernel32.DuplicateHandle(process, command.TextureEvent.TextureHandle, Kernel32.GetCurrentProcess(), out IntPtr dupedHandle, - 0, false, Kernel32.DUPLICATE_HANDLE_OPTIONS.DUPLICATE_SAME_ACCESS)) - { - Console.WriteLine("unable to dupe handle"); - return; - }; - - Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")}"); - - // Release old texture - unsafe - { - if (this.overlayTexture != null) - { - this.overlayShaderResourceView->Release(); - this.overlayTextureMutex->Release(); - this.overlayTexture->Release(); - - lock (this.MutexMutex) - { - this.overlayTexture = null; - this.overlayTextureMutex = null; - this.overlayShaderResourceView = null; - } - } - } - // close the handle - Kernel32.CloseHandle(this.overlayTextureHandle); - - // new texture will be fetched on next paint. - this.overlayTextureHandle = dupedHandle; + this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle); } } - private void Open() - { - bool open = true; - DearImguiSharp.ImGui.ShowDemoWindow(ref open); - } - public void Activate() { Console.WriteLine("Activated D3D11 Hooks"); @@ -153,16 +107,14 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount var bufferResult = this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); // Request new overlay texture - //ID3D11Device* device = null; - //ID3D11Texture2D* backBuffer = null; + Texture2DDesc desc = new(); var swapChainWrap = new ComPtr(swapChain); - using var backBuffer = swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release(), out int _); - using var device = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release(), out int _); - - //int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); - //swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); + using var backBuffer = + swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release(), out int _); + using var device = + swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release(), out int _); backBuffer.Ref.GetDesc(ref desc); @@ -186,7 +138,6 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount ID3D11Resource.Guid, static r => r->Release(), out int _); ID3D11RenderTargetView* newRenderTargetView = null; - //backBuffer.Ref.QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); renderTargetView = newRenderTargetView; @@ -213,30 +164,16 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin try { ComPtr swapChainWrap = new(swapChain); - - //ID3D11Device* device = null; - //ID3D11Device1* device1 = null; - //ID3D11DeviceContext* deviceContext = null; SwapChainDesc swapChainDesc = new(); using var device = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); using var device1 = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device1.Guid, static d => d->Release()); using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); - //device.Ref.GetImmediateContext(deviceContext.OutPointerT); - - //swapChain->GetDevice(RiidOf(ID3D11Device.Guid), (void**)&device); - //swapChain->GetDevice(RiidOf(ID3D11Device1.Guid), (void**)&device1); swapChain->GetDesc(ref swapChainDesc); - - //device->GetImmediateContext(ref deviceContext); - // Haven't received texture handle yet - if (this.overlayTextureHandle == IntPtr.Zero) + if (!this.Overlay.ReadyToInitialize) { - //ID3D11Texture2D* backBuffer = null; - //int res = swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); - Texture2DDesc desc = new(); using var backBuffer = swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); @@ -256,170 +193,52 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin } }); } - - //backBuffer->Release(); - //deviceContext->Release(); - //device1->Release(); - //device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } // need to refresh texture - if (this.overlayTextureHandle != IntPtr.Zero && this.overlayTexture == null) + if (!this.Overlay.PrepareForPaint(device1, swapChainDesc.OutputWindow)) { - - ID3D11ShaderResourceView* texSRV = null; // moved to this.overlayShaderResourceView - //IDXGIKeyedMutex* texMtx = null; // moved to this.overlayTextureMutex - - - //ID3D11Resource* texRsrc = null; // dropped - - using ComPtr tex2D = - device1.Cast((p, g, o) => p->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), g, o), ID3D11Texture2D.Guid, d => d->Release(), out int res); - if (res != 0) - { - Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); - //device1->Release(); - //deviceContext->Release(); - //device->Release(); - - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - } - - // todo: error check - //int res; - //if ((res = device1.Ref.OpenSharedResource1(this.overlayTextureHandle.ToPointer(), RiidOf(ID3D11Texture2D.Guid), (void**)&tex2D)) != 0) - //{ - // Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); - // //device1->Release(); - // //deviceContext->Release(); - // //device->Release(); - - // return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - //} - - Console.WriteLine("Opened shared texture."); - using var texMtx = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), IDXGIKeyedMutex.Guid, d => d->Release()); - - //tex2D.Ref.QueryInterface(RiidOf(IDXGIKeyedMutex.Guid), (void**)&texMtx); - - if (~texMtx == null) - { - Console.WriteLine("Mutex not yet ready, can not open shared texture."); - - // not ready yet. - //device1->Release(); - //deviceContext->Release(); - //device->Release(); - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - - } - - Texture2DDesc tex2dDesc = new(); // dropped - - tex2D.Ref.GetDesc(ref tex2dDesc); - - using var texRsrc = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, d => d->Release()); - - //tex2D.Ref.QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&texRsrc); - - this.overlayTextureMutex = texMtx.Forget(); - this.overlayTexture = tex2D.Forget(); - this.overlayTextureDesc = tex2dDesc; - - ShaderResourceViewDesc srvDesc = new() - { - Format = tex2dDesc.Format, - ViewDimension = D3DSrvDimension.D3D101SrvDimensionTexture2D, - Anonymous = new(texture2D: new() - { - MipLevels = tex2dDesc.MipLevels, - MostDetailedMip = 0, - }) - }; - - // not worth using ComPtr here because capture and lifetime of texSRV.. - device.Ref.CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); - - // Get text src - this.overlayShaderResourceView = texSRV; + Console.WriteLine("Failed to refresh texture for output window"); + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } if (!this.imguiInitialized) { - //ID3D11Texture2D* backBuffer = null; - //ID3D11Resource* backBufferResource = null; ImGui.ImGuiImplWin32Init(swapChainDesc.OutputWindow); // todo: init wndproc ImGui.ImGuiImplDX11Init(~device, ~deviceContext); - //swapChain->GetBuffer(0, RiidOf(ID3D11Texture2D.Guid), (void**)&backBuffer); using var backBuffer = - swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); - using var backBufferResource = backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, p => p->Release()); + swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); + using var backBufferResource = backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static p => p->Release()); ID3D11RenderTargetView* newRenderTargetView = null; - //backBuffer->QueryInterface(RiidOf(ID3D11Resource.Guid), (void**)&backBufferResource); device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); if (this.renderTargetView != null) this.renderTargetView->Release(); this.renderTargetView = newRenderTargetView; - - //backBufferResource->Release(); - //backBuffer->Release(); this.imguiInitialized = true; } - lock (this.MutexMutex) + + lock (this.Overlay.TextureMutex) { - this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); + this.Overlay.AcquireSync(); ImGui.ImGuiImplDX11NewFrame(); ImGui.ImGuiImplWin32NewFrame(); ImGui.NewFrame(); - // -- render function - bool x = true; - //ImGui.ShowDemoWindow(ref x); - // bruh i need to make a shaderesourceview??? - - var vec = new DearImguiSharp.ImVec2.__Internal() { x = this.overlayTextureDesc.Width, y = this.overlayTextureDesc.Height }; - var uv_min = new DearImguiSharp.ImVec2.__Internal() { x = 0f, y = 0f }; // Top-left - var uv_max = new DearImguiSharp.ImVec2.__Internal() { x = 1f, y = 1f }; - var tint_col = new DearImguiSharp.ImVec4.__Internal() { w = 1.0f, x = 1.0f, y = 1.0f, z = 1.0f, }; - var border_col = new DearImguiSharp.ImVec4.__Internal() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; - var wndowpad = new DearImguiSharp.ImVec2.__Internal() { x = 0.0f, y = 0.0f }; - - var viewPort = ImGui.GetMainViewport(); - ImGui.SetNextWindowPos(viewPort.Pos, 1, new() + + this.Overlay.Paint(static (srv, w, h) => { - X = 0f, - Y = 0f, + ImGuiFullscreenOverlay.Render(srv, w, h); }); - ImGui.SetNextWindowSize(viewPort.Size, 1); - ImGui.SetNextWindowFocus(); - //ImGui.PushStyleColorU32((int)DearImguiSharp.ImGuiCol.ImGuiColWindowBg, unchecked((uint)-1)); - ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowPadding, wndowpad); - ImGui.__Internal.PushStyleVarVec2((int)DearImguiSharp.ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, wndowpad); - - ImGui.Begin("DirectX11 Texture Test", ref x, - (int)(0 - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoMove - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoResize - | DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoBackground - //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings - )); - - ImGui.__Internal.Image((nint)this.overlayShaderResourceView, vec, uv_min, uv_max, tint_col, border_col); - - ImGui.PopStyleVar(1); - ImGui.End(); - - // -- render function + ImGui.EndFrame(); ImGui.Render(); @@ -431,11 +250,8 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin using var drawData = ImGui.GetDrawData(); ImGui.ImGuiImplDX11RenderDrawData(drawData); - this.overlayTextureMutex->ReleaseSync(0); + this.Overlay.ReleaseSync(); } - //deviceContext->Release(); - //device1->Release(); - //device->Release(); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } finally diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs new file mode 100644 index 000000000..81684a04e --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs @@ -0,0 +1,179 @@ +using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; +using Silk.NET.DXGI; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Vanara.PInvoke; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 +{ + internal class Direct3D11OverlayTexture + { + private unsafe IDXGIKeyedMutex* overlayTextureMutex = null; + private unsafe ID3D11ShaderResourceView* overlayShaderResourceView = null; + private unsafe ID3D11Texture2D* overlayTexture = null; + + private Texture2DDesc overlayTextureDesc = new(); + private IntPtr overlayTextureHandle = IntPtr.Zero; + private nint outputWindowHandle = 0; + + public readonly object TextureMutex = new(); + + private bool ReadyToPaint { get; set; } + public bool ReadyToInitialize => this.overlayTextureHandle != IntPtr.Zero; + + public void AcquireSync() + { + unsafe { + this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); + } + } + + public void ReleaseSync() + { + unsafe + { + this.overlayTextureMutex->ReleaseSync(0); + } + } + + public bool Refresh(int owningPid, nint textureHandle) + { + var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); + if (process.IsNull) + { + Console.WriteLine("unable to open source process..."); + return false; + } + + if (!Kernel32.DuplicateHandle(process, textureHandle, Kernel32.GetCurrentProcess(), out IntPtr dupedHandle, + 0, false, Kernel32.DUPLICATE_HANDLE_OPTIONS.DUPLICATE_SAME_ACCESS)) + { + Console.WriteLine("unable to dupe handle"); + return false; + }; + + Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")}"); + + // Release old texture + unsafe + { + if (this.overlayTexture != null) + { + this.Invalidate(); + } + } + + // close old the handle + Kernel32.CloseHandle(this.overlayTextureHandle); + + // new texture will be fetched on next paint. + this.overlayTextureHandle = dupedHandle; + return true; + } + + private unsafe void Invalidate() + { + lock (this.TextureMutex) + { + if (this.overlayShaderResourceView != null) + this.overlayShaderResourceView->Release(); + + if (this.overlayTextureMutex != null) + this.overlayTextureMutex->Release(); + + if (this.overlayTexture != null) + this.overlayTexture->Release(); + + this.overlayTexture = null; + this.overlayTextureMutex = null; + this.overlayShaderResourceView = null; + + this.ReadyToPaint = false; + } + } + + public unsafe bool PrepareForPaint(ComPtr device1Handle, nint outputWindowHandle) + { + if (this.ReadyToPaint && this.outputWindowHandle == outputWindowHandle) + { + return true; + } + + this.Invalidate(); + + ID3D11ShaderResourceView* texSRV = null; // moved to this.overlayShaderResourceView + + using ComPtr tex2D = + device1Handle.Cast((p, g, o) => + p->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), g, o), ID3D11Texture2D.Guid, static d => d->Release(), out int res); + + using ComPtr deviceHandle = + device1Handle.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Device.Guid, static d => d->Release()); + + if (res != 0) + { + Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); + + return false; + } + + // todo: error check + Console.WriteLine("Opened shared texture."); + using var texMtx = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), IDXGIKeyedMutex.Guid, static d => d->Release()); + + if (~texMtx == null) + { + Console.WriteLine("Mutex not yet ready, can not open shared texture."); + + // not ready yet. + return false; + + } + + Texture2DDesc tex2dDesc = new(); // dropped + + tex2D.Ref.GetDesc(ref tex2dDesc); + using var texRsrc = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static d => d->Release()); + + this.overlayTextureMutex = texMtx.Forget(); + this.overlayTexture = tex2D.Forget(); + this.overlayTextureDesc = tex2dDesc; + + ShaderResourceViewDesc srvDesc = new() // dropped + { + Format = tex2dDesc.Format, + ViewDimension = D3DSrvDimension.D3D101SrvDimensionTexture2D, + Anonymous = new(texture2D: new() + { + MipLevels = tex2dDesc.MipLevels, + MostDetailedMip = 0, + }) + }; + + // not worth using ComPtr for texSrc here because capture and lifetime of texSRV.. + deviceHandle.Ref.CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); + + // Get text src + this.overlayShaderResourceView = texSRV; + this.outputWindowHandle = outputWindowHandle; + + this.ReadyToPaint = true; + return true; + } + + public void Paint(Action renderFn) + { + lock (this.TextureMutex) + { + unsafe + { + renderFn((nint)this.overlayShaderResourceView, overlayTextureDesc.Width, overlayTextureDesc.Height); + } + } + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs new file mode 100644 index 000000000..2f720cfef --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs @@ -0,0 +1,49 @@ +using DearImguiSharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render +{ + internal static class ImGuiFullscreenOverlay + { + public static readonly DearImguiSharp.ImVec2 Zero2H = new() { X = 0f, Y = 0f }; + public static readonly DearImguiSharp.ImVec2.__Internal Zero2 = new() { x = 0f, y = 0f }; + public static readonly DearImguiSharp.ImVec2.__Internal One2 = new() { x = 1f, y = 1f }; + public static readonly DearImguiSharp.ImVec4.__Internal One4 = new() { w = 1.0f, x = 1.0f, y = 1.0f, z = 1.0f }; + public static readonly DearImguiSharp.ImVec4.__Internal Zero4 = new() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; + + [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] + public static void Render(nint imageHandle, float width, float height) + { + bool showClose = false; + + var browserDim = new ImVec2.__Internal() { x = width, y = height }; + + var viewPort = ImGui.GetMainViewport(); + ImGui.SetNextWindowPos(viewPort.Pos, 1, Zero2H); + ImGui.SetNextWindowSize(viewPort.Size, 1); + ImGui.SetNextWindowFocus(); + + ImGui.__Internal.PushStyleVarVec2((int)ImGuiStyleVar.ImGuiStyleVarWindowPadding, Zero2); + ImGui.__Internal.PushStyleVarVec2((int)ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, Zero2); + + ImGui.Begin("Browser Window", ref showClose, + (int)(0 + | ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration + | ImGuiWindowFlags.ImGuiWindowFlagsNoMove + | ImGuiWindowFlags.ImGuiWindowFlagsNoResize + | ImGuiWindowFlags.ImGuiWindowFlagsNoBackground + //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings + )); + + ImGui.__Internal.Image(imageHandle, browserDim, Zero2, One2, One4, Zero4); + + ImGui.PopStyleVar(1); + ImGui.End(); + } + } +} From bbaf8fe47763e0d586ba0fd875c4afc1a0003875 Mon Sep 17 00:00:00 2001 From: chyyran Date: Mon, 7 Feb 2022 02:01:19 -0500 Subject: [PATCH 23/38] overlay(imgui): abstract imgui --- .../Hooks/Direct3D11/Direct3D11Hook.cs | 76 +++--------- .../Direct3D11/Direct3D11ImGuiInstance.cs | 113 ++++++++++++++++++ .../Direct3D11/Direct3D11OverlayTexture.cs | 1 - .../Render/ImGuiFullscreenOverlay.cs | 28 ++--- .../Render/ImGuiInstance.cs | 32 +---- .../Render/ImGuiWndProcHandler.cs | 45 +++++++ 6 files changed, 187 insertions(+), 108 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 7d2d4e02d..3c5a53cdd 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -20,10 +20,8 @@ using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using Silk.NET.DXGI; using Snowflake.Orchestration.Ingame; -using Vanara.PInvoke; -using static Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.GuidHelpers; -using Evergine.Bindings.RenderDoc; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -37,11 +35,12 @@ internal class Direct3D11Hook private unsafe ID3D11RenderTargetView* renderTargetView = null; private bool imguiInitialized = false; - protected RenderDoc renderDoc; public Direct3D11OverlayTexture Overlay { get; } + public Direct3D11ImGuiInstance ImGuiInst { get; } D3D11 API { get; } + public Direct3D11Hook(IngameIpc ipc) { this.IngameIpc = ipc; @@ -58,12 +57,7 @@ public Direct3D11Hook(IngameIpc ipc) this.Context = ImGui.CreateContext(null); ImGui.StyleColorsDark(null); this.IngameIpc.CommandReceived += CommandReceivedHandler; - RenderDoc.Load(out this.renderDoc); - if (this.renderDoc == null) - { - Console.WriteLine("NODOC"); - } - + this.ImGuiInst = new Direct3D11ImGuiInstance(); } private void CommandReceivedHandler(GameWindowCommand command) @@ -93,23 +87,14 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount resizeBuffersLock = true; try { - // todo: handle device reset - if (this.imguiInitialized) - { - // Destroy existing ImGui - if (renderTargetView != null) - renderTargetView->Release(); - renderTargetView = null; - - ImGui.ImGuiImplDX11InvalidateDeviceObjects(); - } - - var bufferResult = this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); + this.ImGuiInst.DiscardSwapchain(); + + var bufferResult = + this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); // Request new overlay texture Texture2DDesc desc = new(); - var swapChainWrap = new ComPtr(swapChain); using var backBuffer = swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release(), out int _); @@ -132,18 +117,8 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount }); // Recreate ImGui objects - if (this.imguiInitialized) - { - using var backBufferResource = backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), - ID3D11Resource.Guid, - static r => r->Release(), out int _); - ID3D11RenderTargetView* newRenderTargetView = null; - device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); - - renderTargetView = newRenderTargetView; - ImGui.ImGuiImplDX11CreateDeviceObjects(); - } + this.ImGuiInst.RefreshTargetView(swapChainWrap); return bufferResult; } finally @@ -203,29 +178,7 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } - if (!this.imguiInitialized) - { - ImGui.ImGuiImplWin32Init(swapChainDesc.OutputWindow); - - // todo: init wndproc - - ImGui.ImGuiImplDX11Init(~device, ~deviceContext); - - using var backBuffer = - swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); - using var backBufferResource = backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static p => p->Release()); - - ID3D11RenderTargetView* newRenderTargetView = null; - - device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); - - if (this.renderTargetView != null) - this.renderTargetView->Release(); - - this.renderTargetView = newRenderTargetView; - this.imguiInitialized = true; - } - + this.ImGuiInst.PrepareForPaint(swapChainWrap); lock (this.Overlay.TextureMutex) { @@ -239,15 +192,14 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin ImGuiFullscreenOverlay.Render(srv, w, h); }); + ImGui.__Internal.ShowDemoWindow(null); ImGui.EndFrame(); ImGui.Render(); - ImGui.UpdatePlatformWindows(); - ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); - - // set rendertargetview - deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); + //ImGui.UpdatePlatformWindows(); + //ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + ImGuiInst.SetRenderTargets(deviceContext); using var drawData = ImGui.GetDrawData(); ImGui.ImGuiImplDX11RenderDrawData(drawData); this.Overlay.ReleaseSync(); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs new file mode 100644 index 000000000..6c13dce5b --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -0,0 +1,113 @@ +using ImGui = DearImguiSharp; +using Silk.NET.Direct3D11; +using Silk.NET.DXGI; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 +{ + internal class Direct3D11ImGuiInstance + { + public unsafe ID3D11RenderTargetView* renderTargetView = null; + private nint outputWindowHandle = 0; + + private bool DevicesReady { get; set; } + private bool SurfacesReady { get; set; } + private bool SwapchainReady { get; set; } = false; + + public unsafe void DiscardSwapchain() + { + this.InvalidateRenderTarget(); + ImGui.ImGui.ImGuiImplDX11InvalidateDeviceObjects(); + this.SwapchainReady = false; + } + + private void RefreshSwapchain() + { + ImGui.ImGui.ImGuiImplDX11CreateDeviceObjects(); + this.SwapchainReady = true; + } + private unsafe void InvalidateRenderTarget() + { + if (this.renderTargetView == null) + return; + + this.renderTargetView->Release(); + this.renderTargetView = null; + this.SurfacesReady = false; + } + + public unsafe void RefreshTargetView(ComPtr swapChain) + { + this.InvalidateRenderTarget(); + + SwapChainDesc desc = new(); + swapChain.Ref.GetDesc(ref desc); + + using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); + + using var backBuffer = + swapChain.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); + + using var backBufferResource = + backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static p => p->Release()); + + ID3D11RenderTargetView* newRenderTargetView = null; + device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); + this.renderTargetView = newRenderTargetView; + this.SurfacesReady = true; + + if (!this.SwapchainReady) + { + this.RefreshSwapchain(); + } + } + + private void InvalidateDevices() + { + ImGui.ImGui.ImGuiImplWin32Shutdown(); + ImGui.ImGui.ImGuiImplDX11Shutdown(); + this.DevicesReady = false; + } + + public unsafe bool PrepareForPaint(ComPtr swapChain) + { + SwapChainDesc desc = new(); + swapChain.Ref.GetDesc(ref desc); + + if (desc.OutputWindow != this.outputWindowHandle) + { + Console.WriteLine("Swapchain outdated and so discarded."); + this.DiscardSwapchain(); + this.InvalidateDevices(); + } + + if (!this.DevicesReady) + { + using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), + ID3D11Device.Guid, static d => d->Release()); + using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); + + ImGui.ImGui.ImGuiImplWin32Init(desc.OutputWindow); + ImGui.ImGui.ImGuiImplDX11Init(~device, ~deviceContext); + this.DevicesReady = true; + } + + if (!this.SurfacesReady) + { + this.RefreshTargetView(swapChain); + } + + this.outputWindowHandle = desc.OutputWindow; + return true; + } + + public unsafe void SetRenderTargets(ComPtr deviceContext) + { + deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs index 81684a04e..e88d44fb2 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs @@ -117,7 +117,6 @@ public unsafe bool PrepareForPaint(ComPtr device1Handle, nint out if (res != 0) { Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); - return false; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs index 2f720cfef..a2d661aec 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs @@ -19,31 +19,31 @@ internal static class ImGuiFullscreenOverlay [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public static void Render(nint imageHandle, float width, float height) { - bool showClose = false; - var browserDim = new ImVec2.__Internal() { x = width, y = height }; var viewPort = ImGui.GetMainViewport(); ImGui.SetNextWindowPos(viewPort.Pos, 1, Zero2H); ImGui.SetNextWindowSize(viewPort.Size, 1); - ImGui.SetNextWindowFocus(); + //ImGui.SetNextWindowFocus(); ImGui.__Internal.PushStyleVarVec2((int)ImGuiStyleVar.ImGuiStyleVarWindowPadding, Zero2); ImGui.__Internal.PushStyleVarVec2((int)ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, Zero2); - ImGui.Begin("Browser Window", ref showClose, - (int)(0 - | ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration - | ImGuiWindowFlags.ImGuiWindowFlagsNoMove - | ImGuiWindowFlags.ImGuiWindowFlagsNoResize - | ImGuiWindowFlags.ImGuiWindowFlagsNoBackground - //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings - )); - + unsafe + { + ImGui.__Internal.Begin("Browser Window", null, + (int)(0 + | ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration + | ImGuiWindowFlags.ImGuiWindowFlagsNoMove + | ImGuiWindowFlags.ImGuiWindowFlagsNoResize + | ImGuiWindowFlags.ImGuiWindowFlagsNoBackground + //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings + )); + } ImGui.__Internal.Image(imageHandle, browserDim, Zero2, One2, One4, Zero4); - ImGui.PopStyleVar(1); - ImGui.End(); + ImGui.__Internal.PopStyleVar(1); + ImGui.__Internal.End(); } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs index 1ed7945b4..571238b05 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs @@ -52,6 +52,7 @@ public unsafe void DrawFrame() ImGui.EndFrame(); ImGui.Render(); + // dont do this. if ((ImGui.GetIO().ConfigFlags & (int)ImGuiConfigFlags.ImGuiConfigFlagsViewportsEnable) > 0) { ImGui.UpdatePlatformWindows(); @@ -83,37 +84,6 @@ private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam var io = ImGui.GetIO(); ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); - - - //switch (message) - //{ - // case WindowMessage.WM_KILLFOCUS: - // return IntPtr.Zero; - - // case WindowMessage.WM_ACTIVATE: - // case WindowMessage.WM_ACTIVATEAPP: - // if (wParam == IntPtr.Zero) - // return IntPtr.Zero; - - // break; - //} - //if (Options.IgnoreWindowUnactivate) - //{ - // var message = (WindowMessage)msg; - // switch (message) - // { - // case WindowMessage.WM_KILLFOCUS: - // return IntPtr.Zero; - - // case WindowMessage.WM_ACTIVATE: - // case WindowMessage.WM_ACTIVATEAPP: - // if (wParam == IntPtr.Zero) - // return IntPtr.Zero; - - // break; - // } - //} - return this.WndProcHook.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs new file mode 100644 index 000000000..cc2ab8b57 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs @@ -0,0 +1,45 @@ +using DearImguiSharp; +using Reloaded.Hooks; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render +{ + // No need to update windows because we don't support viewports. + internal abstract class ImGuiWndProcHandler + { + protected nint outputWindowHandle = 0; + + private WndProcHook? WndProcHook = null; + + private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam) + { + var io = ImGui.GetIO(); + ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); + return this.WndProcHook?.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam) ?? -1; + } + + protected void InvalidateIO() + { + ImGui.ImGuiImplWin32Shutdown(); + this.WndProcHook?.Hook.Disable(); + this.WndProcHook = null; + } + + protected bool PrepareForIO(nint outputWindowHandle) + { + if (this.WndProcHook != null && this.outputWindowHandle == outputWindowHandle) + return true; + this.InvalidateIO(); + + ImGui.ImGuiImplWin32Init(outputWindowHandle); + this.WndProcHook = new WndProcHook(outputWindowHandle, this.WndProcHandler); + this.WndProcHook.Hook.Activate(); + return true; + } + } +} From 78076980af5c042713c1c7cea0b6fe3aced9110e Mon Sep 17 00:00:00 2001 From: chyyran Date: Mon, 7 Feb 2022 02:28:14 -0500 Subject: [PATCH 24/38] overlay(dx11): move resize logic into Present hook --- .../Hooks/Direct3D11/Direct3D11Hook.cs | 110 +++++++----------- .../Direct3D11/Direct3D11ImGuiInstance.cs | 1 + .../Direct3D11/Direct3D11OverlayTexture.cs | 15 ++- 3 files changed, 55 insertions(+), 71 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 3c5a53cdd..37f1f3a8a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -88,38 +88,7 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount try { this.ImGuiInst.DiscardSwapchain(); - - var bufferResult = - this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); - - // Request new overlay texture - - Texture2DDesc desc = new(); - var swapChainWrap = new ComPtr(swapChain); - using var backBuffer = - swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release(), out int _); - using var device = - swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release(), out int _); - - backBuffer.Ref.GetDesc(ref desc); - - Console.WriteLine($"Hook Resize ({desc.Width}, {desc.Height})"); - - this.IngameIpc.SendRequest(new() - { - Magic = GameWindowCommand.GameWindowMagic, - Type = GameWindowCommandType.WindowResizeEvent, - ResizeEvent = new() - { - Height = (int)(desc.Height), - Width = (int)(desc.Width), - } - }); - - // Recreate ImGui objects - - this.ImGuiInst.RefreshTargetView(swapChainWrap); - return bufferResult; + return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); } finally { @@ -146,28 +115,31 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); swapChain->GetDesc(ref swapChainDesc); - // Haven't received texture handle yet - if (!this.Overlay.ReadyToInitialize) - { - Texture2DDesc desc = new(); - using var backBuffer = - swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); - backBuffer.Ref.GetDesc(ref desc); - if (desc.Height != 0 && desc.Width != 0) + Texture2DDesc backBufferDesc = new(); + using var backBuffer = + swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); + backBuffer.Ref.GetDesc(ref backBufferDesc); + + if (!this.Overlay.SizeMatchesViewport(backBufferDesc.Width, backBufferDesc.Height)) + { + Console.WriteLine($"Requesting resize to {backBufferDesc.Width} x {backBufferDesc.Height}"); + this.IngameIpc.SendRequest(new() { - Console.WriteLine("Requesting resize because no texture handle"); - this.IngameIpc.SendRequest(new() + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.WindowResizeEvent, + ResizeEvent = new() { - Magic = GameWindowCommand.GameWindowMagic, - Type = GameWindowCommandType.WindowResizeEvent, - ResizeEvent = new() - { - Height = (int)(desc.Height), - Width = (int)(desc.Width), - } - }); - } + Height = (int)(backBufferDesc.Height), + Width = (int)(backBufferDesc.Width), + } + }); + } + + // Haven't received texture handle yet + if (!this.Overlay.ReadyToInitialize) + { + Console.WriteLine("Texture handle not ready."); return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } @@ -182,27 +154,29 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin lock (this.Overlay.TextureMutex) { - this.Overlay.AcquireSync(); - ImGui.ImGuiImplDX11NewFrame(); - ImGui.ImGuiImplWin32NewFrame(); - ImGui.NewFrame(); - - this.Overlay.Paint(static (srv, w, h) => + if (this.Overlay.AcquireSync()) { - ImGuiFullscreenOverlay.Render(srv, w, h); - }); + ImGui.ImGuiImplDX11NewFrame(); + ImGui.ImGuiImplWin32NewFrame(); + ImGui.NewFrame(); - ImGui.__Internal.ShowDemoWindow(null); - ImGui.EndFrame(); - ImGui.Render(); + this.Overlay.Paint(static (srv, w, h) => + { + ImGuiFullscreenOverlay.Render(srv, w, h); + }); + + ImGui.__Internal.ShowDemoWindow(null); + ImGui.EndFrame(); + ImGui.Render(); - //ImGui.UpdatePlatformWindows(); - //ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + //ImGui.UpdatePlatformWindows(); + //ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); - ImGuiInst.SetRenderTargets(deviceContext); - using var drawData = ImGui.GetDrawData(); - ImGui.ImGuiImplDX11RenderDrawData(drawData); - this.Overlay.ReleaseSync(); + ImGuiInst.SetRenderTargets(deviceContext); + using var drawData = ImGui.GetDrawData(); + ImGui.ImGuiImplDX11RenderDrawData(drawData); + this.Overlay.ReleaseSync(); + } } return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs index 6c13dce5b..171141e32 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -30,6 +30,7 @@ private void RefreshSwapchain() ImGui.ImGui.ImGuiImplDX11CreateDeviceObjects(); this.SwapchainReady = true; } + private unsafe void InvalidateRenderTarget() { if (this.renderTargetView == null) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs index e88d44fb2..081dbca74 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs @@ -21,15 +21,24 @@ internal class Direct3D11OverlayTexture private nint outputWindowHandle = 0; public readonly object TextureMutex = new(); - private bool ReadyToPaint { get; set; } public bool ReadyToInitialize => this.overlayTextureHandle != IntPtr.Zero; - public void AcquireSync() + public bool SizeMatchesViewport(uint width, uint height) + { + return (width == overlayTextureDesc.Width) && (height == overlayTextureDesc.Height); + } + + public bool AcquireSync() { - unsafe { + unsafe + { + if (this.overlayTextureMutex == null) + return false; + this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); } + return true; } public void ReleaseSync() From 27acd23b935c0955e483e9a3da9562ba5553ee4a Mon Sep 17 00:00:00 2001 From: chyyran Date: Mon, 7 Feb 2022 22:21:14 -0500 Subject: [PATCH 25/38] runtime(chore): cleanup old code --- .../Hooks/Direct3D11/Direct3D11Hook.cs | 7 +- .../Direct3D11/Direct3D11ImGuiInstance.cs | 41 +++- .../Hooks/Direct3D9/Direct3D9Hook.cs | 198 ------------------ .../Direct3D9/Direct3DDevice9Ordinals.cs | 150 ------------- .../Render/ImGuiInstance.cs | 91 -------- .../Render/ImGuiWndProcHandler.cs | 7 +- 6 files changed, 44 insertions(+), 450 deletions(-) delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 37f1f3a8a..5489ba226 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -11,7 +11,6 @@ using Silk.NET.Direct3D11; using Silk.NET.Core.Native; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9; using X64 = Reloaded.Hooks.Definitions.X64; using X86 = Reloaded.Hooks.Definitions.X86; @@ -54,8 +53,7 @@ public Direct3D11Hook(IngameIpc ipc) this.ResizeBuffersHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.ResizeBuffers, this.ResizeBuffersImpl); } //this.ImGuiInstance = new ImGuiInstance(Open); - this.Context = ImGui.CreateContext(null); - ImGui.StyleColorsDark(null); + this.IngameIpc.CommandReceived += CommandReceivedHandler; this.ImGuiInst = new Direct3D11ImGuiInstance(); } @@ -200,7 +198,6 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin public IHook PresentHook { get; } public IHook ResizeBuffersHook { get; } - public ImGuiInstance ImGuiInstance { get; } public IngameIpc IngameIpc { get; } public DearImguiSharp.ImGuiContext Context { get; } @@ -222,7 +219,7 @@ private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChai Numerator = 60, Denominator = 1 }, - Format = Format.FormatR8G8B8A8Unorm, + Format = Format.FormatR8G8B8A8Unorm, ScanlineOrdering = ModeScanlineOrder.ModeScanlineOrderUnspecified, Scaling = ModeScaling.ModeScalingUnspecified, }, diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs index 171141e32..36dcc50c4 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -6,17 +6,28 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { - internal class Direct3D11ImGuiInstance + internal class Direct3D11ImGuiInstance : IDisposable { public unsafe ID3D11RenderTargetView* renderTargetView = null; private nint outputWindowHandle = 0; + private bool disposedValue; private bool DevicesReady { get; set; } private bool SurfacesReady { get; set; } private bool SwapchainReady { get; set; } = false; + public ImGui.ImGuiContext Context { get; } + private ImGuiWndProcHandler WndProc { get; } + + public Direct3D11ImGuiInstance() + { + this.Context = ImGui.ImGui.CreateContext(null); + this.WndProc = new ImGuiWndProcHandler(); + ImGui.ImGui.StyleColorsDark(null); + } public unsafe void DiscardSwapchain() { @@ -69,7 +80,7 @@ public unsafe void RefreshTargetView(ComPtr swapChain) private void InvalidateDevices() { - ImGui.ImGui.ImGuiImplWin32Shutdown(); + this.WndProc.InvalidateIO(); ImGui.ImGui.ImGuiImplDX11Shutdown(); this.DevicesReady = false; } @@ -92,7 +103,7 @@ public unsafe bool PrepareForPaint(ComPtr swapChain) ID3D11Device.Guid, static d => d->Release()); using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); - ImGui.ImGui.ImGuiImplWin32Init(desc.OutputWindow); + this.WndProc.InitializeIO(desc.OutputWindow); ImGui.ImGui.ImGuiImplDX11Init(~device, ~deviceContext); this.DevicesReady = true; } @@ -110,5 +121,29 @@ public unsafe void SetRenderTargets(ComPtr deviceContext) { deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + unsafe + { + if (renderTargetView != null) + renderTargetView->Release(); + } + this.Context?.Dispose(); + } + disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs deleted file mode 100644 index 4ce30174c..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3D9Hook.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using Reloaded.Hooks; -using Reloaded.Hooks.Definitions; -using Reloaded.Hooks.Tools; -using Silk.NET.Direct3D9; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9; - -using X64 = Reloaded.Hooks.Definitions.X64; -using X86 = Reloaded.Hooks.Definitions.X86; - -using ImGui = DearImguiSharp.ImGui; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks -{ - internal class Direct3D9Hook - { - const int D3D9_DEVICE_METHOD_COUNT = 119; - const int D3D9Ex_DEVICE_METHOD_COUNT = 15; - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate int EndScene(IDirect3DDevice9* device); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate int Reset(IDirect3DDevice9* device, PresentParameters* presentParams); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate int Release(IDirect3DDevice9* device); - - private IHook EndSceneHook { get; } - private IHook ResetHook { get; } - private bool Initialized { get; set; } - public IntPtr WindowHandle { get; private set; } - - private ImGuiInstance ImGuiInstance { get; } - private bool _endSceneLock; - private bool _resetLock; - - public Direct3D9Hook() - { - var vtable = GetDirect3Device9VTable(); - unsafe - { - this.EndSceneHook = vtable.CreateFunctionHook((int)Direct3DDevice9Ordinals.EndScene, this.EndSceneImpl); - this.ResetHook = vtable.CreateFunctionHook((int)Direct3DDevice9Ordinals.Reset, this.ResetImpl); - } - this.ImGuiInstance = new ImGuiInstance(Open); - } - - private void Open() - { - bool open = true; - DearImguiSharp.ImGui.ShowDemoWindow(ref open); - } - public void Activate() - { - Console.WriteLine("Activated D3D9 Hooks"); - this.EndSceneHook.Activate(); - this.ResetHook.Activate(); - } - - private unsafe int EndSceneImpl(IDirect3DDevice9* device) - { - if (_endSceneLock) - { - return EndSceneHook.OriginalFunction(device); - } - _endSceneLock = true; - IDirect3DSwapChain9* swapChain = null; - - try - { - device->GetSwapChain(0, ref swapChain); - var createParams = new DeviceCreationParameters(); - var presentParams = new PresentParameters(); - device->GetCreationParameters(ref createParams); - swapChain->GetPresentParameters(ref presentParams); - - - nint windowHandle = createParams.HFocusWindow == 0 ? presentParams.HDeviceWindow : createParams.HFocusWindow; - - if (!this.Initialized) - { - // do init code - if (windowHandle == 0) - return this.EndSceneHook.OriginalFunction(device); - Console.WriteLine($"[DX9 EndScene] Init, Window Handle {(long)windowHandle:X}"); - ImGuiInstance.Activate(windowHandle); - ImGui.ImGuiImplDX9Init((void*)device); - this.Initialized = true; - } - - if (!this.ImGuiInstance.CheckWindowHandle(windowHandle)) - { - Console.WriteLine($"[DX9 EndScene] Discarding Window Handle {(long)windowHandle:X}"); - return this.EndSceneHook.OriginalFunction(device); - } - - ImGui.ImGuiImplDX9NewFrame(); - this.ImGuiInstance.DrawFrame(); - using var drawData = ImGui.GetDrawData(); - ImGui.ImGuiImplDX9RenderDrawData(drawData); - - return EndSceneHook.OriginalFunction(device); - } - finally - { - if (swapChain != null) - swapChain->Release(); - _endSceneLock = false; - } - } - - private unsafe int ResetImpl(IDirect3DDevice9* device, PresentParameters* presentParams) - { - Console.WriteLine("reset"); - if (_resetLock) - { - ResetHook.OriginalFunction.Invoke(device, presentParams); - } - _resetLock = true; - try - { - - if (!this.ImGuiInstance.CheckWindowHandle(presentParams->HDeviceWindow)) - { - Console.WriteLine($"[DX9 EndScene] Discarding Window Handle {(long)presentParams->HDeviceWindow:X}"); - return this.ResetHook.OriginalFunction(device, presentParams); - } - - Console.WriteLine($"[DX9 Reset] Reset with Handle {(long)presentParams->HDeviceWindow:X}"); - ImGui.ImGuiImplDX9InvalidateDeviceObjects(); - var result = ResetHook.OriginalFunction.Invoke(device, presentParams); - ImGui.ImGuiImplDX9CreateDeviceObjects(); - return result; - } - finally - { - _resetLock = false; - } - } - - private unsafe VirtualFunctionTable GetDirect3Device9VTable() - { - using var window = new RenderWindow(); - var d3d9Api = D3D9.GetApi(); - IDirect3D9* d3d9 = d3d9Api.Direct3DCreate9(D3D9.SdkVersion); - - var d3d9Params = new PresentParameters() - { - BackBufferWidth = 0, - BackBufferHeight = 0, - BackBufferFormat = Format.FmtUnknown, - BackBufferCount = 0, - MultiSampleType = MultisampleType.MultisampleNone, - MultiSampleQuality = 0, - SwapEffect = Swapeffect.SwapeffectDiscard, - Windowed = 1, - EnableAutoDepthStencil = 0, - AutoDepthStencilFormat = Format.FmtUnknown, - Flags = 0, - FullScreenRefreshRateInHz = 0, - PresentationInterval = 0, - HDeviceWindow = window.WindowHandle.DangerousGetHandle() - }; - - IDirect3DDevice9* device = null; - - var result = d3d9->CreateDevice(D3D9.AdapterDefault, Devtype.DevtypeNullref, window.WindowHandle.DangerousGetHandle(), - D3D9.CreateSoftwareVertexprocessing | D3D9.CreateDisableDriverManagement, ref d3d9Params, ref device); - - if (result < 0) - { - Console.WriteLine("Failed to create D3D9 Device"); - d3d9->Release(); - throw new PlatformNotSupportedException("Direct3D9 not supported."); - } - Console.WriteLine("Succeeded D3D9 Init"); - - VirtualFunctionTable vtable = VirtualFunctionTable.FromObject((nint)device, D3D9_DEVICE_METHOD_COUNT); - device->Release(); - d3d9->Release(); - return vtable; - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs deleted file mode 100644 index f7e490184..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D9/Direct3DDevice9Ordinals.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D9 -{ - public enum Direct3DDevice9Ordinals - { - QueryInterface = 0, - AddRef = 1, - Release = 2, - TestCooperativeLevel = 3, - GetAvailableTextureMem = 4, - EvictManagedResources = 5, - GetDirect3D = 6, - GetDeviceCaps = 7, - GetDisplayMode = 8, - GetCreationParameters = 9, - SetCursorProperties = 10, - SetCursorPosition = 11, - ShowCursor = 12, - CreateAdditionalSwapChain = 13, - GetSwapChain = 14, - GetNumberOfSwapChains = 15, - Reset = 16, - Present = 17, - GetBackBuffer = 18, - GetRasterStatus = 19, - SetDialogBoxMode = 20, - SetGammaRamp = 21, - GetGammaRamp = 22, - CreateTexture = 23, - CreateVolumeTexture = 24, - CreateCubeTexture = 25, - CreateVertexBuffer = 26, - CreateIndexBuffer = 27, - CreateRenderTarget = 28, - CreateDepthStencilSurface = 29, - UpdateSurface = 30, - UpdateTexture = 31, - GetRenderTargetData = 32, - GetFrontBufferData = 33, - StretchRect = 34, - ColorFill = 35, - CreateOffscreenPlainSurface = 36, - SetRenderTarget = 37, - GetRenderTarget = 38, - SetDepthStencilSurface = 39, - GetDepthStencilSurface = 40, - BeginScene = 41, - EndScene = 42, - Clear = 43, - SetTransform = 44, - GetTransform = 45, - MultiplyTransform = 46, - SetViewport = 47, - GetViewport = 48, - SetMaterial = 49, - GetMaterial = 50, - SetLight = 51, - GetLight = 52, - LightEnable = 53, - GetLightEnable = 54, - SetClipPlane = 55, - GetClipPlane = 56, - SetRenderState = 57, - GetRenderState = 58, - CreateStateBlock = 59, - BeginStateBlock = 60, - EndStateBlock = 61, - SetClipStatus = 62, - GetClipStatus = 63, - GetTexture = 64, - SetTexture = 65, - GetTextureStageState = 66, - SetTextureStageState = 67, - GetSamplerState = 68, - SetSamplerState = 69, - ValidateDevice = 70, - SetPaletteEntries = 71, - GetPaletteEntries = 72, - SetCurrentTexturePalette = 73, - GetCurrentTexturePalette = 74, - SetScissorRect = 75, - GetScissorRect = 76, - SetSoftwareVertexProcessing = 77, - GetSoftwareVertexProcessing = 78, - SetNPatchMode = 79, - GetNPatchMode = 80, - DrawPrimitive = 81, - DrawIndexedPrimitive = 82, - DrawPrimitiveUP = 83, - DrawIndexedPrimitiveUP = 84, - ProcessVertices = 85, - CreateVertexDeclaration = 86, - SetVertexDeclaration = 87, - GetVertexDeclaration = 88, - SetFVF = 89, - GetFVF = 90, - CreateVertexShader = 91, - SetVertexShader = 92, - GetVertexShader = 93, - SetVertexShaderConstantF = 94, - GetVertexShaderConstantF = 95, - SetVertexShaderConstantI = 96, - GetVertexShaderConstantI = 97, - SetVertexShaderConstantB = 98, - GetVertexShaderConstantB = 99, - SetStreamSource = 100, - GetStreamSource = 101, - SetStreamSourceFreq = 102, - GetStreamSourceFreq = 103, - SetIndices = 104, - GetIndices = 105, - CreatePixelShader = 106, - SetPixelShader = 107, - GetPixelShader = 108, - SetPixelShaderConstantF = 109, - GetPixelShaderConstantF = 110, - SetPixelShaderConstantI = 111, - GetPixelShaderConstantI = 112, - SetPixelShaderConstantB = 113, - GetPixelShaderConstantB = 114, - DrawRectPatch = 115, - DrawTriPatch = 116, - DeletePatch = 117, - CreateQuery = 118, - } - - public enum Direct3DDevice9ExOrdinals - { - SetConvolutionMonoKernel = 119, - ComposeRects = 120, - PresentEx = 121, - GetGPUThreadPriority = 122, - SetGPUThreadPriority = 123, - WaitForVBlank = 124, - CheckResourceResidency = 125, - SetMaximumFrameLatency = 126, - GetMaximumFrameLatency = 127, - CheckDeviceState_ = 128, - CreateRenderTargetEx = 129, - CreateOffscreenPlainSurfaceEx = 130, - CreateDepthStencilSurfaceEx = 131, - ResetEx = 132, - GetDisplayModeEx = 133, - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs deleted file mode 100644 index 571238b05..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiInstance.cs +++ /dev/null @@ -1,91 +0,0 @@ -using DearImguiSharp; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using static Vanara.PInvoke.User32; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render -{ - internal class ImGuiInstance - { - public bool Initialized { get; private set; } - public nint WindowHandle { get; private set; } - public ImGuiContext Context { get; private set; } - private Action DoRender { get; set; } - private WndProcHook WndProcHook { get; set; } - - public ImGuiInstance(Action render) - { - this.DoRender = render; - this.Context = ImGui.CreateContext(null); - ImGui.StyleColorsDark(null); - } - - public void Activate(nint hWnd) - { - if (this.Initialized) - return; - if (hWnd == 0) - throw new ArgumentException("hWnd can not be 0"); - this.WindowHandle = hWnd; - Console.WriteLine($"[ImguiHook] Init with Window Handle {(long)WindowHandle:X}"); - ImGui.ImGuiImplWin32Init(this.WindowHandle); - this.WndProcHook = new WndProcHook(hWnd, WndProcHandler); - this.WndProcHook.Hook.Activate(); - this.Initialized = true; - } - - /// - /// [Internal] Called from renderer implementation, renders a new frame. - /// - public unsafe void DrawFrame() - { - ImGui.ImGuiImplWin32NewFrame(); - ImGui.NewFrame(); - this.DoRender(); - ImGui.EndFrame(); - ImGui.Render(); - - // dont do this. - if ((ImGui.GetIO().ConfigFlags & (int)ImGuiConfigFlags.ImGuiConfigFlagsViewportsEnable) > 0) - { - ImGui.UpdatePlatformWindows(); - ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); - } - } - - /// - /// [Internal] Checks if the provided window handle matches the window handle associated with this context. - /// If not initialised, accepts only IntPtr.Zero - /// - /// The window handle. - public bool CheckWindowHandle(nint windowHandle) - { - // Check for exact handle. - if (windowHandle != 0) - return windowHandle == WindowHandle || !Initialized; - - return false; - } - - - /// - /// Hooks WndProc to allow for input for ImGui - /// - //[UnmanagedCallersOnly(CallConvs = new[] { typeof(CallConvStdcall) })] - private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam) - { - var io = ImGui.GetIO(); - ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); - - return this.WndProcHook.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam); - } - - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs index cc2ab8b57..281b4be66 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs @@ -10,7 +10,7 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render { // No need to update windows because we don't support viewports. - internal abstract class ImGuiWndProcHandler + internal class ImGuiWndProcHandler { protected nint outputWindowHandle = 0; @@ -23,14 +23,14 @@ private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam return this.WndProcHook?.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam) ?? -1; } - protected void InvalidateIO() + public void InvalidateIO() { ImGui.ImGuiImplWin32Shutdown(); this.WndProcHook?.Hook.Disable(); this.WndProcHook = null; } - protected bool PrepareForIO(nint outputWindowHandle) + public bool InitializeIO(nint outputWindowHandle) { if (this.WndProcHook != null && this.outputWindowHandle == outputWindowHandle) return true; @@ -39,6 +39,7 @@ protected bool PrepareForIO(nint outputWindowHandle) ImGui.ImGuiImplWin32Init(outputWindowHandle); this.WndProcHook = new WndProcHook(outputWindowHandle, this.WndProcHandler); this.WndProcHook.Hook.Activate(); + this.outputWindowHandle = outputWindowHandle; return true; } } From 33f49d68519781c9304ef13f33ebae91248dd331 Mon Sep 17 00:00:00 2001 From: chyyran Date: Tue, 8 Feb 2022 01:57:42 -0500 Subject: [PATCH 26/38] overlay(ogl): hook ogl --- .../EntryPoint.cs | 8 +-- .../Hooks/Direct3D11/Direct3D11Hook.cs | 7 --- .../Hooks/OpenGL/OpenGLHook.cs | 60 +++++++++++++++++++ ...chestration.Overlay.Runtime.Windows.csproj | 9 ++- 4 files changed, 70 insertions(+), 14 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 2c0f3a8f6..36fdca010 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -6,6 +6,7 @@ using System.IO.Pipes; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using Snowflake.Orchestration.Ingame; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -18,10 +19,8 @@ public static int Main(nint args, int sizeBytes) { return Main(); } - catch (Exception e) + catch { - File.WriteAllText("E:\\Emulators\\error_s.log", e.ToString()); - Console.WriteLine(e); Console.ReadLine(); return 1; } @@ -41,7 +40,8 @@ private static int Main() var result = await ipc.ConnectAsync(); Console.WriteLine($"IPC Connection: {result}"); ipc.Listen(); - new Direct3D11Hook(ipc).Activate(); + //new Direct3D11Hook(ipc).Activate(); + new OpenGLHook(ipc).Activate(); }); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 5489ba226..3c5404c3a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -11,7 +11,6 @@ using Silk.NET.Direct3D11; using Silk.NET.Core.Native; - using X64 = Reloaded.Hooks.Definitions.X64; using X86 = Reloaded.Hooks.Definitions.X86; @@ -20,8 +19,6 @@ using Silk.NET.DXGI; using Snowflake.Orchestration.Ingame; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; - namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { internal class Direct3D11Hook @@ -32,9 +29,6 @@ internal class Direct3D11Hook private bool resizeBuffersLock = false; private bool presentLock = false; - private unsafe ID3D11RenderTargetView* renderTargetView = null; - private bool imguiInitialized = false; - public Direct3D11OverlayTexture Overlay { get; } public Direct3D11ImGuiInstance ImGuiInst { get; } @@ -52,7 +46,6 @@ public Direct3D11Hook(IngameIpc ipc) this.PresentHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.Present, this.PresentImpl); this.ResizeBuffersHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.ResizeBuffers, this.ResizeBuffersImpl); } - //this.ImGuiInstance = new ImGuiInstance(Open); this.IngameIpc.CommandReceived += CommandReceivedHandler; this.ImGuiInst = new Direct3D11ImGuiInstance(); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs new file mode 100644 index 000000000..61773e30f --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs @@ -0,0 +1,60 @@ +using Reloaded.Hooks; +using Reloaded.Hooks.Definitions; +using Silk.NET.Core.Contexts; +using Silk.NET.OpenGL; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using Vanara.PInvoke; +using X64 = Reloaded.Hooks.Definitions.X64; +using X86 = Reloaded.Hooks.Definitions.X86; +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL +{ + internal class OpenGLHook + { + GL NativeOpenGLApi { get; } + Kernel32.SafeHINSTANCE OpenGLHandle { get; } + public OpenGLHook(IngameIpc ingameIpc) + { + this.IngameIpc = ingameIpc; + (this.OpenGLHandle, this.NativeOpenGLApi) = GetOpenGLGlobalInstance(); + + this.SwapBuffersHook = ReloadedHooks.Instance.CreateHook + (this.SwapBuffersImpl, this.NativeOpenGLApi.Context.GetProcAddress("wglSwapBuffers")); + } + + public void Activate() + { + Console.WriteLine("Activated OpenGL Hooks"); + this.SwapBuffersHook.Activate(); + } + + public IngameIpc IngameIpc { get; } + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate int SwapBuffers(HDC deviceContext); + + public int SwapBuffersImpl(HDC deviceContext) + { + return this.SwapBuffersHook.OriginalFunction(deviceContext); + } + + public IHook SwapBuffersHook { get; } + + private static (Kernel32.SafeHINSTANCE, GL) GetOpenGLGlobalInstance() + { + var handle = Kernel32.GetModuleHandle("opengl32"); + if (handle.IsNull) + { + throw new PlatformNotSupportedException("OpenGL not supported."); + } + + return (handle, GL.GetApi(handle.GetProcAddress)); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index 5ea682127..d24c26290 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -25,9 +25,12 @@ - - - + + + + + + From a02b1807ca63e4693ccd480deb033c6bb1ac14d3 Mon Sep 17 00:00:00 2001 From: chyyran Date: Fri, 11 Feb 2022 02:22:36 -0500 Subject: [PATCH 27/38] ipc(renderer): hook ogl and some cleanup --- .../Browser/CefSharpBrowserTab.cs | 2 +- ...hestration.Overlay.Renderer.Windows.csproj | 2 +- .../EntryPoint.cs | 4 +-- .../Direct3D11/Direct3D11ImGuiInstance.cs | 34 +++++++++++-------- .../Direct3D11/Direct3D11OverlayTexture.cs | 4 ++- .../Hooks/OpenGL/OpenGLHook.cs | 17 ++++++++++ .../Hooks/OpenGL/OpenGLImGuiInstance.cs | 28 +++++++++++++++ .../Hooks/WndProc/WndProcHook.cs | 4 +-- src/Snowflake.sln | 32 ++++++++++++++++- 9 files changed, 104 insertions(+), 23 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index babcc8220..5f7034883 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -60,7 +60,7 @@ public async Task InitializeAsync(Uri uri) switch (cmd.Type) { case GameWindowCommandType.WindowResizeEvent: - System.Drawing.Size size = new(cmd.ResizeEvent.Width, cmd.ResizeEvent.Height); + System.Drawing.Size size = new(Math.Max(1, cmd.ResizeEvent.Width), Math.Max(1, cmd.ResizeEvent.Height)); this.Renderer.Resize(size); this.Browser.Size = size; this.Browser.GetBrowserHost().Invalidate(PaintElementType.View); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj index 37a5f7e8e..4c02c9bfc 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 36fdca010..c90022d46 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -40,8 +40,8 @@ private static int Main() var result = await ipc.ConnectAsync(); Console.WriteLine($"IPC Connection: {result}"); ipc.Listen(); - //new Direct3D11Hook(ipc).Activate(); - new OpenGLHook(ipc).Activate(); + new Direct3D11Hook(ipc).Activate(); + //new OpenGLHook(ipc).Activate(); }); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs index 36dcc50c4..368ee18a9 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -1,12 +1,9 @@ using ImGui = DearImguiSharp; using Silk.NET.Direct3D11; using Silk.NET.DXGI; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using System.Runtime.CompilerServices; + namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -64,11 +61,12 @@ public unsafe void RefreshTargetView(ComPtr swapChain) using var backBuffer = swapChain.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); - using var backBufferResource = - backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static p => p->Release()); + //using var backBufferResource = + // backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static p => p->Release()); + // CRT accepts a Tex2D pointer just fine. ID3D11RenderTargetView* newRenderTargetView = null; - device.Ref.CreateRenderTargetView(backBufferResource, null, &newRenderTargetView); + device.Ref.CreateRenderTargetView((ID3D11Resource*)~backBuffer, null, &newRenderTargetView); this.renderTargetView = newRenderTargetView; this.SurfacesReady = true; @@ -78,6 +76,18 @@ public unsafe void RefreshTargetView(ComPtr swapChain) } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private unsafe void InitializeDevices(ComPtr swapChain, nint hWnd) + { + using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), + ID3D11Device.Guid, static d => d->Release()); + using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); + + this.WndProc.InitializeIO(hWnd); + ImGui.ImGui.ImGuiImplDX11Init(new(~device), new(~deviceContext)); + this.DevicesReady = true; + } + private void InvalidateDevices() { this.WndProc.InvalidateIO(); @@ -99,13 +109,7 @@ public unsafe bool PrepareForPaint(ComPtr swapChain) if (!this.DevicesReady) { - using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), - ID3D11Device.Guid, static d => d->Release()); - using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); - - this.WndProc.InitializeIO(desc.OutputWindow); - ImGui.ImGui.ImGuiImplDX11Init(~device, ~deviceContext); - this.DevicesReady = true; + this.InitializeDevices(swapChain, desc.OutputWindow); } if (!this.SurfacesReady) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs index 081dbca74..2a0cd80f4 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs @@ -145,7 +145,8 @@ public unsafe bool PrepareForPaint(ComPtr device1Handle, nint out Texture2DDesc tex2dDesc = new(); // dropped tex2D.Ref.GetDesc(ref tex2dDesc); - using var texRsrc = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static d => d->Release()); + using var texRsrc = tex2D.Cast + (static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static d => d->Release()); this.overlayTextureMutex = texMtx.Forget(); this.overlayTexture = tex2D.Forget(); @@ -163,6 +164,7 @@ public unsafe bool PrepareForPaint(ComPtr device1Handle, nint out }; // not worth using ComPtr for texSrc here because capture and lifetime of texSRV.. + // CSRV requires a ID3D11Resource..? deviceHandle.Ref.CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); // Get text src diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs index 61773e30f..4b55ddd21 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs @@ -9,6 +9,7 @@ using System.Text; using System.Threading.Tasks; using Vanara.PInvoke; +using static Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc.WndProcHook; using X64 = Reloaded.Hooks.Definitions.X64; using X86 = Reloaded.Hooks.Definitions.X86; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL @@ -17,6 +18,15 @@ internal class OpenGLHook { GL NativeOpenGLApi { get; } Kernel32.SafeHINSTANCE OpenGLHandle { get; } + HWND ActiveHwnd { get; set; } + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + + public delegate nint WndProcCallback(nint hWnd, uint msg, nint wParam, nint lParam); + + public OpenGLHook(IngameIpc ingameIpc) { this.IngameIpc = ingameIpc; @@ -41,10 +51,17 @@ public void Activate() public int SwapBuffersImpl(HDC deviceContext) { + HWND renderingHwnd = User32.WindowFromDC(deviceContext); + User32.GetClientRect(renderingHwnd, out RECT lpRect); + int width = lpRect.right - lpRect.left; + int height = lpRect.bottom - lpRect.top; + + return this.SwapBuffersHook.OriginalFunction(deviceContext); } public IHook SwapBuffersHook { get; } + public IHook? WndProcHook { get; set; } private static (Kernel32.SafeHINSTANCE, GL) GetOpenGLGlobalInstance() { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs new file mode 100644 index 000000000..c6f28f161 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs @@ -0,0 +1,28 @@ +using ImGui = DearImguiSharp; + +using Silk.NET.OpenGL; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; +using DearImguiSharp; +using Vanara.PInvoke; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL +{ + internal class OpenGLImGuiInstance + { + private bool DevicesReady { get; set; } + + public OpenGLImGuiInstance() + { + this.Context = ImGui.ImGui.CreateContext(null); + this.WndProc = new ImGuiWndProcHandler(); + ImGui.ImGui.StyleColorsDark(null); + } + + public void InitializeDevices(HDC hDC, nint hWnd) + { + this.WndProc.InitializeIO(hWnd); + } + public ImGuiContext Context { get; } + public ImGuiWndProcHandler WndProc { get; } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs index 1274385dc..027c61918 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs @@ -28,12 +28,12 @@ internal class WndProcHook public WndProcHook(nint hWnd, WndProcCallback callback) { - var wndProcAddr = Native.GetWindowLong(hWnd, Native.GWL.GWL_WNDPROC); + var wndProcAddr = WndProcNative.GetWindowLong(hWnd, WndProcNative.GWL.GWL_WNDPROC); this.Callback = callback; this.Hook = ReloadedHooks.Instance.CreateHook(this.Callback, (long)wndProcAddr); } - static class Native + public static class WndProcNative { [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern IntPtr GetModuleHandle(string lpModuleName); diff --git a/src/Snowflake.sln b/src/Snowflake.sln index c31a3afc4..214dde7cd 100644 --- a/src/Snowflake.sln +++ b/src/Snowflake.sln @@ -98,7 +98,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Plugin.Scraping.F EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Support.Orchestration.Overlay.Runtime.Windows", "Snowflake.Support.Orchestration.Overlay.Runtime.Windows\Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj", "{32E9E587-B66D-419E-ACE0-261D1688709E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Snowflake.Support.Orchestration.Overlay.Renderer.Windows", "Snowflake.Support.Orchestration.Overlay.Renderer.Windows\Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj", "{BCE0A187-9D45-41C7-8C6F-D0AE20D97866}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Support.Orchestration.Overlay.Renderer.Windows", "Snowflake.Support.Orchestration.Overlay.Renderer.Windows\Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj", "{BCE0A187-9D45-41C7-8C6F-D0AE20D97866}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ImGuiBackendsTemp", "ImGuiBackendsTemp", "{50E3E120-745A-4798-86CA-FDD16E5846F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGuiBackends.Direct3D11", "..\..\ImGuiNETBackends\ImGuiNETBackends\ImGuiBackends.Direct3D11\ImGuiBackends.Direct3D11.csproj", "{3D635E77-66BF-40C3-BE0A-4B8805DA5954}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -954,6 +958,30 @@ Global {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x64.Build.0 = Release|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x86.ActiveCfg = Release|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x86.Build.0 = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x64.ActiveCfg = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x64.Build.0 = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x86.ActiveCfg = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x86.Build.0 = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|Any CPU.ActiveCfg = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|Any CPU.Build.0 = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x64.ActiveCfg = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x64.Build.0 = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x86.ActiveCfg = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x86.Build.0 = Debug|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|Any CPU.Build.0 = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x64.ActiveCfg = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x64.Build.0 = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x86.ActiveCfg = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x86.Build.0 = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|Any CPU.ActiveCfg = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|Any CPU.Build.0 = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x64.ActiveCfg = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x64.Build.0 = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x86.ActiveCfg = Release|Any CPU + {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -998,6 +1026,8 @@ Global {09F314C3-054A-4907-96A4-C180976FA4DD} = {86D5767F-B32D-4E1B-BBA2-B87A0DEC6C6F} {32E9E587-B66D-419E-ACE0-261D1688709E} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {BCE0A187-9D45-41C7-8C6F-D0AE20D97866} = {FBD15674-246A-4C57-B865-07214D8BB9A1} + {50E3E120-745A-4798-86CA-FDD16E5846F1} = {FBD15674-246A-4C57-B865-07214D8BB9A1} + {3D635E77-66BF-40C3-BE0A-4B8805DA5954} = {50E3E120-745A-4798-86CA-FDD16E5846F1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {532F5D25-2D82-45B3-BF60-DDA40A0FB795} From 60bc5a19663a7757cc4812d28d0cc601fd351742 Mon Sep 17 00:00:00 2001 From: chyyran Date: Sun, 13 Feb 2022 19:24:21 -0500 Subject: [PATCH 28/38] imgui: cleanup to use ImGui.NET --- .../Browser/Direct3DDevice.cs | 5 +- .../EntryPoint.cs | 4 +- .../Hooks/Direct3D11/Direct3D11Hook.cs | 34 ++++---- .../Direct3D11/Direct3D11ImGuiInstance.cs | 61 ++++++++++----- .../Hooks/IOverlayTexture.cs | 10 +++ .../Hooks/OpenGL/OpenGLHook.cs | 76 +++++++++++++++--- .../Hooks/OpenGL/OpenGLImGuiInstance.cs | 62 ++++++++++++--- .../Hooks/OpenGL/OpenGLOverlayTexture.cs | 67 ++++++++++++++++ .../Hooks/OpenGL/WglNativeContext.cs | 77 +++++++++++++++++++ .../Hooks/WndProc/WndProcHook.cs | 7 +- .../Render/ImGuiFullscreenOverlay.cs | 41 +++++----- .../Render/ImGuiWndProcHandler.cs | 12 +-- ...chestration.Overlay.Runtime.Windows.csproj | 6 +- src/Snowflake.sln | 27 +++++++ 14 files changed, 397 insertions(+), 92 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs index 1dc353fd9..5cf202294 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs @@ -1,5 +1,6 @@ using Silk.NET.Core.Native; using Silk.NET.Direct3D11; +using Silk.NET.Direct3D12; using System; using System.Collections.Generic; using System.Drawing; @@ -11,8 +12,8 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser { internal class Direct3DDevice : IDisposable { - private D3D11 Direct3D; - private unsafe ID3D11Device* RenderDevice; + private D3D12 Direct3D; + private unsafe ID3D12Device* RenderDevice; private unsafe ID3D11DeviceContext* RenderContext; private bool disposedValue; private static readonly D3DFeatureLevel[] FEATURE_LEVELS = new[] { D3DFeatureLevel.D3DFeatureLevel111 }; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index c90022d46..36fdca010 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -40,8 +40,8 @@ private static int Main() var result = await ipc.ConnectAsync(); Console.WriteLine($"IPC Connection: {result}"); ipc.Listen(); - new Direct3D11Hook(ipc).Activate(); - //new OpenGLHook(ipc).Activate(); + //new Direct3D11Hook(ipc).Activate(); + new OpenGLHook(ipc).Activate(); }); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 3c5404c3a..fb6f84fbd 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -14,10 +14,11 @@ using X64 = Reloaded.Hooks.Definitions.X64; using X86 = Reloaded.Hooks.Definitions.X86; -using ImGui = DearImguiSharp.ImGui; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using Silk.NET.DXGI; using Snowflake.Orchestration.Ingame; +using ImGuiNET; +using System.Numerics; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -78,6 +79,7 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount resizeBuffersLock = true; try { + Console.WriteLine($"rz {width}x{height}"); this.ImGuiInst.DiscardSwapchain(); return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); } @@ -141,14 +143,16 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } - this.ImGuiInst.PrepareForPaint(swapChainWrap); - + this.ImGuiInst.PrepareForPaint(swapChainWrap, new Vector2(backBufferDesc.Width, backBufferDesc.Height)); + ImGuiIOPtr io = ImGui.GetIO(); + + //Console.WriteLine($"drawdata {drawData.DisplaySize}"); lock (this.Overlay.TextureMutex) { if (this.Overlay.AcquireSync()) { - ImGui.ImGuiImplDX11NewFrame(); - ImGui.ImGuiImplWin32NewFrame(); + this.ImGuiInst.NewFrame(); + //ImGui.ImGuiImplWin32NewFrame(); ImGui.NewFrame(); this.Overlay.Paint(static (srv, w, h) => @@ -156,19 +160,22 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin ImGuiFullscreenOverlay.Render(srv, w, h); }); - ImGui.__Internal.ShowDemoWindow(null); - ImGui.EndFrame(); - ImGui.Render(); + ImGui.Begin("Fps"); + ImGui.Text($"{io.Framerate}"); + ImGui.End(); - //ImGui.UpdatePlatformWindows(); - //ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + ImGui.ShowDemoWindow(); + ImGui.Render(); - ImGuiInst.SetRenderTargets(deviceContext); - using var drawData = ImGui.GetDrawData(); - ImGui.ImGuiImplDX11RenderDrawData(drawData); + ImGui.UpdatePlatformWindows(); + ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); + ImGuiInst.SetRenderContext(deviceContext); + var drawData = ImGui.GetDrawData(); + this.ImGuiInst.Render(drawData); this.Overlay.ReleaseSync(); } } + return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); } finally @@ -192,7 +199,6 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin public IHook PresentHook { get; } public IHook ResizeBuffersHook { get; } public IngameIpc IngameIpc { get; } - public DearImguiSharp.ImGuiContext Context { get; } private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) GetDirect3D11VTable() { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs index 368ee18a9..b470f48a6 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -1,9 +1,10 @@ -using ImGui = DearImguiSharp; -using Silk.NET.Direct3D11; +using Silk.NET.Direct3D11; using Silk.NET.DXGI; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using System.Runtime.CompilerServices; - +using ImGuiBackends.Direct3D11; +using ImGuiNET; +using System.Numerics; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -16,26 +17,46 @@ internal class Direct3D11ImGuiInstance : IDisposable private bool DevicesReady { get; set; } private bool SurfacesReady { get; set; } private bool SwapchainReady { get; set; } = false; - public ImGui.ImGuiContext Context { get; } - private ImGuiWndProcHandler WndProc { get; } + //private ImGuiWndProcHandler WndProc { get; } + + public ImGuiBackendDirect3D11 Backend { get; } + IntPtr context; public Direct3D11ImGuiInstance() { - this.Context = ImGui.ImGui.CreateContext(null); - this.WndProc = new ImGuiWndProcHandler(); - ImGui.ImGui.StyleColorsDark(null); + context = ImGui.CreateContext(); + ImGui.SetCurrentContext(context); + ImGui.StyleColorsDark(); + + this.Backend = new ImGuiBackendDirect3D11(); + } + + public void NewFrame() + { + this.Backend.NewFrame(); + } + + public void Render(ImDrawDataPtr drawData) + { + this.Backend.RenderDrawData(drawData); } public unsafe void DiscardSwapchain() { this.InvalidateRenderTarget(); - ImGui.ImGui.ImGuiImplDX11InvalidateDeviceObjects(); + + //ImGui.ImGui.ImGuiImplDX11InvalidateDeviceObjects(); + this.Backend.InvalidateDeviceObjects(); this.SwapchainReady = false; } private void RefreshSwapchain() { - ImGui.ImGui.ImGuiImplDX11CreateDeviceObjects(); + if (!this.Backend.CreateDeviceObjects()) + { + Console.WriteLine("Error when creating objects"); + } + //ImGui.ImGui.ImGuiImplDX11CreateDeviceObjects(); this.SwapchainReady = true; } @@ -61,9 +82,6 @@ public unsafe void RefreshTargetView(ComPtr swapChain) using var backBuffer = swapChain.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); - //using var backBufferResource = - // backBuffer.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static p => p->Release()); - // CRT accepts a Tex2D pointer just fine. ID3D11RenderTargetView* newRenderTargetView = null; device.Ref.CreateRenderTargetView((ID3D11Resource*)~backBuffer, null, &newRenderTargetView); @@ -83,19 +101,19 @@ private unsafe void InitializeDevices(ComPtr swapChain, nint hWn ID3D11Device.Guid, static d => d->Release()); using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); - this.WndProc.InitializeIO(hWnd); - ImGui.ImGui.ImGuiImplDX11Init(new(~device), new(~deviceContext)); + //this.WndProc.InitializeIO(hWnd); + this.Backend.Init((nint)~device, (nint)~deviceContext, false); this.DevicesReady = true; } private void InvalidateDevices() { - this.WndProc.InvalidateIO(); - ImGui.ImGui.ImGuiImplDX11Shutdown(); + //this.WndProc.InvalidateIO(); + this.Backend.Shutdown(); this.DevicesReady = false; } - public unsafe bool PrepareForPaint(ComPtr swapChain) + public unsafe bool PrepareForPaint(ComPtr swapChain, Vector2 screenDim) { SwapChainDesc desc = new(); swapChain.Ref.GetDesc(ref desc); @@ -117,11 +135,14 @@ public unsafe bool PrepareForPaint(ComPtr swapChain) this.RefreshTargetView(swapChain); } + ImGuiIOPtr io = ImGui.GetIO(); + io.DisplaySize = screenDim; + this.outputWindowHandle = desc.OutputWindow; return true; } - public unsafe void SetRenderTargets(ComPtr deviceContext) + public unsafe void SetRenderContext(ComPtr deviceContext) { deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); } @@ -137,7 +158,7 @@ protected virtual void Dispose(bool disposing) if (renderTargetView != null) renderTargetView->Release(); } - this.Context?.Dispose(); + //this.Context?.Dispose(); } disposedValue = true; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs new file mode 100644 index 000000000..df0335cb0 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs @@ -0,0 +1,10 @@ +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks +{ + internal interface IOverlayTexture + { + bool AcquireSync(); + void ReleaseSync(); + bool SizeMatchesViewport(uint width, uint height); + bool Refresh(int owningPid, nint textureHandle); + } +} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs index 4b55ddd21..482c41ded 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs @@ -1,7 +1,9 @@ -using Reloaded.Hooks; +using ImGuiNET; +using Reloaded.Hooks; using Reloaded.Hooks.Definitions; using Silk.NET.Core.Contexts; using Silk.NET.OpenGL; +using Silk.NET.OpenGL.Legacy.Extensions.EXT; using System; using System.Collections.Generic; using System.Linq; @@ -12,28 +14,55 @@ using static Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc.WndProcHook; using X64 = Reloaded.Hooks.Definitions.X64; using X86 = Reloaded.Hooks.Definitions.X86; +using Snowflake.Orchestration.Ingame; +using System.Numerics; + namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL { internal class OpenGLHook { - GL NativeOpenGLApi { get; } + GL GlContext { get; } Kernel32.SafeHINSTANCE OpenGLHandle { get; } HWND ActiveHwnd { get; set; } + OpenGLImGuiInstance ImGuiInst { get; } + [X64.Function(X64.CallingConventions.Microsoft)] [X86.Function(X86.CallingConventions.Stdcall)] [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public delegate nint WndProcCallback(nint hWnd, uint msg, nint wParam, nint lParam); + private unsafe delegate* unmanaged wglGetCurrentContext; + private unsafe delegate* unmanaged wglMakeCurrent; + private unsafe delegate* unmanaged wglCreateContext; + + private nint ImGuiContext = 0; public OpenGLHook(IngameIpc ingameIpc) { this.IngameIpc = ingameIpc; - (this.OpenGLHandle, this.NativeOpenGLApi) = GetOpenGLGlobalInstance(); + (this.OpenGLHandle, this.GlContext) = GetOpenGLGlobalInstance(); this.SwapBuffersHook = ReloadedHooks.Instance.CreateHook - (this.SwapBuffersImpl, this.NativeOpenGLApi.Context.GetProcAddress("wglSwapBuffers")); + (this.SwapBuffersImpl, this.GlContext.Context.GetProcAddress("wglSwapBuffers")); + unsafe + { + this.wglGetCurrentContext = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglGetCurrentContext"); + this.wglMakeCurrent = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglMakeCurrent"); + this.wglCreateContext = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglCreateContext"); + } + + this.IngameIpc.CommandReceived += CommandReceivedHandler; + this.ImGuiInst = new(); + } + + private void CommandReceivedHandler(GameWindowCommand command) + { + if (command.Type == GameWindowCommandType.OverlayTextureEvent) + { + Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); + this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle); + } } public void Activate() @@ -49,21 +78,50 @@ public void Activate() [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] public unsafe delegate int SwapBuffers(HDC deviceContext); - public int SwapBuffersImpl(HDC deviceContext) + public unsafe int SwapBuffersImpl(HDC deviceContext) { HWND renderingHwnd = User32.WindowFromDC(deviceContext); + User32.GetClientRect(renderingHwnd, out RECT lpRect); int width = lpRect.right - lpRect.left; int height = lpRect.bottom - lpRect.top; - + nint originalContext = wglGetCurrentContext(); + + if (this.ImGuiContext == 0) + { + this.ImGuiContext = wglCreateContext(deviceContext.DangerousGetHandle()); + } + + Vector2 screenDim = new(width, height); + this.Overlay.PrepareForPaint(this.GlContext, screenDim); + this.ImGuiInst.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle(), screenDim); + //wglMakeCurrent(deviceContext.DangerousGetHandle(), this.ImGuiContext); + + var io = ImGui.GetIO(); + ImGuiInst.NewFrame(); + ImGui.NewFrame(); + + ImGui.Begin("Fps"); + ImGui.Text($"{io.Framerate}"); + ImGui.End(); + + ImGui.ShowDemoWindow(); + ImGui.Render(); + + ImGuiInst.Render(ImGui.GetDrawData()); + + + + //wglMakeCurrent(deviceContext.DangerousGetHandle(), originalContext); return this.SwapBuffersHook.OriginalFunction(deviceContext); } public IHook SwapBuffersHook { get; } public IHook? WndProcHook { get; set; } + public OpenGLOverlayTexture Overlay { get; private set; } - private static (Kernel32.SafeHINSTANCE, GL) GetOpenGLGlobalInstance() + private unsafe static (Kernel32.SafeHINSTANCE, GL) GetOpenGLGlobalInstance() { var handle = Kernel32.GetModuleHandle("opengl32"); if (handle.IsNull) @@ -71,7 +129,7 @@ private static (Kernel32.SafeHINSTANCE, GL) GetOpenGLGlobalInstance() throw new PlatformNotSupportedException("OpenGL not supported."); } - return (handle, GL.GetApi(handle.GetProcAddress)); + return (handle, GL.GetApi(new WglNativeContext(handle))); } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs index c6f28f161..b9be8e743 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs @@ -1,8 +1,9 @@ -using ImGui = DearImguiSharp; - + +using ImGuiBackends.OpenGL3; +using ImGuiNET; using Silk.NET.OpenGL; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; -using DearImguiSharp; +using System.Numerics; using Vanara.PInvoke; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL @@ -10,19 +11,60 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL internal class OpenGLImGuiInstance { private bool DevicesReady { get; set; } + public ImGuiBackendOpenGL Backend { get; } + + IntPtr context; + private object outputWindowHandle; public OpenGLImGuiInstance() { - this.Context = ImGui.ImGui.CreateContext(null); - this.WndProc = new ImGuiWndProcHandler(); - ImGui.ImGui.StyleColorsDark(null); + context = ImGui.CreateContext(); + ImGui.SetCurrentContext(context); + ImGui.StyleColorsDark(); + + this.Backend = new ImGuiBackendOpenGL(); + } + + public void InitializeDevices(GL gl, nint hWnd) + { + this.Backend.Init(gl); + this.Backend.CreateDeviceObjects(); + + this.DevicesReady = true; + //this.WndProc.InitializeIO(hWnd); + } + + public void NewFrame() + { + this.Backend.NewFrame(); + } + + public void Render(ImDrawDataPtr drawData) + { + this.Backend.RenderDrawData(drawData); } - public void InitializeDevices(HDC hDC, nint hWnd) + public unsafe bool PrepareForPaint(GL gl, nint hWnd, Vector2 screenDim) { - this.WndProc.InitializeIO(hWnd); + //if (desc.OutputWindow != this.outputWindowHandle) + //{ + // Console.WriteLine("Swapchain outdated and so discarded."); + // this.DiscardSwapchain(); + // this.InvalidateDevices(); + //} + + if (!this.DevicesReady) + { + this.InitializeDevices(gl, hWnd); + } + + ImGuiIOPtr io = ImGui.GetIO(); + io.DisplaySize = screenDim; + this.outputWindowHandle = hWnd; + return true; } - public ImGuiContext Context { get; } - public ImGuiWndProcHandler WndProc { get; } + + //public ImGuiContext Context { get; } + //public ImGuiWndProcHandler WndProc { get; } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs new file mode 100644 index 000000000..e858862a4 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs @@ -0,0 +1,67 @@ +using Silk.NET.OpenGL; +using Silk.NET.OpenGL.Legacy.Extensions.EXT; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using System.Text; +using System.Threading.Tasks; +using Vanara.PInvoke; +using Legacy = Silk.NET.OpenGL.Legacy; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL +{ + internal class OpenGLOverlayTexture + { + private IntPtr overlayTextureHandle; + + public bool Refresh(int owningPid, nint textureHandle) + { + // todo: unify this with d3d11 + var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); + if (process.IsNull) + { + Console.WriteLine("unable to open source process..."); + return false; + } + + if (!Kernel32.DuplicateHandle(process, textureHandle, Kernel32.GetCurrentProcess(), out IntPtr dupedHandle, + 0, false, Kernel32.DUPLICATE_HANDLE_OPTIONS.DUPLICATE_SAME_ACCESS)) + { + Console.WriteLine("unable to dupe handle"); + return false; + }; + + Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")}"); + + // Release old texture + unsafe + { + //if (this.overlayTexture != null) + //{ + // this.Invalidate(); + //} + } + + // close old the handle + Kernel32.CloseHandle(this.overlayTextureHandle); + + // new texture will be fetched on next paint. + this.overlayTextureHandle = dupedHandle; + return true; + } + + public unsafe bool PrepareForPaint(GL glContext, Vector2 screenDim) + { + Legacy.GL legacyContext = Legacy.GL.GetApi(glContext.Context); + + if (!legacyContext.TryGetExtension(out ExtMemoryObjectWin32 memObjExt)) + { + return false; + } + + memObjExt. + return true; + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs new file mode 100644 index 000000000..97a955db5 --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs @@ -0,0 +1,77 @@ +using Silk.NET.Core.Contexts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using Vanara.PInvoke; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL +{ + internal class WglNativeContext : INativeContext + { + public WglNativeContext(Kernel32.SafeHINSTANCE opengl32) + { + this.LibraryInstance = opengl32; + unsafe + { + nint wglGPA = this.LibraryInstance.GetProcAddress("wglGetProcAddress"); + this.WglGetProcAddress = (delegate* unmanaged)wglGPA; + + if (this.WglGetProcAddress == null) + { + throw new PlatformNotSupportedException("Unable to find wglGetProcAddress in instance handle."); + } + } + } + + private bool disposedValue; + + unsafe readonly delegate* unmanaged WglGetProcAddress; + + public Kernel32.SafeHINSTANCE LibraryInstance { get; } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public nint GetProcAddress(string proc, int? slot = null) + { + nint procAddr; + unsafe + { + procAddr = this.WglGetProcAddress(proc); + } + + if (procAddr == 0) + { + procAddr = Kernel32.GetProcAddress(this.LibraryInstance, proc); + } + + return procAddr; + } + + public bool TryGetProcAddress(string proc, out nint addr, int? slot = null) + { + addr = this.GetProcAddress(proc, slot); + return addr != 0; + } + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + this.LibraryInstance.Dispose(); + } + disposedValue = true; + } + } + + public void Dispose() + { + // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method + Dispose(disposing: true); + GC.SuppressFinalize(this); + } + } +} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs index 027c61918..9cd50c3fe 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using X64 = Reloaded.Hooks.Definitions.X64; +using X64 = Reloaded.Hooks.Definitions.X64; using X86 = Reloaded.Hooks.Definitions.X86; using System.Runtime.InteropServices; using Reloaded.Hooks.Definitions; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs index a2d661aec..5ea987959 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs @@ -1,7 +1,8 @@ -using DearImguiSharp; +using ImGuiNET; using System; using System.Collections.Generic; using System.Linq; +using System.Numerics; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; @@ -10,40 +11,38 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render { internal static class ImGuiFullscreenOverlay { - public static readonly DearImguiSharp.ImVec2 Zero2H = new() { X = 0f, Y = 0f }; - public static readonly DearImguiSharp.ImVec2.__Internal Zero2 = new() { x = 0f, y = 0f }; - public static readonly DearImguiSharp.ImVec2.__Internal One2 = new() { x = 1f, y = 1f }; - public static readonly DearImguiSharp.ImVec4.__Internal One4 = new() { w = 1.0f, x = 1.0f, y = 1.0f, z = 1.0f }; - public static readonly DearImguiSharp.ImVec4.__Internal Zero4 = new() { x = 0.0f, y = 0.0f, w = 0.0f, z = 0.0f }; + public static readonly Vector2 Zero2 = new(0, 0); + public static readonly Vector2 One2 = new(1, 1); + public static readonly Vector4 One4 = new(1, 1, 1, 1); + public static readonly Vector4 Zero4 = new(0, 0, 0, 0); [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] public static void Render(nint imageHandle, float width, float height) { - var browserDim = new ImVec2.__Internal() { x = width, y = height }; + var browserDim = new Vector2 { X = width, Y = height }; var viewPort = ImGui.GetMainViewport(); - ImGui.SetNextWindowPos(viewPort.Pos, 1, Zero2H); - ImGui.SetNextWindowSize(viewPort.Size, 1); + ImGui.SetNextWindowPos(viewPort.Pos, ImGuiCond.Always, Zero2); + ImGui.SetNextWindowSize(viewPort.Size, ImGuiCond.Always); //ImGui.SetNextWindowFocus(); - ImGui.__Internal.PushStyleVarVec2((int)ImGuiStyleVar.ImGuiStyleVarWindowPadding, Zero2); - ImGui.__Internal.PushStyleVarVec2((int)ImGuiStyleVar.ImGuiStyleVarWindowBorderSize, Zero2); + ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, Zero2); + ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, Zero2); unsafe { - ImGui.__Internal.Begin("Browser Window", null, - (int)(0 - | ImGuiWindowFlags.ImGuiWindowFlagsNoDecoration - | ImGuiWindowFlags.ImGuiWindowFlagsNoMove - | ImGuiWindowFlags.ImGuiWindowFlagsNoResize - | ImGuiWindowFlags.ImGuiWindowFlagsNoBackground + ImGui.Begin("Browser Window", + ImGuiWindowFlags.NoDecoration + | ImGuiWindowFlags.NoMove + | ImGuiWindowFlags.NoResize + | ImGuiWindowFlags.NoBackground //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings - )); + ); } - ImGui.__Internal.Image(imageHandle, browserDim, Zero2, One2, One4, Zero4); + ImGui.Image(imageHandle, browserDim, Zero2, One2, One4, Zero4); - ImGui.__Internal.PopStyleVar(1); - ImGui.__Internal.End(); + ImGui.PopStyleVar(1); + ImGui.End(); } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs index 281b4be66..514f417d6 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs @@ -1,4 +1,4 @@ -using DearImguiSharp; +using ImGuiNET; using Reloaded.Hooks; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; using System; @@ -18,25 +18,27 @@ internal class ImGuiWndProcHandler private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam) { - var io = ImGui.GetIO(); - ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); + //var io = ImGui.GetIO(); + //ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); return this.WndProcHook?.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam) ?? -1; } public void InvalidateIO() { - ImGui.ImGuiImplWin32Shutdown(); + return; + //ImGui.ImGuiImplWin32Shutdown(); this.WndProcHook?.Hook.Disable(); this.WndProcHook = null; } public bool InitializeIO(nint outputWindowHandle) { + return true; if (this.WndProcHook != null && this.outputWindowHandle == outputWindowHandle) return true; this.InvalidateIO(); - ImGui.ImGuiImplWin32Init(outputWindowHandle); + //ImGui.ImGuiImplWin32Init(outputWindowHandle); this.WndProcHook = new WndProcHook(outputWindowHandle, this.WndProcHandler); this.WndProcHook.Hook.Activate(); this.outputWindowHandle = outputWindowHandle; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index d24c26290..a029e0906 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -22,18 +22,18 @@ - - - + + + diff --git a/src/Snowflake.sln b/src/Snowflake.sln index 214dde7cd..a41e2d9b6 100644 --- a/src/Snowflake.sln +++ b/src/Snowflake.sln @@ -104,6 +104,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ImGuiBackendsTemp", "ImGuiB EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGuiBackends.Direct3D11", "..\..\ImGuiNETBackends\ImGuiNETBackends\ImGuiBackends.Direct3D11\ImGuiBackends.Direct3D11.csproj", "{3D635E77-66BF-40C3-BE0A-4B8805DA5954}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGuiBackends.OpenGL3", "..\..\ImGuiNETBackends\ImGuiNETBackends\ImGuiBackends.OpenGL3\ImGuiBackends.OpenGL3.csproj", "{BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -982,6 +984,30 @@ Global {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x64.Build.0 = Release|Any CPU {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x86.ActiveCfg = Release|Any CPU {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x86.Build.0 = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x64.ActiveCfg = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x64.Build.0 = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x86.ActiveCfg = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x86.Build.0 = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|Any CPU.ActiveCfg = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|Any CPU.Build.0 = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x64.ActiveCfg = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x64.Build.0 = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x86.ActiveCfg = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x86.Build.0 = Debug|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|Any CPU.Build.0 = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x64.ActiveCfg = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x64.Build.0 = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x86.ActiveCfg = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x86.Build.0 = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|Any CPU.ActiveCfg = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|Any CPU.Build.0 = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x64.ActiveCfg = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x64.Build.0 = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x86.ActiveCfg = Release|Any CPU + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1028,6 +1054,7 @@ Global {BCE0A187-9D45-41C7-8C6F-D0AE20D97866} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {50E3E120-745A-4798-86CA-FDD16E5846F1} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {3D635E77-66BF-40C3-BE0A-4B8805DA5954} = {50E3E120-745A-4798-86CA-FDD16E5846F1} + {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A} = {50E3E120-745A-4798-86CA-FDD16E5846F1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {532F5D25-2D82-45B3-BF60-DDA40A0FB795} From 056ff000690401b8b6b5b4d10026d3f4a8a515ae Mon Sep 17 00:00:00 2001 From: chyyran Date: Mon, 14 Feb 2022 01:10:22 -0500 Subject: [PATCH 29/38] opengl: try to get this to work? --- .../Ingame/OverlayTextureEventParams.cs | 3 + .../Browser/D3DSharedTextureRenderHandler.cs | 13 ++- .../Browser/Direct3DDevice.cs | 5 +- .../Remoting/IngameCommandController.cs | 2 - ...hestration.Overlay.Renderer.Windows.csproj | 4 - .../Hooks/Direct3D11/Direct3D11Hook.cs | 2 +- .../Direct3D11/Direct3D11OverlayTexture.cs | 21 ++-- .../Hooks/IOverlayTexture.cs | 4 +- .../Hooks/OpenGL/OpenGLHook.cs | 62 +++++++--- .../Hooks/OpenGL/OpenGLOverlayTexture.cs | 107 ++++++++++++++++-- 10 files changed, 173 insertions(+), 50 deletions(-) diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs index e00b1dfaf..82c7651b6 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs @@ -13,5 +13,8 @@ public struct OverlayTextureEventParams { public nint TextureHandle; public int SourceProcessId; + public uint Width; + public uint Height; + public uint PixelDepth; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index ce1f888da..096f799c7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -9,7 +9,6 @@ using Snowflake.Orchestration.Ingame; using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser; using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Remoting; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -62,7 +61,7 @@ internal class D3DSharedTextureRenderHandler : IRenderHandler private IngameCommandController CommandServer { get; } public RenderDoc RenderDoc { get; } - public unsafe D3DSharedTextureRenderHandler(Direct3DDevice device, IngameCommandController commandServer, Evergine.Bindings.RenderDoc.RenderDoc renderDoc) + public unsafe D3DSharedTextureRenderHandler(Direct3DDevice device, IngameCommandController commandServer, RenderDoc renderDoc) { this.CommandServer = commandServer; RenderDoc = renderDoc; @@ -85,7 +84,10 @@ private void CommandReceivedHandler(GameWindowCommand command) TextureEvent = new() { SourceProcessId = Environment.ProcessId, - TextureHandle = this.SharedTextureHandle + TextureHandle = this.SharedTextureHandle, + Width = this.TargetTextureDescription.Width, + Height = this.TargetTextureDescription.Height, + PixelDepth = CEFBufferBPP } }); } @@ -151,7 +153,10 @@ public void Resize(System.Drawing.Size size) TextureEvent = new() { TextureHandle = this.SharedTextureHandle, - SourceProcessId = Environment.ProcessId + SourceProcessId = Environment.ProcessId, + Width = this.TargetTextureDescription.Width, + Height = this.TargetTextureDescription.Height, + PixelDepth = CEFBufferBPP } }); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs index 5cf202294..1dc353fd9 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/Direct3DDevice.cs @@ -1,6 +1,5 @@ using Silk.NET.Core.Native; using Silk.NET.Direct3D11; -using Silk.NET.Direct3D12; using System; using System.Collections.Generic; using System.Drawing; @@ -12,8 +11,8 @@ namespace Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser { internal class Direct3DDevice : IDisposable { - private D3D12 Direct3D; - private unsafe ID3D12Device* RenderDevice; + private D3D11 Direct3D; + private unsafe ID3D11Device* RenderDevice; private unsafe ID3D11DeviceContext* RenderContext; private bool disposedValue; private static readonly D3DFeatureLevel[] FEATURE_LEVELS = new[] { D3DFeatureLevel.D3DFeatureLevel111 }; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs index 21b81e51a..f18257f0b 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Remoting/IngameCommandController.cs @@ -1,7 +1,5 @@ using Snowflake.Extensibility; using Snowflake.Orchestration.Ingame; -using Snowflake.Support.Orchestration.Overlay.Renderer.Windows.Browser; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj index 4c02c9bfc..30d8c81f7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj @@ -11,8 +11,4 @@ - - - - diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index fb6f84fbd..143902391 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -57,7 +57,7 @@ private void CommandReceivedHandler(GameWindowCommand command) if (command.Type == GameWindowCommandType.OverlayTextureEvent) { Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle); + this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle, command.TextureEvent.Width, command.TextureEvent.Height); } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs index 2a0cd80f4..e43fedb93 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs @@ -10,13 +10,13 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { - internal class Direct3D11OverlayTexture + internal class Direct3D11OverlayTexture : IOverlayTexture { private unsafe IDXGIKeyedMutex* overlayTextureMutex = null; private unsafe ID3D11ShaderResourceView* overlayShaderResourceView = null; private unsafe ID3D11Texture2D* overlayTexture = null; - private Texture2DDesc overlayTextureDesc = new(); + private (uint width, uint height) OverlayTexDim { get; set; } private IntPtr overlayTextureHandle = IntPtr.Zero; private nint outputWindowHandle = 0; @@ -26,12 +26,12 @@ internal class Direct3D11OverlayTexture public bool SizeMatchesViewport(uint width, uint height) { - return (width == overlayTextureDesc.Width) && (height == overlayTextureDesc.Height); + return (width == OverlayTexDim.width) && (height == OverlayTexDim.height); } public bool AcquireSync() { - unsafe + unsafe { if (this.overlayTextureMutex == null) return false; @@ -49,7 +49,7 @@ public void ReleaseSync() } } - public bool Refresh(int owningPid, nint textureHandle) + public bool Refresh(int owningPid, nint textureHandle, uint width, uint height) { var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); if (process.IsNull) @@ -75,7 +75,7 @@ public bool Refresh(int owningPid, nint textureHandle) this.Invalidate(); } } - + // close old the handle Kernel32.CloseHandle(this.overlayTextureHandle); @@ -117,10 +117,10 @@ public unsafe bool PrepareForPaint(ComPtr device1Handle, nint out ID3D11ShaderResourceView* texSRV = null; // moved to this.overlayShaderResourceView using ComPtr tex2D = - device1Handle.Cast((p, g, o) => + device1Handle.Cast((p, g, o) => p->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), g, o), ID3D11Texture2D.Guid, static d => d->Release(), out int res); - using ComPtr deviceHandle = + using ComPtr deviceHandle = device1Handle.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Device.Guid, static d => d->Release()); if (res != 0) @@ -139,7 +139,6 @@ public unsafe bool PrepareForPaint(ComPtr device1Handle, nint out // not ready yet. return false; - } Texture2DDesc tex2dDesc = new(); // dropped @@ -150,7 +149,7 @@ public unsafe bool PrepareForPaint(ComPtr device1Handle, nint out this.overlayTextureMutex = texMtx.Forget(); this.overlayTexture = tex2D.Forget(); - this.overlayTextureDesc = tex2dDesc; + this.OverlayTexDim = (tex2dDesc.Width, tex2dDesc.Height); ShaderResourceViewDesc srvDesc = new() // dropped { @@ -181,7 +180,7 @@ public void Paint(Action renderFn) { unsafe { - renderFn((nint)this.overlayShaderResourceView, overlayTextureDesc.Width, overlayTextureDesc.Height); + renderFn((nint)this.overlayShaderResourceView, OverlayTexDim.width, OverlayTexDim.height); } } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs index df0335cb0..6c28d41e7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs @@ -5,6 +5,8 @@ internal interface IOverlayTexture bool AcquireSync(); void ReleaseSync(); bool SizeMatchesViewport(uint width, uint height); - bool Refresh(int owningPid, nint textureHandle); + bool Refresh(int owningPid, nint textureHandle, uint width, uint height); + void Paint(Action renderFn); + } } \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs index 482c41ded..7f64d256c 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs @@ -16,6 +16,7 @@ using X86 = Reloaded.Hooks.Definitions.X86; using Snowflake.Orchestration.Ingame; using System.Numerics; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL { @@ -52,6 +53,7 @@ public OpenGLHook(IngameIpc ingameIpc) this.wglCreateContext = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglCreateContext"); } + this.Overlay = new OpenGLOverlayTexture(); this.IngameIpc.CommandReceived += CommandReceivedHandler; this.ImGuiInst = new(); } @@ -61,7 +63,7 @@ private void CommandReceivedHandler(GameWindowCommand command) if (command.Type == GameWindowCommandType.OverlayTextureEvent) { Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle); + this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle, command.TextureEvent.Width, command.TextureEvent.Height); } } @@ -94,25 +96,57 @@ public unsafe int SwapBuffersImpl(HDC deviceContext) } Vector2 screenDim = new(width, height); - this.Overlay.PrepareForPaint(this.GlContext, screenDim); - this.ImGuiInst.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle(), screenDim); - //wglMakeCurrent(deviceContext.DangerousGetHandle(), this.ImGuiContext); - var io = ImGui.GetIO(); - ImGuiInst.NewFrame(); - ImGui.NewFrame(); + if (!this.Overlay.SizeMatchesViewport((uint)width, (uint)height)) + { + Console.WriteLine($"Requesting resize to {width} x {height}"); + this.IngameIpc.SendRequest(new() + { + Magic = GameWindowCommand.GameWindowMagic, + Type = GameWindowCommandType.WindowResizeEvent, + ResizeEvent = new() + { + Height = (int)(height), + Width = (int)(width), + } + }); + } - ImGui.Begin("Fps"); - ImGui.Text($"{io.Framerate}"); - ImGui.End(); - ImGui.ShowDemoWindow(); - ImGui.Render(); + if (!this.Overlay.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle())) + { + Console.WriteLine("Failed to open shared texture"); + } - ImGuiInst.Render(ImGui.GetDrawData()); + this.ImGuiInst.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle(), screenDim); + //wglMakeCurrent(deviceContext.DangerousGetHandle(), this.ImGuiContext); + var io = ImGui.GetIO(); + if (this.Overlay.AcquireSync()) + { + ImGuiInst.NewFrame(); + ImGui.NewFrame(); + + ImGui.Begin("Fps"); + ImGui.Text($"{io.Framerate}"); + ImGui.End(); + + this.Overlay.Paint(static (tex, w, h) => + { + ImGuiFullscreenOverlay.Render(tex, w, h); + }); + + ImGui.ShowDemoWindow(); + ImGui.Render(); + ImGuiInst.Render(ImGui.GetDrawData()); + this.Overlay.ReleaseSync(); + } + else + { + ; + Console.WriteLine($"Failed to obtain KMT {this.GlContext.GetError()}"); + } - //wglMakeCurrent(deviceContext.DangerousGetHandle(), originalContext); return this.SwapBuffersHook.OriginalFunction(deviceContext); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs index e858862a4..ff55db0ff 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs @@ -11,11 +11,20 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL { - internal class OpenGLOverlayTexture + internal class OpenGLOverlayTexture : IOverlayTexture { private IntPtr overlayTextureHandle; + private (uint glTex, uint glMemHandle) overlayTexture; + private bool ReadyToPaint { get; set; } + private (uint width, uint height) OverlayTexDim { get; set; } + public readonly object TextureMutex = new(); - public bool Refresh(int owningPid, nint textureHandle) + GL? currentContext; + ExtWin32KeyedMutex kmtExt; + ExtMemoryObject memObjExt; + private nint outputWindowHandle; + + public bool Refresh(int owningPid, nint textureHandle, uint width, uint height) { // todo: unify this with d3d11 var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); @@ -32,15 +41,15 @@ public bool Refresh(int owningPid, nint textureHandle) return false; }; - Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")}"); + Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")} {width}x{height}"); // Release old texture unsafe { - //if (this.overlayTexture != null) - //{ - // this.Invalidate(); - //} + if (this.overlayTexture.glMemHandle != 0) + { + this.Invalidate(); + } } // close old the handle @@ -48,20 +57,98 @@ public bool Refresh(int owningPid, nint textureHandle) // new texture will be fetched on next paint. this.overlayTextureHandle = dupedHandle; + this.OverlayTexDim = (width, height); return true; } - public unsafe bool PrepareForPaint(GL glContext, Vector2 screenDim) + private void Invalidate() { + lock (this.TextureMutex) + { + if (this.currentContext == null) + return; + this.currentContext.DeleteTexture(this.overlayTexture.glTex); + Legacy.GL legacyContext = Legacy.GL.GetApi(this.currentContext.Context); + if (legacyContext.TryGetExtension(out ExtMemoryObject memObjExt)) + { + memObjExt.DeleteMemoryObject(this.overlayTexture.glMemHandle); + } + + this.overlayTexture = (0, 0); + this.currentContext = null; + this.ReadyToPaint = false; + } + } + + public unsafe bool PrepareForPaint(GL glContext, nint outputWindowHandle) + { + if (this.ReadyToPaint && this.outputWindowHandle == outputWindowHandle) + { + return true; + } + + this.Invalidate(); + Legacy.GL legacyContext = Legacy.GL.GetApi(glContext.Context); - if (!legacyContext.TryGetExtension(out ExtMemoryObjectWin32 memObjExt)) + if (!legacyContext.TryGetExtension(out ExtMemoryObjectWin32 memObjWin32Ext)) { return false; } - memObjExt. + if (!legacyContext.TryGetExtension(out ExtMemoryObject memObjExt)) + { + return false; + } + + if (!legacyContext.TryGetExtension(out ExtWin32KeyedMutex kmtExt)) + { + return false; + } + + this.currentContext = glContext; + glContext.CreateTextures(GLEnum.Texture2D, 1, out uint tex); + uint memHandle = memObjExt.CreateMemoryObject(); + + // CEF texture is always 4BPP + memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.OverlayTexDim.width * this.OverlayTexDim.height * 4 + 1024, EXT.HandleTypeD3D11ImageKmtExt, (void*)this.overlayTextureHandle); + + //kmtExt.AcquireKeyedMutexWin32(memHandle, 0, unchecked((uint)-1)); + memObjExt.TextureStorageMem2D(tex, 1, EXT.BgraExt, this.OverlayTexDim.width, this.OverlayTexDim.height, memHandle, 0); + //kmtExt.ReleaseKeyedMutexWin32(memHandle, 0); + + this.overlayTexture = (tex, memHandle); + this.kmtExt = kmtExt; + this.memObjExt = memObjExt; + this.outputWindowHandle = outputWindowHandle; + this.ReadyToPaint = true; return true; } + + public bool SizeMatchesViewport(uint width, uint height) + { + return (width == OverlayTexDim.width) && (height == OverlayTexDim.height); + } + + public bool AcquireSync() + { + return this.kmtExt.AcquireKeyedMutexWin32(this.overlayTexture.glMemHandle, 0, unchecked((uint)-1)); + } + + public void ReleaseSync() + { + this.kmtExt.ReleaseKeyedMutexWin32(this.overlayTexture.glMemHandle, 0); + } + + public void Paint(Action renderFn) + { + lock (this.TextureMutex) + { + unsafe + { + renderFn((nint)this.overlayTexture.glTex, OverlayTexDim.width, OverlayTexDim.height); + } + } + } } } From 941f5f561c4917968409e58d202de5b785938507 Mon Sep 17 00:00:00 2001 From: chyyran Date: Wed, 16 Feb 2022 01:06:31 -0500 Subject: [PATCH 30/38] overlay: fix params, try to get GL working again --- .../Ingame/OverlayTextureEventParams.cs | 4 +- .../Browser/D3DSharedTextureRenderHandler.cs | 4 +- .../Hooks/Direct3D11/Direct3D11Hook.cs | 2 +- .../Direct3D11/Direct3D11OverlayTexture.cs | 6 ++- .../Hooks/IOverlayTexture.cs | 6 ++- .../Hooks/OpenGL/OpenGLHook.cs | 2 +- .../Hooks/OpenGL/OpenGLOverlayTexture.cs | 42 ++++++++++++++----- 7 files changed, 48 insertions(+), 18 deletions(-) diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs index 82c7651b6..369362820 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs @@ -15,6 +15,8 @@ public struct OverlayTextureEventParams public int SourceProcessId; public uint Width; public uint Height; - public uint PixelDepth; + public ulong Size; + public ulong Alignment; + public nint SyncHandle; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index 096f799c7..3bff2c006 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -87,7 +87,7 @@ private void CommandReceivedHandler(GameWindowCommand command) TextureHandle = this.SharedTextureHandle, Width = this.TargetTextureDescription.Width, Height = this.TargetTextureDescription.Height, - PixelDepth = CEFBufferBPP + Size = this.TargetTextureDescription.Width * this.TargetTextureDescription.Height * CEFBufferBPP } }); } @@ -156,7 +156,7 @@ public void Resize(System.Drawing.Size size) SourceProcessId = Environment.ProcessId, Width = this.TargetTextureDescription.Width, Height = this.TargetTextureDescription.Height, - PixelDepth = CEFBufferBPP + Size = this.TargetTextureDescription.Width * this.TargetTextureDescription.Height * CEFBufferBPP, } }); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 143902391..9ebf75017 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -57,7 +57,7 @@ private void CommandReceivedHandler(GameWindowCommand command) if (command.Type == GameWindowCommandType.OverlayTextureEvent) { Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle, command.TextureEvent.Width, command.TextureEvent.Height); + this.Overlay.Refresh(command.TextureEvent); } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs index e43fedb93..43fa2b5fb 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs @@ -1,6 +1,7 @@ using Silk.NET.Core.Native; using Silk.NET.Direct3D11; using Silk.NET.DXGI; +using Snowflake.Orchestration.Ingame; using System; using System.Collections.Generic; using System.Linq; @@ -49,8 +50,11 @@ public void ReleaseSync() } } - public bool Refresh(int owningPid, nint textureHandle, uint width, uint height) + public bool Refresh(OverlayTextureEventParams texParams) { + int owningPid = texParams.SourceProcessId; + nint textureHandle = texParams.TextureHandle; + var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); if (process.IsNull) { diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs index 6c28d41e7..6b6e5f7b8 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs @@ -1,11 +1,13 @@ -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks +using Snowflake.Orchestration.Ingame; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks { internal interface IOverlayTexture { bool AcquireSync(); void ReleaseSync(); bool SizeMatchesViewport(uint width, uint height); - bool Refresh(int owningPid, nint textureHandle, uint width, uint height); + bool Refresh(OverlayTextureEventParams texParams); void Paint(Action renderFn); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs index 7f64d256c..e790f11b0 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs @@ -63,7 +63,7 @@ private void CommandReceivedHandler(GameWindowCommand command) if (command.Type == GameWindowCommandType.OverlayTextureEvent) { Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - this.Overlay.Refresh(command.TextureEvent.SourceProcessId, command.TextureEvent.TextureHandle, command.TextureEvent.Width, command.TextureEvent.Height); + this.Overlay.Refresh(command.TextureEvent); } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs index ff55db0ff..0544a73fa 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs @@ -1,5 +1,6 @@ using Silk.NET.OpenGL; using Silk.NET.OpenGL.Legacy.Extensions.EXT; +using Snowflake.Orchestration.Ingame; using System; using System.Collections.Generic; using System.Linq; @@ -23,9 +24,11 @@ internal class OpenGLOverlayTexture : IOverlayTexture ExtWin32KeyedMutex kmtExt; ExtMemoryObject memObjExt; private nint outputWindowHandle; - - public bool Refresh(int owningPid, nint textureHandle, uint width, uint height) + private ulong Sz; + public bool Refresh(OverlayTextureEventParams texParams) { + int owningPid = texParams.SourceProcessId; + nint textureHandle = texParams.TextureHandle; // todo: unify this with d3d11 var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); if (process.IsNull) @@ -41,7 +44,7 @@ public bool Refresh(int owningPid, nint textureHandle, uint width, uint height) return false; }; - Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")} {width}x{height}"); + Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")} {texParams.Width}x{texParams.Height}"); // Release old texture unsafe @@ -57,7 +60,8 @@ public bool Refresh(int owningPid, nint textureHandle, uint width, uint height) // new texture will be fetched on next paint. this.overlayTextureHandle = dupedHandle; - this.OverlayTexDim = (width, height); + this.OverlayTexDim = (texParams.Width, texParams.Height); + this.Sz = texParams.Size; return true; } @@ -108,14 +112,23 @@ public unsafe bool PrepareForPaint(GL glContext, nint outputWindowHandle) this.currentContext = glContext; glContext.CreateTextures(GLEnum.Texture2D, 1, out uint tex); + glContext.TextureParameter(tex, TextureParameterName.TextureTilingExt, (uint)EXT.OptimalTilingExt); uint memHandle = memObjExt.CreateMemoryObject(); - // CEF texture is always 4BPP - memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.OverlayTexDim.width * this.OverlayTexDim.height * 4 + 1024, EXT.HandleTypeD3D11ImageKmtExt, (void*)this.overlayTextureHandle); - - //kmtExt.AcquireKeyedMutexWin32(memHandle, 0, unchecked((uint)-1)); - memObjExt.TextureStorageMem2D(tex, 1, EXT.BgraExt, this.OverlayTexDim.width, this.OverlayTexDim.height, memHandle, 0); - //kmtExt.ReleaseKeyedMutexWin32(memHandle, 0); + memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.Sz, EXT.HandleTypeD3D11ImageExt, (void*)this.overlayTextureHandle); + + CheckGlError(glContext, "importwin32"); + if (kmtExt.AcquireKeyedMutexWin32(memHandle, 0, unchecked((uint)-1))) + { + CheckGlError(glContext, "akmtw32"); + memObjExt.TextureStorageMem2D(tex, 1, EXT.Rgba8Ext, this.OverlayTexDim.width, this.OverlayTexDim.height, memHandle, 0); + CheckGlError(glContext, "texmem"); + kmtExt.ReleaseKeyedMutexWin32(memHandle, 0); + } else + { + Console.WriteLine("Failed to grab mutex"); + } + CheckGlError(glContext, "rkmt32"); this.overlayTexture = (tex, memHandle); this.kmtExt = kmtExt; @@ -150,5 +163,14 @@ public void Paint(Action renderFn) } } } + + public static void CheckGlError(GL gl, string title) + { + var error = gl.GetError(); + if (error != GLEnum.NoError) + { + Console.WriteLine($"{title}: {error}"); + } + } } } From a3f3de2e1f43818fef1fcec3fc8c3945114ca8a0 Mon Sep 17 00:00:00 2001 From: chyyran Date: Wed, 16 Feb 2022 13:08:06 -0500 Subject: [PATCH 31/38] overlay(ogl): set proper size for memory handle import --- .../EntryPoint.cs | 5 +++++ .../Hooks/OpenGL/OpenGLOverlayTexture.cs | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 36fdca010..28f904b26 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -7,6 +7,7 @@ using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using Snowflake.Orchestration.Ingame; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Vulkan; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -17,6 +18,7 @@ public static int Main(nint args, int sizeBytes) { try { + return Main(); } catch @@ -31,6 +33,7 @@ private static int Main() Vanara.PInvoke.Kernel32.AllocConsole(); Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); var ipc = new IngameIpc(Guid.Empty); + ipc.CommandReceived += (c) => { Console.WriteLine($"Received command {c.Type}"); @@ -40,6 +43,8 @@ private static int Main() var result = await ipc.ConnectAsync(); Console.WriteLine($"IPC Connection: {result}"); ipc.Listen(); + //new VulkanHook(ipc).Activate(); + //new Direct3D11Hook(ipc).Activate(); new OpenGLHook(ipc).Activate(); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs index 0544a73fa..e5f6bc5f5 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs @@ -113,9 +113,17 @@ public unsafe bool PrepareForPaint(GL glContext, nint outputWindowHandle) this.currentContext = glContext; glContext.CreateTextures(GLEnum.Texture2D, 1, out uint tex); glContext.TextureParameter(tex, TextureParameterName.TextureTilingExt, (uint)EXT.OptimalTilingExt); + glContext.TextureParameter(tex, TextureParameterName.TextureMinFilter, (uint)GLEnum.Linear); + glContext.TextureParameter(tex, TextureParameterName.TextureMagFilter, (uint)GLEnum.Linear); + glContext.TextureParameter(tex, TextureParameterName.TextureWrapS, (uint)GLEnum.ClampToEdge); + glContext.TextureParameter(tex, TextureParameterName.TextureWrapT, (uint)GLEnum.ClampToEdge); + + Span swizzleMask = stackalloc[] { (int)GLEnum.Blue, (int)GLEnum.Green, (int)GLEnum.Red, (int)GLEnum.Alpha }; + glContext.TextureParameter(tex, TextureParameterName.TextureSwizzleRgba, swizzleMask); + uint memHandle = memObjExt.CreateMemoryObject(); // CEF texture is always 4BPP - memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.Sz, EXT.HandleTypeD3D11ImageExt, (void*)this.overlayTextureHandle); + memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.Sz * 2, EXT.HandleTypeD3D11ImageExt, (void*)this.overlayTextureHandle); CheckGlError(glContext, "importwin32"); if (kmtExt.AcquireKeyedMutexWin32(memHandle, 0, unchecked((uint)-1))) From de37509b6c68583645c0eeb94247b048de2a85e4 Mon Sep 17 00:00:00 2001 From: chyyran Date: Wed, 16 Feb 2022 22:14:28 -0500 Subject: [PATCH 32/38] overlay(ogl): Get ImGui reinit working --- .../Hooks/OpenGL/OpenGLHook.cs | 53 +++++++++---------- .../Hooks/OpenGL/OpenGLImGuiInstance.cs | 40 +++++++++----- .../Hooks/OpenGL/OpenGLOverlayTexture.cs | 39 +++++++++----- 3 files changed, 76 insertions(+), 56 deletions(-) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs index e790f11b0..6e2aa39a1 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs @@ -88,13 +88,6 @@ public unsafe int SwapBuffersImpl(HDC deviceContext) int width = lpRect.right - lpRect.left; int height = lpRect.bottom - lpRect.top; - nint originalContext = wglGetCurrentContext(); - - if (this.ImGuiContext == 0) - { - this.ImGuiContext = wglCreateContext(deviceContext.DangerousGetHandle()); - } - Vector2 screenDim = new(width, height); if (!this.Overlay.SizeMatchesViewport((uint)width, (uint)height)) @@ -112,42 +105,44 @@ public unsafe int SwapBuffersImpl(HDC deviceContext) }); } + if (!this.Overlay.ReadyToInitialize) + { + Console.WriteLine("Texture handle not ready."); + return this.SwapBuffersHook.OriginalFunction(deviceContext); + } if (!this.Overlay.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle())) { Console.WriteLine("Failed to open shared texture"); + return this.SwapBuffersHook.OriginalFunction(deviceContext); } this.ImGuiInst.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle(), screenDim); - //wglMakeCurrent(deviceContext.DangerousGetHandle(), this.ImGuiContext); var io = ImGui.GetIO(); - if (this.Overlay.AcquireSync()) + lock (this.Overlay.TextureMutex) { - ImGuiInst.NewFrame(); - ImGui.NewFrame(); - - ImGui.Begin("Fps"); - ImGui.Text($"{io.Framerate}"); - ImGui.End(); - - this.Overlay.Paint(static (tex, w, h) => + if (this.Overlay.AcquireSync()) { - ImGuiFullscreenOverlay.Render(tex, w, h); - }); + ImGuiInst.NewFrame(); + ImGui.NewFrame(); - ImGui.ShowDemoWindow(); - ImGui.Render(); - ImGuiInst.Render(ImGui.GetDrawData()); - this.Overlay.ReleaseSync(); - } - else - { - ; - Console.WriteLine($"Failed to obtain KMT {this.GlContext.GetError()}"); + ImGui.Begin("Fps"); + ImGui.Text($"{io.Framerate}"); + ImGui.End(); + + this.Overlay.Paint(static (tex, w, h) => + { + ImGuiFullscreenOverlay.Render(tex, w, h); + }); + + ImGui.ShowDemoWindow(); + ImGui.Render(); + ImGuiInst.Render(ImGui.GetDrawData()); + this.Overlay.ReleaseSync(); + } } - //wglMakeCurrent(deviceContext.DangerousGetHandle(), originalContext); return this.SwapBuffersHook.OriginalFunction(deviceContext); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs index b9be8e743..92745e01c 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs @@ -11,25 +11,26 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL internal class OpenGLImGuiInstance { private bool DevicesReady { get; set; } - public ImGuiBackendOpenGL Backend { get; } + public ImGuiBackendOpenGL Backend { get; set; } IntPtr context; - private object outputWindowHandle; - public OpenGLImGuiInstance() + private nint outputWindowHandle; + + public void InitializeDevices(GL gl, nint hWnd) { + // OpenGL backend does not support reusable contexts. + Console.WriteLine("reinitializing imgui context"); + context = ImGui.CreateContext(); ImGui.SetCurrentContext(context); ImGui.StyleColorsDark(); - this.Backend = new ImGuiBackendOpenGL(); - } - public void InitializeDevices(GL gl, nint hWnd) - { this.Backend.Init(gl); this.Backend.CreateDeviceObjects(); + this.outputWindowHandle = hWnd; this.DevicesReady = true; //this.WndProc.InitializeIO(hWnd); } @@ -44,14 +45,24 @@ public void Render(ImDrawDataPtr drawData) this.Backend.RenderDrawData(drawData); } + private void DiscardContext() + { + this.Backend?.Shutdown(); + + // OpenGL backend does not support reusable contexts. + if (context != IntPtr.Zero) + ImGui.DestroyContext(context); + + this.DevicesReady = false; + } + public unsafe bool PrepareForPaint(GL gl, nint hWnd, Vector2 screenDim) { - //if (desc.OutputWindow != this.outputWindowHandle) - //{ - // Console.WriteLine("Swapchain outdated and so discarded."); - // this.DiscardSwapchain(); - // this.InvalidateDevices(); - //} + if (hWnd != this.outputWindowHandle) + { + Console.WriteLine($"GL context outdated and discarded was {this.outputWindowHandle} now {hWnd}."); + this.DiscardContext(); + } if (!this.DevicesReady) { @@ -64,6 +75,9 @@ public unsafe bool PrepareForPaint(GL gl, nint hWnd, Vector2 screenDim) return true; } + + + //public ImGuiContext Context { get; } //public ImGuiWndProcHandler WndProc { get; } } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs index e5f6bc5f5..b110d052b 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs @@ -17,14 +17,16 @@ internal class OpenGLOverlayTexture : IOverlayTexture private IntPtr overlayTextureHandle; private (uint glTex, uint glMemHandle) overlayTexture; private bool ReadyToPaint { get; set; } - private (uint width, uint height) OverlayTexDim { get; set; } + private (uint width, uint height) overlayTexDim { get; set; } public readonly object TextureMutex = new(); GL? currentContext; ExtWin32KeyedMutex kmtExt; ExtMemoryObject memObjExt; private nint outputWindowHandle; - private ulong Sz; + private ulong overlayTextureSize; + public bool ReadyToInitialize => this.overlayTextureHandle != IntPtr.Zero; + public bool Refresh(OverlayTextureEventParams texParams) { int owningPid = texParams.SourceProcessId; @@ -60,8 +62,8 @@ public bool Refresh(OverlayTextureEventParams texParams) // new texture will be fetched on next paint. this.overlayTextureHandle = dupedHandle; - this.OverlayTexDim = (texParams.Width, texParams.Height); - this.Sz = texParams.Size; + this.overlayTexDim = (texParams.Width, texParams.Height); + this.overlayTextureSize = texParams.Size; return true; } @@ -69,8 +71,13 @@ private void Invalidate() { lock (this.TextureMutex) { - if (this.currentContext == null) + if (this.currentContext == null || this.overlayTexture.glTex == 0) + { + this.currentContext = null; + this.ReadyToPaint = false; return; + } + this.currentContext.DeleteTexture(this.overlayTexture.glTex); Legacy.GL legacyContext = Legacy.GL.GetApi(this.currentContext.Context); if (legacyContext.TryGetExtension(out ExtMemoryObject memObjExt)) @@ -79,7 +86,6 @@ private void Invalidate() } this.overlayTexture = (0, 0); - this.currentContext = null; this.ReadyToPaint = false; } } @@ -123,21 +129,24 @@ public unsafe bool PrepareForPaint(GL glContext, nint outputWindowHandle) uint memHandle = memObjExt.CreateMemoryObject(); // CEF texture is always 4BPP - memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.Sz * 2, EXT.HandleTypeD3D11ImageExt, (void*)this.overlayTextureHandle); + memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.overlayTextureSize * 2, EXT.HandleTypeD3D11ImageExt, (void*)this.overlayTextureHandle); CheckGlError(glContext, "importwin32"); if (kmtExt.AcquireKeyedMutexWin32(memHandle, 0, unchecked((uint)-1))) { CheckGlError(glContext, "akmtw32"); - memObjExt.TextureStorageMem2D(tex, 1, EXT.Rgba8Ext, this.OverlayTexDim.width, this.OverlayTexDim.height, memHandle, 0); + memObjExt.TextureStorageMem2D(tex, 1, EXT.Rgba8Ext, this.overlayTexDim.width, this.overlayTexDim.height, memHandle, 0); CheckGlError(glContext, "texmem"); kmtExt.ReleaseKeyedMutexWin32(memHandle, 0); - } else + } + else { - Console.WriteLine("Failed to grab mutex"); + Console.WriteLine("Mutex not yet ready."); + return false; } CheckGlError(glContext, "rkmt32"); + Console.WriteLine($"Got new texture at {this.overlayTextureHandle} ({this.overlayTexDim.width} x {this.overlayTexDim.height}) MEM ({memHandle})"); this.overlayTexture = (tex, memHandle); this.kmtExt = kmtExt; this.memObjExt = memObjExt; @@ -148,17 +157,19 @@ public unsafe bool PrepareForPaint(GL glContext, nint outputWindowHandle) public bool SizeMatchesViewport(uint width, uint height) { - return (width == OverlayTexDim.width) && (height == OverlayTexDim.height); + return (width == overlayTexDim.width) && (height == overlayTexDim.height); } public bool AcquireSync() { - return this.kmtExt.AcquireKeyedMutexWin32(this.overlayTexture.glMemHandle, 0, unchecked((uint)-1)); + return this.kmtExt?.AcquireKeyedMutexWin32(this.overlayTexture.glMemHandle, 0, unchecked((uint)-1)) ?? false; } public void ReleaseSync() { - this.kmtExt.ReleaseKeyedMutexWin32(this.overlayTexture.glMemHandle, 0); + if (this.overlayTexture.glMemHandle == 0) + return; + this.kmtExt?.ReleaseKeyedMutexWin32(this.overlayTexture.glMemHandle, 0); } public void Paint(Action renderFn) @@ -167,7 +178,7 @@ public void Paint(Action renderFn) { unsafe { - renderFn((nint)this.overlayTexture.glTex, OverlayTexDim.width, OverlayTexDim.height); + renderFn((nint)this.overlayTexture.glTex, overlayTexDim.width, overlayTexDim.height); } } } From 5e1422863ff2ca2ad098d88ed274e7cc699d267b Mon Sep 17 00:00:00 2001 From: chyyran Date: Thu, 17 Feb 2022 02:12:08 -0500 Subject: [PATCH 33/38] debug: temporarily copy over input backend from ImGuiScene. Itll do for now until we set up input hooking to IPC. --- .../Direct3D11/Direct3D11ImGuiInstance.cs | 12 +- .../Hooks/OpenGL/OpenGLImGuiInstance.cs | 8 + .../Hooks/WndProc/Win32Backend.cs | 463 ++++++++++++++++++ 3 files changed, 480 insertions(+), 3 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs index b470f48a6..d7c0180b5 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -5,6 +5,7 @@ using ImGuiBackends.Direct3D11; using ImGuiNET; using System.Numerics; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 { @@ -17,11 +18,10 @@ internal class Direct3D11ImGuiInstance : IDisposable private bool DevicesReady { get; set; } private bool SurfacesReady { get; set; } private bool SwapchainReady { get; set; } = false; - //private ImGuiWndProcHandler WndProc { get; } - public ImGuiBackendDirect3D11 Backend { get; } - + public Win32Backend? Input { get; set; } IntPtr context; + public Direct3D11ImGuiInstance() { context = ImGui.CreateContext(); @@ -102,6 +102,7 @@ private unsafe void InitializeDevices(ComPtr swapChain, nint hWn using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); //this.WndProc.InitializeIO(hWnd); + this.Input = new Win32Backend(hWnd); this.Backend.Init((nint)~device, (nint)~deviceContext, false); this.DevicesReady = true; } @@ -109,6 +110,8 @@ private unsafe void InitializeDevices(ComPtr swapChain, nint hWn private void InvalidateDevices() { //this.WndProc.InvalidateIO(); + this.Input?.Dispose(); + this.Input = null; this.Backend.Shutdown(); this.DevicesReady = false; } @@ -138,6 +141,9 @@ public unsafe bool PrepareForPaint(ComPtr swapChain, Vector2 scr ImGuiIOPtr io = ImGui.GetIO(); io.DisplaySize = screenDim; + /* TEMP INPUT */ + this.Input?.NewFrame((int)screenDim.X, (int)screenDim.Y); + this.outputWindowHandle = desc.OutputWindow; return true; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs index 92745e01c..f4437b024 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs @@ -2,6 +2,7 @@ using ImGuiBackends.OpenGL3; using ImGuiNET; using Silk.NET.OpenGL; +using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; using System.Numerics; using Vanara.PInvoke; @@ -13,6 +14,7 @@ internal class OpenGLImGuiInstance private bool DevicesReady { get; set; } public ImGuiBackendOpenGL Backend { get; set; } + public Win32Backend? Input { get; set; } IntPtr context; private nint outputWindowHandle; @@ -25,6 +27,8 @@ public void InitializeDevices(GL gl, nint hWnd) context = ImGui.CreateContext(); ImGui.SetCurrentContext(context); ImGui.StyleColorsDark(); + + this.Input = new Win32Backend(hWnd); this.Backend = new ImGuiBackendOpenGL(); this.Backend.Init(gl); @@ -47,6 +51,8 @@ public void Render(ImDrawDataPtr drawData) private void DiscardContext() { + this.Input?.Dispose(); + this.Input = null; this.Backend?.Shutdown(); // OpenGL backend does not support reusable contexts. @@ -71,6 +77,8 @@ public unsafe bool PrepareForPaint(GL gl, nint hWnd, Vector2 screenDim) ImGuiIOPtr io = ImGui.GetIO(); io.DisplaySize = screenDim; + this.Input?.NewFrame((int)screenDim.X, (int)screenDim.Y); + this.outputWindowHandle = hWnd; return true; } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs new file mode 100644 index 000000000..6f7d0106e --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs @@ -0,0 +1,463 @@ +using ImGuiNET; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using Vanara.PInvoke; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc +{ + // For now taken from + // https://github.com/ff-meli/ImGuiScene/blob/master/ImGuiScene/ImGui_Impl/Input/ImGui_Input_Impl_Direct.cs + // We will eventually not actually need this at all, since we will be installing our own hooks and UI driver is really + // the CEF texture and not ImGui, but whatever + // + // largely a port of https://github.com/ocornut/imgui/blob/master/examples/imgui_impl_User32.cpp, though some changes + // and wndproc hooking +#if DEBUG_INPUT + public class Win32Backend + { + [DllImport("user32.dll")] + public static extern long CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint Msg, ulong wParam, long lParam); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ushort HIWORD(ulong val) + { + // #define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) + return (ushort)((val >> 16) & 0xFFFF); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ushort LOWORD(ulong val) + { + // #define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) + return (ushort)(val & 0xFFFF); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ushort GET_XBUTTON_WPARAM(ulong val) + { + // #define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) + return HIWORD(val); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static short GET_WHEEL_DELTA_WPARAM(ulong val) + { + // #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) + return (short)HIWORD(val); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int GET_X_LPARAM(ulong val) + { + // #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) + return (int)(short)LOWORD(val); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int GET_Y_LPARAM(ulong val) + { + // #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) + return (int)(short)HIWORD(val); + } + + delegate long WndProcDelegate(IntPtr hWnd, uint msg, ulong wParam, long lParam); + + private long _lastTime; + private IntPtr _platformNamePtr; + private IntPtr _iniPathPtr; + private IntPtr _hWnd; + private WndProcDelegate _wndProcDelegate; + private IntPtr _wndProcPtr; + private IntPtr _oldWndProcPtr; + private ImGuiMouseCursor _oldCursor = ImGuiMouseCursor.None; + private User32.SafeHCURSOR[] _cursors; + + public Win32Backend(IntPtr hWnd) + { + _hWnd = hWnd; + + // hook wndproc + // have to hold onto the delegate to keep it in memory for unmanaged code + _wndProcDelegate = WndProcDetour; + _wndProcPtr = Marshal.GetFunctionPointerForDelegate(_wndProcDelegate); + _oldWndProcPtr = User32.SetWindowLong(_hWnd, User32.WindowLongFlags.GWL_WNDPROC, _wndProcPtr); + + var io = ImGui.GetIO(); + + io.BackendFlags = io.BackendFlags | (ImGuiBackendFlags.HasMouseCursors | ImGuiBackendFlags.HasSetMousePos); + + _platformNamePtr = Marshal.StringToHGlobalAnsi("imgui_impl_User32_c#"); + unsafe + { + io.NativePtr->BackendPlatformName = (byte*)_platformNamePtr.ToPointer(); + } + + + io.KeyMap[(int)ImGuiKey.Tab] = (int)User32.VK.VK_TAB; + io.KeyMap[(int)ImGuiKey.LeftArrow] = (int)User32.VK.VK_LEFT; + io.KeyMap[(int)ImGuiKey.RightArrow] = (int)User32.VK.VK_RIGHT; + io.KeyMap[(int)ImGuiKey.UpArrow] = (int)User32.VK.VK_UP; + io.KeyMap[(int)ImGuiKey.DownArrow] = (int)User32.VK.VK_DOWN; + io.KeyMap[(int)ImGuiKey.PageUp] = (int)User32.VK.VK_PRIOR; + io.KeyMap[(int)ImGuiKey.PageDown] = (int)User32.VK.VK_NEXT; + io.KeyMap[(int)ImGuiKey.Home] = (int)User32.VK.VK_HOME; + io.KeyMap[(int)ImGuiKey.End] = (int)User32.VK.VK_END; + io.KeyMap[(int)ImGuiKey.Insert] = (int)User32.VK.VK_INSERT; + io.KeyMap[(int)ImGuiKey.Delete] = (int)User32.VK.VK_DELETE; + io.KeyMap[(int)ImGuiKey.Backspace] = (int)User32.VK.VK_BACK; + io.KeyMap[(int)ImGuiKey.Space] = (int)User32.VK.VK_SPACE; + io.KeyMap[(int)ImGuiKey.Enter] = (int)User32.VK.VK_RETURN; + io.KeyMap[(int)ImGuiKey.Escape] = (int)User32.VK.VK_ESCAPE; + io.KeyMap[(int)ImGuiKey.KeyPadEnter] = (int)User32.VK.VK_RETURN; // same keycode, lparam is different. Not sure if this will cause dupe events or not + io.KeyMap[(int)ImGuiKey.A] = (int)User32.VK.VK_A; + io.KeyMap[(int)ImGuiKey.C] = (int)User32.VK.VK_C; + io.KeyMap[(int)ImGuiKey.V] = (int)User32.VK.VK_V; + io.KeyMap[(int)ImGuiKey.X] = (int)User32.VK.VK_X; + io.KeyMap[(int)ImGuiKey.Y] = (int)User32.VK.VK_Y; + io.KeyMap[(int)ImGuiKey.Z] = (int)User32.VK.VK_Z; + + _cursors = new User32.SafeHCURSOR[8]; + _cursors[(int)ImGuiMouseCursor.Arrow] = User32.LoadCursor(IntPtr.Zero, User32.IDC_ARROW); + _cursors[(int)ImGuiMouseCursor.TextInput] = User32.LoadCursor(IntPtr.Zero, User32.IDC_IBEAM); + _cursors[(int)ImGuiMouseCursor.ResizeAll] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZEALL); + _cursors[(int)ImGuiMouseCursor.ResizeEW] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZEWE); + _cursors[(int)ImGuiMouseCursor.ResizeNS] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZENS); + _cursors[(int)ImGuiMouseCursor.ResizeNESW] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZENESW); + _cursors[(int)ImGuiMouseCursor.ResizeNWSE] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZENWSE); + _cursors[(int)ImGuiMouseCursor.Hand] = User32.LoadCursor(IntPtr.Zero, User32.IDC_HAND); + } + + //public bool IsImGuiCursor(IntPtr hCursor) + //{ + // return _cursors.Contains(hCursor) ?? false; + //} + + public void NewFrame(int targetWidth, int targetHeight) + { + var io = ImGui.GetIO(); + + io.DisplaySize.X = targetWidth; + io.DisplaySize.Y = targetHeight; + io.DisplayFramebufferScale.X = 1f; + io.DisplayFramebufferScale.Y = 1f; + + var frequency = Stopwatch.Frequency; + var currentTime = Stopwatch.GetTimestamp(); + io.DeltaTime = _lastTime > 0 ? (float)((double)(currentTime - _lastTime) / frequency) : 1f / 60; + _lastTime = currentTime; + + io.KeyCtrl = (User32.GetKeyState((int)User32.VK.VK_CONTROL) & 0x8000) != 0; + io.KeyShift = (User32.GetKeyState((int)User32.VK.VK_SHIFT) & 0x8000) != 0; + io.KeyAlt = (User32.GetKeyState((int)User32.VK.VK_MENU) & 0x8000) != 0; + io.KeySuper = false; + + UpdateMousePos(); + + // TODO: need to figure out some way to unify all this + // The bottom case works(?) if the caller hooks SetCursor, but otherwise causes fps issues + // The top case more or less works if we use ImGui's software cursor (and ideally hide the + // game's hardware cursor) + // It would be nice if hooking WM_SETCURSOR worked as it 'should' so that external hooking + // wasn't necessary + + // this is what imgui's example does, but it doesn't seem to work for us + // this could be a timing issue.. or their logic could just be wrong for many applications + var cursor = io.MouseDrawCursor ? ImGuiMouseCursor.None : ImGui.GetMouseCursor(); + if (_oldCursor != cursor) + { + _oldCursor = cursor; + UpdateMouseCursor(); + } + + // this mouse logic makes the window scroll feel bad. + + // hacky attempt to make cursors work how I think they 'should' + //if (io.WantCaptureMouse || io.MouseDrawCursor) + //{ + // UpdateMouseCursor(); + //} + } + + public void SetIniPath(string iniPath) + { + // TODO: error/messaging when trying to set after first render? + if (iniPath != null) + { + if (_iniPathPtr != IntPtr.Zero) + { + Marshal.FreeHGlobal(_iniPathPtr); + } + + _iniPathPtr = Marshal.StringToHGlobalAnsi(iniPath); + unsafe + { + ImGui.GetIO().NativePtr->IniFilename = (byte*)_iniPathPtr.ToPointer(); + } + } + } + + private void UpdateMousePos() + { + var io = ImGui.GetIO(); + + if (io.WantSetMousePos) + { + var pos = new Point { X = (int)io.MousePos.X, Y = (int)io.MousePos.Y }; + User32.ClientToScreen(_hWnd, ref pos); + User32.SetCursorPos(pos.X, pos.Y); + } + + //if (HWND active_window = ::GetForegroundWindow()) + // if (active_window == g_hWnd || ::IsChild(active_window, g_hWnd)) + if (User32.GetCursorPos(out Point pt) && User32.ScreenToClient(_hWnd, ref pt)) + { + io.MousePos.X = pt.X; + io.MousePos.Y = pt.Y; + } + else + { + io.MousePos.X = float.MinValue; + io.MousePos.Y = float.MinValue; + } + } + + private bool UpdateMouseCursor() + { + var io = ImGui.GetIO(); + if (io.ConfigFlags.HasFlag(ImGuiConfigFlags.NoMouseCursorChange)) + { + return false; + } + + var cur = ImGui.GetMouseCursor(); + if (cur == ImGuiMouseCursor.None || io.MouseDrawCursor) + { + User32.SetCursor(null); + } + else + { + User32.SetCursor(_cursors[(int)cur]); + } + + return true; + } + + private long WndProcDetour(IntPtr hWnd, uint msg, ulong wParam, long lParam) + { + if (hWnd == _hWnd && ImGui.GetCurrentContext() != IntPtr.Zero && (ImGui.GetIO().WantCaptureMouse || ImGui.GetIO().WantCaptureKeyboard)) + { + var io = ImGui.GetIO(); + var wmsg = (User32.WindowMessage)msg; + + switch (wmsg) + { + case User32.WindowMessage.WM_LBUTTONDOWN: + case User32.WindowMessage.WM_LBUTTONDBLCLK: + case User32.WindowMessage.WM_RBUTTONDOWN: + case User32.WindowMessage.WM_RBUTTONDBLCLK: + case User32.WindowMessage.WM_MBUTTONDOWN: + case User32.WindowMessage.WM_MBUTTONDBLCLK: + case User32.WindowMessage.WM_XBUTTONDOWN: + case User32.WindowMessage.WM_XBUTTONDBLCLK: + if (io.WantCaptureMouse) + { + var button = 0; + if (wmsg == User32.WindowMessage.WM_LBUTTONDOWN || wmsg == User32.WindowMessage.WM_LBUTTONDBLCLK) + { + button = 0; + } + else if (wmsg == User32.WindowMessage.WM_RBUTTONDOWN || wmsg == User32.WindowMessage.WM_RBUTTONDBLCLK) + { + button = 1; + } + else if (wmsg == User32.WindowMessage.WM_MBUTTONDOWN || wmsg == User32.WindowMessage.WM_MBUTTONDBLCLK) + { + button = 2; + } + else if (wmsg == User32.WindowMessage.WM_XBUTTONDOWN || wmsg == User32.WindowMessage.WM_XBUTTONDBLCLK) + { + button = GET_XBUTTON_WPARAM(wParam) == 1 /* XBUTTON1 */ ? 3 : 4; + } + + if (!ImGui.IsAnyMouseDown() && User32.GetCapture() == IntPtr.Zero) + { + User32.SetCapture(hWnd); + } + io.MouseDown[button] = true; + return 0; + } + break; + + case User32.WindowMessage.WM_LBUTTONUP: + case User32.WindowMessage.WM_RBUTTONUP: + case User32.WindowMessage.WM_MBUTTONUP: + case User32.WindowMessage.WM_XBUTTONUP: + if (io.WantCaptureMouse) + { + var button = 0; + if (wmsg == User32.WindowMessage.WM_LBUTTONUP) + { + button = 0; + } + else if (wmsg == User32.WindowMessage.WM_RBUTTONUP) + { + button = 1; + } + else if (wmsg == User32.WindowMessage.WM_MBUTTONUP) + { + button = 2; + } + else if (wmsg == User32.WindowMessage.WM_XBUTTONUP) + { + button = GET_XBUTTON_WPARAM(wParam) == 1 /* XBUTTON1 */ ? 3 : 4; + } + + if (!ImGui.IsAnyMouseDown() && User32.GetCapture() == hWnd) + { + User32.ReleaseCapture(); + } + io.MouseDown[button] = false; + return 0; + } + break; + + case User32.WindowMessage.WM_MOUSEWHEEL: + if (io.WantCaptureMouse) + { + io.MouseWheel += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)120 /* WHEEL_DELTA */; + return 0; + } + break; + + case User32.WindowMessage.WM_MOUSEHWHEEL: + if (io.WantCaptureMouse) + { + io.MouseWheelH += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)120 /* WHEEL_DELTA */; + return 0; + } + break; + + case User32.WindowMessage.WM_KEYDOWN: + case User32.WindowMessage.WM_SYSKEYDOWN: + if (io.WantCaptureKeyboard) + { + if (wParam < 256) + { + io.KeysDown[(int)wParam] = true; + } + return 0; + } + break; + + case User32.WindowMessage.WM_KEYUP: + case User32.WindowMessage.WM_SYSKEYUP: + if (io.WantCaptureKeyboard) + { + if (wParam < 256) + { + io.KeysDown[(int)wParam] = false; + } + return 0; + } + break; + + case User32.WindowMessage.WM_CHAR: + if (io.WantCaptureKeyboard) + { + io.AddInputCharacter((uint)wParam); + return 0; + } + break; + + // this never seemed to work reasonably, but I'll leave it for now + case User32.WindowMessage.WM_SETCURSOR: + if (io.WantCaptureMouse) + { + if (LOWORD((ulong)lParam) == 1 /* HTCLIENT*/ && UpdateMouseCursor()) + { + // this message returns 1 to block further processing + // because consistency is no fun + return 1; + } + } + break; + + default: + break; + } + } + return CallWindowProc(_oldWndProcPtr, hWnd, msg, wParam, lParam); + } + +#region IDisposable Support + private bool disposedValue = false; // To detect redundant calls + + protected virtual void Dispose(bool disposing) + { + if (!disposedValue) + { + if (disposing) + { + // TODO: dispose managed state (managed objects). + _cursors = null; + } + + // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. + // TODO: set large fields to null. + + if (_oldWndProcPtr != IntPtr.Zero) + { + User32.SetWindowLong(_hWnd, User32.WindowLongFlags.GWL_WNDPROC, _oldWndProcPtr); + _oldWndProcPtr = IntPtr.Zero; + } + + if (_platformNamePtr != IntPtr.Zero) + { + unsafe + { + ImGui.GetIO().NativePtr->BackendPlatformName = null; + } + + Marshal.FreeHGlobal(_platformNamePtr); + _platformNamePtr = IntPtr.Zero; + } + + if (_iniPathPtr != IntPtr.Zero) + { + unsafe + { + ImGui.GetIO().NativePtr->IniFilename = null; + } + + Marshal.FreeHGlobal(_iniPathPtr); + _iniPathPtr = IntPtr.Zero; + } + + disposedValue = true; + } + } + + ~Win32Backend() + { + // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + Dispose(false); + } + + // This code added to correctly implement the disposable pattern. + public void Dispose() + { + // Do not change this code. Put cleanup code in Dispose(bool disposing) above. + Dispose(true); + GC.SuppressFinalize(this); + } +#endregion + } +#endif +} From 04f7dddc7d51436565846d84dd9e8e49bc4893be Mon Sep 17 00:00:00 2001 From: chyyran Date: Thu, 17 Feb 2022 19:16:57 -0500 Subject: [PATCH 34/38] overlay(vk): vulkan hook POC --- .../EntryPoint.cs | 4 +- .../Hooks/Vulkan/VulkanHook.cs | 175 ++++++++++++++++++ .../Render/ImGuiWndProcHandler.cs | 1 - ...chestration.Overlay.Runtime.Windows.csproj | 4 + 4 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index 28f904b26..d79cbafa9 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -43,9 +43,9 @@ private static int Main() var result = await ipc.ConnectAsync(); Console.WriteLine($"IPC Connection: {result}"); ipc.Listen(); - //new VulkanHook(ipc).Activate(); + new VulkanHook(ipc).Activate(); - //new Direct3D11Hook(ipc).Activate(); + new Direct3D11Hook(ipc).Activate(); new OpenGLHook(ipc).Activate(); }); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs new file mode 100644 index 000000000..272c37ddc --- /dev/null +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs @@ -0,0 +1,175 @@ +using Snowflake.Orchestration.Ingame; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using X64 = Reloaded.Hooks.Definitions.X64; +using X86 = Reloaded.Hooks.Definitions.X86; +using Silk.NET.Vulkan; +using Reloaded.Hooks; +using Reloaded.Hooks.Definitions; +using Vanara.PInvoke; +using Silk.NET.Core; + +namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Vulkan +{ + internal class VulkanHook + { + + private Vk VK; + + private nint ImGuiContext = 0; + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate PfnVoidFunction vkCreateInstance(InstanceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Instance* pInstance); + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate PfnVoidFunction vkCreateDevice(PhysicalDevice physicalDevice, DeviceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Device* device); + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate Result vkQueuePresentKHR(Queue queue, PresentInfoKHR* pPresentInfo); + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate void vkCmdDrawIndexed(CommandBuffer cmdBuffer, uint indexCount, uint instanceCount, uint firstIndex, int vertexOff, uint firstInstance); + + [X64.Function(X64.CallingConventions.Microsoft)] + [X86.Function(X86.CallingConventions.Stdcall)] + [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] + public unsafe delegate void vkAcquireNextImageKHR(Device device, SwapchainKHR swapChain, ulong timeout, Silk.NET.Vulkan.Semaphore semaphore, Fence fence, uint* pImageIndex); + + + public unsafe VulkanHook(IngameIpc ingameIpc) + { + this.IngameIpc = ingameIpc; + this.VK = Vk.GetApi(); + var handle = Kernel32.GetModuleHandle("vulkan-1"); + var vqPHr = (long)this.VK.GetInstanceProcAddr(new(null), "vkQueuePresentKHR").Handle; + Console.WriteLine($"{handle.GetProcAddress("vkQueuePresentKHR"):x}, {this.VK.Context.GetProcAddress("vkQueuePresentKHR"):x}, {vqPHr:x}"); + + unsafe { + this.VkCreateInstanceHook = ReloadedHooks.Instance.CreateHook(CreateInstanceImpl, this.VK.Context.GetProcAddress("vkCreateInstance")).Activate(); + this.VkCreateDeviceHook = ReloadedHooks.Instance.CreateHook(CreateDeviceImpl, this.VK.Context.GetProcAddress("vkCreateDevice")).Activate(); + + //this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, (long)this.VK.GetInstanceProcAddr(new(null), "vkQueuePresentKHR").Handle); + //this.VkCmdDrawIndexImpl = ReloadedHooks.Instance.CreateHook(CmdDrawIndexedImpl, this.VK.Context.GetProcAddress("vkCmdDrawIndexed")); + //this.VkAcquireNextImageKHRHook = ReloadedHooks.Instance.CreateHook(AcquireNextImageImpl, this.VK.Context.GetProcAddress("vkCmdDrawIndexed")); + } + this.IngameIpc.CommandReceived += CommandReceivedHandler; + } + + [StructLayout(LayoutKind.Sequential)] + unsafe struct LayerDeviceCreateInfo + { + public StructureType SType; + public void* PNext; + public uint LayerFunction; + public LayerInstanceLink* pLayerInfo; + } + + [StructLayout(LayoutKind.Sequential)] + unsafe struct LayerInstanceLink + { + public LayerInstanceLink* PNext; + public delegate* unmanaged[Cdecl] pfnNextGetInstanceProcAddr; + public delegate* unmanaged[Cdecl] pfnNextGetDeviceProcAddr; + + } + + private unsafe PfnVoidFunction CreateDeviceImpl(PhysicalDevice physicalDevice, DeviceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Device* device) + { + Console.WriteLine("[vk] cDI"); + var res = this.VkCreateDeviceHook.OriginalFunction(physicalDevice, pCreateInfo, pAllocator, device); + + if (this.VkQueuePresentKHRHook == null) + { + this.VK.CurrentDevice = *device; + long x = (long)this.VK.GetDeviceProcAddr(*device, "vkQueuePresentKHR").Handle; + Console.WriteLine($"{x:x}"); + this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, x).Activate(); + + //LayerDeviceCreateInfo* layerCreateInfo = (LayerDeviceCreateInfo*)pCreateInfo->PNext; + + //while (layerCreateInfo != null && (layerCreateInfo->SType != StructureType.LoaderDeviceCreateInfo || + // layerCreateInfo->LayerFunction != 0)) + //{ + // layerCreateInfo = (LayerDeviceCreateInfo*)layerCreateInfo->PNext; + //} + + //if (layerCreateInfo->pLayerInfo == null) + //{ + // Console.WriteLine("bruh layerinfo null"); + // return this.VkCreateDeviceHook.OriginalFunction(physicalDevice, pCreateInfo, pAllocator, device); + //} + //byte* p = (byte*)Marshal.StringToHGlobalAnsi("vkQueuePresentKHR"); + + //this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, (long)layerCreateInfo->pLayerInfo->pfnNextGetDeviceProcAddr(*device, p).Handle); + //Marshal.FreeHGlobal((nint)p); + } + return res; + } + + private unsafe PfnVoidFunction CreateInstanceImpl(InstanceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Instance* pInstance) + { + Console.WriteLine("[vk] cII"); + var res = this.VkCreateInstanceHook.OriginalFunction(pCreateInfo, pAllocator, pInstance); + this.VK.CurrentInstance = *pInstance; + //this.CurrentInstance = pInstance; + return res; + } + + private unsafe void AcquireNextImageImpl(Device device, SwapchainKHR swapChain, ulong timeout, Silk.NET.Vulkan.Semaphore semaphore, Fence fence, uint* pImageIndex) + { + Console.WriteLine("[vk] anI"); + this.AcquireNextImageImpl(device, swapChain, timeout, semaphore, fence, pImageIndex); + } + + private void CmdDrawIndexedImpl(CommandBuffer cmdBuffer, uint indexCount, uint instanceCount, uint firstIndex, int vertexOff, uint firstInstance) + { + Console.WriteLine("[vk] drawIndexed"); + this.VkCmdDrawIndexImpl.OriginalFunction(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOff, firstInstance); + } + + private unsafe Result QueuePresentKHRFn(Queue queue, PresentInfoKHR* pPresentInfo) + { + Console.WriteLine("[vk] Present"); + return this.VkQueuePresentKHRHook.OriginalFunction(queue, pPresentInfo); + } + + + public void Activate() + { + Console.WriteLine("Activated Vulkan Hooks"); + //this.VkQueuePresentKHRHook.Activate(); + //this.VkCmdDrawIndexImpl.Activate(); + //this.VkAcquireNextImageKHRHook.Activate(); + } + + private void CommandReceivedHandler(GameWindowCommand command) + { + if (command.Type == GameWindowCommandType.OverlayTextureEvent) + { + Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); + //this.Overlay.Refresh(command.TextureEvent); + } + } + + public IngameIpc IngameIpc { get; } + public IHook VkCreateInstanceHook { get; } + //public IHook VkDeviceInstanceHook { get; } + public IHook VkQueuePresentKHRHook { get; set; } + public IHook VkCmdDrawIndexImpl { get; } + public IHook VkAcquireNextImageKHRHook { get; } + public IHook VkCreateDeviceHook { get; } + public unsafe Instance* CurrentInstance { get; private set; } + } +} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs index 514f417d6..7babfd371 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs @@ -33,7 +33,6 @@ public void InvalidateIO() public bool InitializeIO(nint outputWindowHandle) { - return true; if (this.WndProcHook != null && this.outputWindowHandle == outputWindowHandle) return true; this.InvalidateIO(); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj index a029e0906..451064b95 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj @@ -4,6 +4,7 @@ enable enable true + DEBUG_INPUT @@ -29,6 +30,9 @@ + + + From 55e7dc986fcb51e231b2f9915a0da309ac750ca4 Mon Sep 17 00:00:00 2001 From: chyyran Date: Thu, 17 Mar 2022 19:22:58 -0400 Subject: [PATCH 35/38] cef: fix Size message and prevent double-resize of textures --- .../Orchestration/Ingame/CursorEventParams.cs | 2 +- .../Orchestration/Ingame/GameWindowCommand.cs | 14 +++++++------- .../Orchestration/Ingame/HandshakeEventParams.cs | 2 +- .../Orchestration/Ingame/MouseEventParams.cs | 2 +- .../Ingame/OverlayTextureEventParams.cs | 2 +- .../Ingame/WindowMessageEventParams.cs | 2 +- .../Ingame/WindowResizeEventParams.cs | 3 ++- .../InputTests.cs | 10 +++++++++- .../Snowflake.Plugin.Emulators.RetroArch.csproj | 2 -- .../Browser/CefSharpBrowserTab.cs | 2 +- .../Browser/D3DSharedTextureRenderHandler.cs | 13 +++++++++---- 11 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs index f34c2cca5..dcc390008 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/CursorEventParams.cs @@ -8,7 +8,7 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CursorEventParams { public Cursor Cursor; diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs index 2bfb72143..1e41c3808 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/GameWindowCommand.cs @@ -9,19 +9,19 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Explicit, Pack = 0)] + [StructLayout(LayoutKind.Explicit, Pack = 1)] public struct GameWindowCommand { public const byte GameWindowMagic = 0x9F; [FieldOffset(0)] public byte Magic; [FieldOffset(1)] public GameWindowCommandType Type; - [FieldOffset(6)] public HandshakeEventParams HandshakeEvent; - [FieldOffset(6)] public WindowResizeEventParams ResizeEvent; - [FieldOffset(6)] public WindowMessageEventParams WindowMessageEvent; - [FieldOffset(6)] public MouseEventParams MouseEvent; - [FieldOffset(6)] public CursorEventParams CursorEvent; - [FieldOffset(6)] public OverlayTextureEventParams TextureEvent; + [FieldOffset(2)] public HandshakeEventParams HandshakeEvent; + [FieldOffset(2)] public WindowResizeEventParams ResizeEvent; + [FieldOffset(2)] public WindowMessageEventParams WindowMessageEvent; + [FieldOffset(2)] public MouseEventParams MouseEvent; + [FieldOffset(2)] public CursorEventParams CursorEvent; + [FieldOffset(2)] public OverlayTextureEventParams TextureEvent; public ReadOnlyMemory ToBuffer() { diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs index 642726b55..2c6658d40 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/HandshakeEventParams.cs @@ -7,7 +7,7 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct HandshakeEventParams { public Guid Guid; diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs index 679157f66..8be0680ba 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/MouseEventParams.cs @@ -7,7 +7,7 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct MouseEventParams { public MouseButton MouseDoubleClick; diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs index 369362820..0865076f6 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/OverlayTextureEventParams.cs @@ -8,7 +8,7 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct OverlayTextureEventParams { public nint TextureHandle; diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs index c693c1fc4..c95b55ce8 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowMessageEventParams.cs @@ -8,7 +8,7 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct WindowMessageEventParams { public int Message; diff --git a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs index 50d22445b..8373ef574 100644 --- a/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs +++ b/src/Snowflake.Framework.Primitives/Orchestration/Ingame/WindowResizeEventParams.cs @@ -8,10 +8,11 @@ namespace Snowflake.Orchestration.Ingame { - [StructLayout(LayoutKind.Sequential)] + [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct WindowResizeEventParams { public int Height; public int Width; + public byte Force; } } diff --git a/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs b/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs index 23f029800..c5f10ef0b 100644 --- a/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs +++ b/src/Snowflake.Framework.Tests.Input.Windows/InputTests.cs @@ -25,7 +25,15 @@ public void Test1() [Fact] public void InjectRetroArch() { - var retroArchProcess = Process.Start("E:\\Emulators\\RetroArch\\retroarch.exe"); + //E:\Emulators\yuzu + var startInfo = new ProcessStartInfo("E:\\Emulators\\RetroArch\\retroarch.exe"); + + //var startInfo = new ProcessStartInfo("E:\\Emulators\\yuzu\\yuzu.exe"); + + //startInfo.EnvironmentVariables.Add("VK_INSTANCE_LAYERS", "VK_LAYER_SABINOKAKU_injection"); + //startInfo.EnvironmentVariables.Add("ENABLE_SABINOKAKU_VULKAN", "1"); + var retroArchProcess = Process.Start(startInfo); + var injector = new Injector(retroArchProcess); Debugger.Break(); injector.Inject(@"D:\coding\snowflake\src\Snowflake.Support.Orchestration.Overlay.Runtime.Windows\bin\Debug\net6.0\kaku-x64.dll"); diff --git a/src/Snowflake.Plugin.Emulators.RetroArch/Snowflake.Plugin.Emulators.RetroArch.csproj b/src/Snowflake.Plugin.Emulators.RetroArch/Snowflake.Plugin.Emulators.RetroArch.csproj index e51109e58..114840a89 100644 --- a/src/Snowflake.Plugin.Emulators.RetroArch/Snowflake.Plugin.Emulators.RetroArch.csproj +++ b/src/Snowflake.Plugin.Emulators.RetroArch/Snowflake.Plugin.Emulators.RetroArch.csproj @@ -4,8 +4,6 @@ net6.0 Snowflake <_SnowflakeUseDevelopmentSDK>true - true - $(BaseIntermediateOutputPath)Generated diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs index 5f7034883..4b89cafb7 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/CefSharpBrowserTab.cs @@ -61,7 +61,7 @@ public async Task InitializeAsync(Uri uri) { case GameWindowCommandType.WindowResizeEvent: System.Drawing.Size size = new(Math.Max(1, cmd.ResizeEvent.Width), Math.Max(1, cmd.ResizeEvent.Height)); - this.Renderer.Resize(size); + this.Renderer.Resize(size, cmd.ResizeEvent.Force > 0); this.Browser.Size = size; this.Browser.GetBrowserHost().Invalidate(PaintElementType.View); break; diff --git a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs index 3bff2c006..1b4e67c83 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Renderer.Windows/Browser/D3DSharedTextureRenderHandler.cs @@ -87,7 +87,7 @@ private void CommandReceivedHandler(GameWindowCommand command) TextureHandle = this.SharedTextureHandle, Width = this.TargetTextureDescription.Width, Height = this.TargetTextureDescription.Height, - Size = this.TargetTextureDescription.Width * this.TargetTextureDescription.Height * CEFBufferBPP + Size = this.TargetTextureDescription.Width * this.TargetTextureDescription.Height * CEFBufferBPP * 2 } }); } @@ -108,10 +108,15 @@ public bool GetScreenPoint(int viewX, int viewY, out int screenX, out int screen return false; } - public void Resize(System.Drawing.Size size) + public void Resize(System.Drawing.Size size, bool force = false) { Console.WriteLine("Resize buffer requested"); - + if (!force && size.Height == this.TargetTextureDescription.Height && size.Width == this.TargetTextureDescription.Width) + { + Console.WriteLine("Resize would not change size, throttling."); + return; + } + nint texPtr = this.Device.CreateNewCefTargetTexture(size); unsafe { @@ -156,7 +161,7 @@ public void Resize(System.Drawing.Size size) SourceProcessId = Environment.ProcessId, Width = this.TargetTextureDescription.Width, Height = this.TargetTextureDescription.Height, - Size = this.TargetTextureDescription.Width * this.TargetTextureDescription.Height * CEFBufferBPP, + Size = this.TargetTextureDescription.Width * this.TargetTextureDescription.Height * CEFBufferBPP * 2, } }); } From e2f5177c8fbfb13a6909acc5b882b884116f8b3d Mon Sep 17 00:00:00 2001 From: chyyran Date: Thu, 17 Mar 2022 19:23:25 -0400 Subject: [PATCH 36/38] runtime(vk): preliminary vulkan hook --- .../EntryPoint.cs | 25 +++-- .../Hooks/Direct3D11/Direct3D11Hook.cs | 6 +- .../Direct3D11/Direct3D11ImGuiInstance.cs | 106 ++++++++---------- .../Hooks/Vulkan/VulkanHook.cs | 43 +++---- .../kaku-vk.dll | Bin 0 -> 664576 bytes .../kaku-x64.dll | Bin 309760 -> 338432 bytes .../kaku.co | 4 +- 7 files changed, 86 insertions(+), 98 deletions(-) create mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-vk.dll diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs index d79cbafa9..a94b2e919 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs @@ -8,6 +8,7 @@ using Snowflake.Orchestration.Ingame; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL; using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Vulkan; +using Silk.NET.Vulkan; namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows { @@ -16,21 +17,31 @@ public static class EntryPoint { public static int Main(nint args, int sizeBytes) { + Vanara.PInvoke.Kernel32.AllocConsole(); + try { - - return Main(); + unsafe + { + nint* handles = (nint*)args; + if (handles != null) + { + Console.WriteLine($"ip: {handles[0]}, dp: {handles[1]}, {sizeBytes}"); + return Main(new Instance(handles[0]), new Device(handles[1])); + } + } + return Main(null, null); } - catch + catch(Exception e) { - Console.ReadLine(); + Console.WriteLine($"failed:\n{e}"); + //Console.ReadLine(); return 1; } } - private static int Main() + private static int Main(Instance? i, Device? d) { - Vanara.PInvoke.Kernel32.AllocConsole(); Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); var ipc = new IngameIpc(Guid.Empty); @@ -43,7 +54,7 @@ private static int Main() var result = await ipc.ConnectAsync(); Console.WriteLine($"IPC Connection: {result}"); ipc.Listen(); - new VulkanHook(ipc).Activate(); + new VulkanHook(i, d, ipc).Activate(); new Direct3D11Hook(ipc).Activate(); new OpenGLHook(ipc).Activate(); diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs index 9ebf75017..bf503a472 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs @@ -79,8 +79,8 @@ private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount resizeBuffersLock = true; try { - Console.WriteLine($"rz {width}x{height}"); - this.ImGuiInst.DiscardSwapchain(); + Console.WriteLine($"rz {width}x{height} a"); + //this.ImGuiInst.InvalidateRenderTarget(); return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); } finally @@ -169,8 +169,8 @@ private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uin ImGui.UpdatePlatformWindows(); ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); - ImGuiInst.SetRenderContext(deviceContext); var drawData = ImGui.GetDrawData(); + //ImGuiInst.SetRenderContext(deviceContext); this.ImGuiInst.Render(drawData); this.Overlay.ReleaseSync(); } diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs index d7c0180b5..38a82a22d 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs @@ -11,7 +11,7 @@ namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D { internal class Direct3D11ImGuiInstance : IDisposable { - public unsafe ID3D11RenderTargetView* renderTargetView = null; + //public unsafe ID3D11RenderTargetView* renderTargetView = null; private nint outputWindowHandle = 0; private bool disposedValue; @@ -41,15 +41,6 @@ public void Render(ImDrawDataPtr drawData) this.Backend.RenderDrawData(drawData); } - public unsafe void DiscardSwapchain() - { - this.InvalidateRenderTarget(); - - //ImGui.ImGui.ImGuiImplDX11InvalidateDeviceObjects(); - this.Backend.InvalidateDeviceObjects(); - this.SwapchainReady = false; - } - private void RefreshSwapchain() { if (!this.Backend.CreateDeviceObjects()) @@ -60,39 +51,36 @@ private void RefreshSwapchain() this.SwapchainReady = true; } - private unsafe void InvalidateRenderTarget() - { - if (this.renderTargetView == null) - return; + //public unsafe void InvalidateRenderTarget() + //{ + // if (this.renderTargetView == null) + // return; - this.renderTargetView->Release(); - this.renderTargetView = null; - this.SurfacesReady = false; - } + // this.renderTargetView->Release(); + // this.renderTargetView = null; + // this.SurfacesReady = false; + //} - public unsafe void RefreshTargetView(ComPtr swapChain) - { - this.InvalidateRenderTarget(); + //public unsafe void RefreshTargetView(ComPtr swapChain) + //{ + // this.InvalidateRenderTarget(); - SwapChainDesc desc = new(); - swapChain.Ref.GetDesc(ref desc); + // using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); - using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); + // using var backBuffer = + // swapChain.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); - using var backBuffer = - swapChain.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); + // // CRT accepts a Tex2D pointer just fine. + // ID3D11RenderTargetView* newRenderTargetView = null; + // device.Ref.CreateRenderTargetView((ID3D11Resource*)~backBuffer, null, &newRenderTargetView); + // this.renderTargetView = newRenderTargetView; + // this.SurfacesReady = true; - // CRT accepts a Tex2D pointer just fine. - ID3D11RenderTargetView* newRenderTargetView = null; - device.Ref.CreateRenderTargetView((ID3D11Resource*)~backBuffer, null, &newRenderTargetView); - this.renderTargetView = newRenderTargetView; - this.SurfacesReady = true; - - if (!this.SwapchainReady) - { - this.RefreshSwapchain(); - } - } + // if (!this.SwapchainReady) + // { + // this.RefreshSwapchain(); + // } + //} [MethodImpl(MethodImplOptions.AggressiveInlining)] private unsafe void InitializeDevices(ComPtr swapChain, nint hWnd) @@ -124,7 +112,7 @@ public unsafe bool PrepareForPaint(ComPtr swapChain, Vector2 scr if (desc.OutputWindow != this.outputWindowHandle) { Console.WriteLine("Swapchain outdated and so discarded."); - this.DiscardSwapchain(); + //this.InvalidateRenderTarget(); this.InvalidateDevices(); } @@ -133,10 +121,10 @@ public unsafe bool PrepareForPaint(ComPtr swapChain, Vector2 scr this.InitializeDevices(swapChain, desc.OutputWindow); } - if (!this.SurfacesReady) - { - this.RefreshTargetView(swapChain); - } + //if (!this.SurfacesReady) + //{ + // this.RefreshTargetView(swapChain); + //} ImGuiIOPtr io = ImGui.GetIO(); io.DisplaySize = screenDim; @@ -148,26 +136,26 @@ public unsafe bool PrepareForPaint(ComPtr swapChain, Vector2 scr return true; } - public unsafe void SetRenderContext(ComPtr deviceContext) - { - deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); - } + //public unsafe void SetRenderContext(ComPtr deviceContext) + //{ + // deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); + //} protected virtual void Dispose(bool disposing) { - if (!disposedValue) - { - if (disposing) - { - unsafe - { - if (renderTargetView != null) - renderTargetView->Release(); - } - //this.Context?.Dispose(); - } - disposedValue = true; - } + //if (!disposedValue) + //{ + // if (disposing) + // { + // unsafe + // { + // if (renderTargetView != null) + // renderTargetView->Release(); + // } + // //this.Context?.Dispose(); + // } + // disposedValue = true; + //} } public void Dispose() diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs index 272c37ddc..62177714a 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs @@ -48,21 +48,26 @@ internal class VulkanHook public unsafe delegate void vkAcquireNextImageKHR(Device device, SwapchainKHR swapChain, ulong timeout, Silk.NET.Vulkan.Semaphore semaphore, Fence fence, uint* pImageIndex); - public unsafe VulkanHook(IngameIpc ingameIpc) + public unsafe VulkanHook(Instance? i, Device? d, IngameIpc ingameIpc) { this.IngameIpc = ingameIpc; this.VK = Vk.GetApi(); + var handle = Kernel32.GetModuleHandle("vulkan-1"); - var vqPHr = (long)this.VK.GetInstanceProcAddr(new(null), "vkQueuePresentKHR").Handle; - Console.WriteLine($"{handle.GetProcAddress("vkQueuePresentKHR"):x}, {this.VK.Context.GetProcAddress("vkQueuePresentKHR"):x}, {vqPHr:x}"); + if (i != null && d != null) + { + this.VK.CurrentInstance = i; + this.VK.CurrentDevice = d; + + long x = (long)this.VK.GetDeviceProcAddr(d.Value, "vkQueuePresentKHR").Handle; + //Console.WriteLine($"{x:x}"); + this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, x); + } + unsafe { this.VkCreateInstanceHook = ReloadedHooks.Instance.CreateHook(CreateInstanceImpl, this.VK.Context.GetProcAddress("vkCreateInstance")).Activate(); this.VkCreateDeviceHook = ReloadedHooks.Instance.CreateHook(CreateDeviceImpl, this.VK.Context.GetProcAddress("vkCreateDevice")).Activate(); - - //this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, (long)this.VK.GetInstanceProcAddr(new(null), "vkQueuePresentKHR").Handle); - //this.VkCmdDrawIndexImpl = ReloadedHooks.Instance.CreateHook(CmdDrawIndexedImpl, this.VK.Context.GetProcAddress("vkCmdDrawIndexed")); - //this.VkAcquireNextImageKHRHook = ReloadedHooks.Instance.CreateHook(AcquireNextImageImpl, this.VK.Context.GetProcAddress("vkCmdDrawIndexed")); } this.IngameIpc.CommandReceived += CommandReceivedHandler; } @@ -96,24 +101,6 @@ private unsafe PfnVoidFunction CreateDeviceImpl(PhysicalDevice physicalDevice, D long x = (long)this.VK.GetDeviceProcAddr(*device, "vkQueuePresentKHR").Handle; Console.WriteLine($"{x:x}"); this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, x).Activate(); - - //LayerDeviceCreateInfo* layerCreateInfo = (LayerDeviceCreateInfo*)pCreateInfo->PNext; - - //while (layerCreateInfo != null && (layerCreateInfo->SType != StructureType.LoaderDeviceCreateInfo || - // layerCreateInfo->LayerFunction != 0)) - //{ - // layerCreateInfo = (LayerDeviceCreateInfo*)layerCreateInfo->PNext; - //} - - //if (layerCreateInfo->pLayerInfo == null) - //{ - // Console.WriteLine("bruh layerinfo null"); - // return this.VkCreateDeviceHook.OriginalFunction(physicalDevice, pCreateInfo, pAllocator, device); - //} - //byte* p = (byte*)Marshal.StringToHGlobalAnsi("vkQueuePresentKHR"); - - //this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, (long)layerCreateInfo->pLayerInfo->pfnNextGetDeviceProcAddr(*device, p).Handle); - //Marshal.FreeHGlobal((nint)p); } return res; } @@ -149,9 +136,9 @@ private unsafe Result QueuePresentKHRFn(Queue queue, PresentInfoKHR* pPresentInf public void Activate() { Console.WriteLine("Activated Vulkan Hooks"); - //this.VkQueuePresentKHRHook.Activate(); - //this.VkCmdDrawIndexImpl.Activate(); - //this.VkAcquireNextImageKHRHook.Activate(); + this.VkCreateInstanceHook.Activate(); + this.VkCreateDeviceHook.Activate(); + this.VkQueuePresentKHRHook?.Activate(); } private void CommandReceivedHandler(GameWindowCommand command) diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-vk.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-vk.dll new file mode 100644 index 0000000000000000000000000000000000000000..6dc5c55551c1e1247b75af863cecbbff69af05b2 GIT binary patch literal 664576 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

{j1hbhSp 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 - /// Lightweight helper struct to help manage COM pointer lifetimes. - /// - /// The type of the pointer to wrap - internal ref struct ComPtr where TPtr : unmanaged - { - /// - /// Get a reference to the wrapped pointer. - /// - public unsafe readonly ref TPtr Ref => ref *_pointer; - - /// - /// Delegate to release the wrapped pointer. - /// - /// Prefer static delegates for best performance. - /// - /// The type of pointer to release. - /// The pointer to release. - public unsafe delegate void ComPtrRelease(TComRelease* source) - where TComRelease : unmanaged; - - private ComPtrRelease? Release { get; } - private bool _forgotten = false; - private unsafe TPtr* _pointer; - - /// - /// Create a non-owning ComPtr wrapper. - /// - /// This wrapper will not release the pointer when disposed. - /// - /// The non-owning pointer. - public unsafe ComPtr(TPtr* nonOwningPointer) - { - this._pointer = nonOwningPointer; - this.Release = null; - } - - /// - /// Create an owning ComPtr wrapper. - /// - /// Ownership of the passed pointer is moved into the ComPtr struct, and will be released on dispose. - /// - /// The pointer to move into the wrapper. - /// The delegate to call on dispose to release the pointer. - public unsafe ComPtr(TPtr* pointer, ComPtrRelease? release) - { - this._pointer = pointer; - this.Release = release; - } - - /// - /// Casting delegate to query a new interface of this COM pointer. - /// - /// 'Casting' here is generalized to mean any call to create a new COM handle. - /// - /// The type of the source pointer to cast. - /// The source pointer to cast. - /// The resource GUID of the target interface. - /// The pointer that will contain the new handle. - public unsafe delegate void ComPtrCast(TSourcePtr* source, Guid* riid, void** outPtr) - where TSourcePtr: unmanaged; - - /// - /// Casting delegate to query a new interface of this COM pointer. - /// - /// 'Casting' here is generalized to mean any call to create a new COM handle. - /// - /// The type of the source pointer to cast. - /// The source pointer to cast. - /// The resource GUID of the target interface. - /// The pointer that will contain the new handle. - /// The result of the casting operation. - public unsafe delegate int ComPtrCastInt(TSourcePtr* source, Guid* riid, void** outPtr) - where TSourcePtr : unmanaged; - - - /// - /// Casting delegate to query a new interface of this COM pointer. - /// - /// 'Casting' here is generalized to mean any call to create a new COM handle. - /// - /// The type of the source pointer to cast. - /// The source pointer to cast. - /// The pointer that will contain the new handle. - public unsafe delegate void ComPtrCastT(TSourcePtr* source, TOutPtr** outPtr) - where TSourcePtr : unmanaged - where TOutPtr : unmanaged; - - /// - /// Casts this COM pointer to another interface, creating a new handle. - /// - /// The type of the new interface. - /// The delegate to cast this pointer with. - /// The resource GUID of the target interface. - /// The delegate that releases the new handle. - /// The new casted handle as a wrapped ComPtr - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public unsafe ComPtr Cast(ComPtrCast cast, Guid riid, ComPtr.ComPtrRelease? release) - where TOut: unmanaged - { - TOut* outPointer = null; - cast(this._pointer, &riid, (void**)&outPointer); - return new(outPointer, release); - } - - /// - /// Casts this COM pointer to another interface, creating a new handle. - /// - /// The type of the new interface. - /// The delegate to cast this pointer with. - /// The resource GUID of the target interface. - /// The delegate that releases the new handle. - /// The result of the casting operation. - /// The new casted handle as a wrapped ComPtr - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public unsafe ComPtr Cast(ComPtrCastInt cast, Guid riid, ComPtr.ComPtrRelease? release, out int result) - where TOut : unmanaged - { - TOut* outPointer = null; - result = cast(this._pointer, &riid, (void**)&outPointer); - return new(outPointer, release); - } - - /// - /// Casts this COM pointer to another interface, creating a new handle. - /// - /// The type of the new interface. - /// The delegate to cast this pointer with. - /// The delegate that releases the new handle. - /// The new casted handle as a wrapped ComPtr - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public unsafe ComPtr Cast(ComPtrCastT cast, ComPtr.ComPtrRelease? release) - where TOut : unmanaged - { - TOut* outPointer = null; - cast(this._pointer, &outPointer); - return new(outPointer, release); - } - - /// - /// Moves ownership of the pointer out of the ComPtr, and invalidates the ComPtr wrapper. - /// Disposing the ComPtr after calling Forget will do nothing. The caller is therefore responsible for releasing the handle afterwards. - /// - /// The wrapped pointer. - public unsafe TPtr* Forget() - { - this._forgotten = true; - TPtr* @this = this._pointer; - this._pointer = null; - return @this; - } - - /// - /// Explicit cast to the containing pointer. This method is unsafe. - /// - /// The ComPtr handle. - /// The pointer contained by the ComPtr wrapper. - public static unsafe TPtr* operator ~(ComPtr ptr) => ptr._pointer; - - /// - /// Implicit cast to the containing pointer. This method is unsafe. - /// - /// The ComPtr handle. - public static unsafe implicit operator TPtr* (ComPtr ptr) => ptr._pointer; - - /// - /// Implicit cast to a pointer of the containing pointer. This method is unsafe. - /// - /// The ComPtr handle. - public static unsafe implicit operator TPtr**(ComPtr ptr) => AddressOf(ptr._pointer); - - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public void Dispose() - { - if (_forgotten) - return; - unsafe - { - if (this._pointer == null) - return; - this.Release?.Invoke(this._pointer); - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static unsafe TPtr** AddressOf(TPtr* @in) => &@in; - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs deleted file mode 100644 index c8061d8c5..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 -{ - internal enum D3D11DeviceOrdinals - { - QueryInterface = 0, - AddRef = 1, - Release = 2, - - // ID3D11Device - CreateBuffer = 3, - CreateTexture1D = 4, - CreateTexture2D = 5, - CreateTexture3D = 6, - CreateShaderResourceView = 7, - CreateUnorderedAccessView = 8, - CreateRenderTargetView = 9, - CreateDepthStencilView = 10, - CreateInputLayout = 11, - CreateVertexShader = 12, - CreateGeometryShader = 13, - CreateGeometryShaderWithStreamOutput = 14, - CreatePixelShader = 15, - CreateHullShader = 16, - CreateDomainShader = 17, - CreateComputeShader = 18, - CreateClassLinkage = 19, - CreateBlendState = 20, - CreateDepthStencilState = 21, - CreateRasterizerState = 22, - CreateSamplerState = 23, - CreateQuery = 24, - CreatePredicate = 25, - CreateCounter = 26, - CreateDeferredContext = 27, - OpenSharedResource = 28, - CheckFormatSupport = 29, - CheckMultisampleQualityLevels = 30, - CheckCounterInfo = 31, - CheckCounter = 32, - CheckFeatureSupport = 33, - GetPrivateData = 34, - SetPrivateData = 35, - SetPrivateDataInterface = 36, - GetFeatureLevel = 37, - GetCreationFlags = 38, - GetDeviceRemovedReason = 39, - GetImmediateContext = 40, - SetExceptionMode = 41, - GetExceptionMode = 42, - } - - internal enum DXGISwapChainOrdinals - { - // IUnknown - QueryInterface = 0, - AddRef = 1, - Release = 2, - - // IDXGIObject - SetPrivateData = 3, - SetPrivateDataInterface = 4, - GetPrivateData = 5, - GetParent = 6, - - // IDXGIDeviceSubObject - GetDevice = 7, - - // IDXGISwapChain - Present = 8, - GetBuffer = 9, - SetFullscreenState = 10, - GetFullscreenState = 11, - GetDesc = 12, - ResizeBuffers = 13, - ResizeTarget = 14, - GetContainingOutput = 15, - GetFrameStatistics = 16, - GetLastPresentCount = 17, - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs deleted file mode 100644 index bf503a472..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs +++ /dev/null @@ -1,277 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using Reloaded.Hooks; -using Reloaded.Hooks.Definitions; -using Reloaded.Hooks.Tools; -using Silk.NET.Direct3D11; -using Silk.NET.Core.Native; - -using X64 = Reloaded.Hooks.Definitions.X64; -using X86 = Reloaded.Hooks.Definitions.X86; - -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; -using Silk.NET.DXGI; -using Snowflake.Orchestration.Ingame; -using ImGuiNET; -using System.Numerics; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 -{ - internal class Direct3D11Hook - { - const int D3D11_DEVICE_METHOD_COUNT = 43; - const int D3D11_SWAPCHAIN_METHOD_COUNT = 18; - - private bool resizeBuffersLock = false; - private bool presentLock = false; - - public Direct3D11OverlayTexture Overlay { get; } - public Direct3D11ImGuiInstance ImGuiInst { get; } - - D3D11 API { get; } - - public Direct3D11Hook(IngameIpc ipc) - { - this.IngameIpc = ipc; - this.API = D3D11.GetApi(); - this.Overlay = new(); - - (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) = GetDirect3D11VTable(); - unsafe - { - this.PresentHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.Present, this.PresentImpl); - this.ResizeBuffersHook = swapChainVtable.CreateFunctionHook((int)DXGISwapChainOrdinals.ResizeBuffers, this.ResizeBuffersImpl); - } - - this.IngameIpc.CommandReceived += CommandReceivedHandler; - this.ImGuiInst = new Direct3D11ImGuiInstance(); - } - - private void CommandReceivedHandler(GameWindowCommand command) - { - if (command.Type == GameWindowCommandType.OverlayTextureEvent) - { - Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - this.Overlay.Refresh(command.TextureEvent); - } - } - - public void Activate() - { - Console.WriteLine("Activated D3D11 Hooks"); - this.PresentHook.Activate(); - this.ResizeBuffersHook.Activate(); - } - - private unsafe int ResizeBuffersImpl(IDXGISwapChain* swapChain, uint bufferCount, uint width, uint height, Format newFormat, uint swapChainFlags) - { - if (resizeBuffersLock) - { - Console.WriteLine("[DX11 ResizeBuffers] Entered under lock"); - return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); - } - - resizeBuffersLock = true; - try - { - Console.WriteLine($"rz {width}x{height} a"); - //this.ImGuiInst.InvalidateRenderTarget(); - return this.ResizeBuffersHook.OriginalFunction(swapChain, bufferCount, width, height, newFormat, swapChainFlags); - } - finally - { - this.resizeBuffersLock = false; - } - } - - private unsafe int PresentImpl(IDXGISwapChain* swapChain, uint syncInterval, uint flags) - { - if (presentLock) - { - Console.WriteLine("[DX11 Present] Entered under lock"); - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - } - - presentLock = true; - try - { - ComPtr swapChainWrap = new(swapChain); - SwapChainDesc swapChainDesc = new(); - - using var device = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); - using var device1 = swapChainWrap.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device1.Guid, static d => d->Release()); - using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); - - swapChain->GetDesc(ref swapChainDesc); - - Texture2DDesc backBufferDesc = new(); - using var backBuffer = - swapChainWrap.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, b => b->Release()); - backBuffer.Ref.GetDesc(ref backBufferDesc); - - if (!this.Overlay.SizeMatchesViewport(backBufferDesc.Width, backBufferDesc.Height)) - { - Console.WriteLine($"Requesting resize to {backBufferDesc.Width} x {backBufferDesc.Height}"); - this.IngameIpc.SendRequest(new() - { - Magic = GameWindowCommand.GameWindowMagic, - Type = GameWindowCommandType.WindowResizeEvent, - ResizeEvent = new() - { - Height = (int)(backBufferDesc.Height), - Width = (int)(backBufferDesc.Width), - } - }); - } - - // Haven't received texture handle yet - if (!this.Overlay.ReadyToInitialize) - { - Console.WriteLine("Texture handle not ready."); - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - } - - // need to refresh texture - if (!this.Overlay.PrepareForPaint(device1, swapChainDesc.OutputWindow)) - { - Console.WriteLine("Failed to refresh texture for output window"); - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - } - - this.ImGuiInst.PrepareForPaint(swapChainWrap, new Vector2(backBufferDesc.Width, backBufferDesc.Height)); - ImGuiIOPtr io = ImGui.GetIO(); - - //Console.WriteLine($"drawdata {drawData.DisplaySize}"); - lock (this.Overlay.TextureMutex) - { - if (this.Overlay.AcquireSync()) - { - this.ImGuiInst.NewFrame(); - //ImGui.ImGuiImplWin32NewFrame(); - ImGui.NewFrame(); - - this.Overlay.Paint(static (srv, w, h) => - { - ImGuiFullscreenOverlay.Render(srv, w, h); - }); - - ImGui.Begin("Fps"); - ImGui.Text($"{io.Framerate}"); - ImGui.End(); - - ImGui.ShowDemoWindow(); - ImGui.Render(); - - ImGui.UpdatePlatformWindows(); - ImGui.RenderPlatformWindowsDefault(IntPtr.Zero, IntPtr.Zero); - var drawData = ImGui.GetDrawData(); - //ImGuiInst.SetRenderContext(deviceContext); - this.ImGuiInst.Render(drawData); - this.Overlay.ReleaseSync(); - } - } - - return this.PresentHook.OriginalFunction(swapChain, syncInterval, flags); - } - finally - { - presentLock = false; - } - } - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate int Present(IDXGISwapChain* swapChain, uint syncInterval, uint flags); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - public unsafe delegate int ResizeBuffers(IDXGISwapChain* swapChain, uint bufferCount, uint width, uint height, Format newFormat, uint swapChainFlags); - - private static readonly D3DFeatureLevel[] FEATURE_LEVELS = new[] { D3DFeatureLevel.D3DFeatureLevel101, - D3DFeatureLevel.D3DFeatureLevel110 }; - - public IHook PresentHook { get; } - public IHook ResizeBuffersHook { get; } - public IngameIpc IngameIpc { get; } - - private unsafe (VirtualFunctionTable deviceVtable, VirtualFunctionTable swapChainVtable) GetDirect3D11VTable() - { - using var window = new RenderWindow(); - - D3DFeatureLevel outFeatureLevel = 0; - Span requestFeatureLevels = FEATURE_LEVELS.AsSpan(); - - SwapChainDesc swapChainDesc = new() - { - BufferDesc = new() - { - Width = 100, - Height = 100, - RefreshRate = new() - { - Numerator = 60, - Denominator = 1 - }, - Format = Format.FormatR8G8B8A8Unorm, - ScanlineOrdering = ModeScanlineOrder.ModeScanlineOrderUnspecified, - Scaling = ModeScaling.ModeScalingUnspecified, - }, - SampleDesc = new() - { - Count = 1, - Quality = 0 - }, - Windowed = 1, - BufferUsage = DXGI.UsageRenderTargetOutput, - BufferCount = 1, - OutputWindow = window.WindowHandle.DangerousGetHandle(), - SwapEffect = SwapEffect.SwapEffectDiscard, - Flags = ((uint)SwapChainFlag.SwapChainFlagAllowModeSwitch) - }; - - IDXGISwapChain* swapChain = null; - ID3D11Device* device = null; - ID3D11DeviceContext* context = null; - int? result = 0; - fixed (D3DFeatureLevel* featureLevels = requestFeatureLevels) { - result = API.CreateDeviceAndSwapChain( - null, - D3DDriverType.D3DDriverTypeHardware, - 0, - 0, - featureLevels, - (uint)requestFeatureLevels.Length, - D3D11.SdkVersion, - ref swapChainDesc, - ref swapChain, - ref device, - ref outFeatureLevel, - ref context - ); - } - - if (result == null || result.Value < 0) - { - Console.WriteLine("Failed to create D3D11 Device"); - throw new PlatformNotSupportedException("Direct3D11 not supported."); - } - - Console.WriteLine("Succeeded D3D11 Init"); - - VirtualFunctionTable deviceVtable = VirtualFunctionTable.FromObject((nint)device, D3D11_DEVICE_METHOD_COUNT); - VirtualFunctionTable swapChainVtable = VirtualFunctionTable.FromObject((nint)swapChain, D3D11_SWAPCHAIN_METHOD_COUNT); - - //order is important! - swapChain->Release(); - device->Release(); - context->Release(); - return (deviceVtable, swapChainVtable); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs deleted file mode 100644 index 38a82a22d..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs +++ /dev/null @@ -1,168 +0,0 @@ -using Silk.NET.Direct3D11; -using Silk.NET.DXGI; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; -using System.Runtime.CompilerServices; -using ImGuiBackends.Direct3D11; -using ImGuiNET; -using System.Numerics; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 -{ - internal class Direct3D11ImGuiInstance : IDisposable - { - //public unsafe ID3D11RenderTargetView* renderTargetView = null; - private nint outputWindowHandle = 0; - private bool disposedValue; - - private bool DevicesReady { get; set; } - private bool SurfacesReady { get; set; } - private bool SwapchainReady { get; set; } = false; - public ImGuiBackendDirect3D11 Backend { get; } - public Win32Backend? Input { get; set; } - IntPtr context; - - public Direct3D11ImGuiInstance() - { - context = ImGui.CreateContext(); - ImGui.SetCurrentContext(context); - ImGui.StyleColorsDark(); - - this.Backend = new ImGuiBackendDirect3D11(); - } - - public void NewFrame() - { - this.Backend.NewFrame(); - } - - public void Render(ImDrawDataPtr drawData) - { - this.Backend.RenderDrawData(drawData); - } - - private void RefreshSwapchain() - { - if (!this.Backend.CreateDeviceObjects()) - { - Console.WriteLine("Error when creating objects"); - } - //ImGui.ImGui.ImGuiImplDX11CreateDeviceObjects(); - this.SwapchainReady = true; - } - - //public unsafe void InvalidateRenderTarget() - //{ - // if (this.renderTargetView == null) - // return; - - // this.renderTargetView->Release(); - // this.renderTargetView = null; - // this.SurfacesReady = false; - //} - - //public unsafe void RefreshTargetView(ComPtr swapChain) - //{ - // this.InvalidateRenderTarget(); - - // using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), ID3D11Device.Guid, static d => d->Release()); - - // using var backBuffer = - // swapChain.Cast(static (p, g, o) => p->GetBuffer(0, g, o), ID3D11Texture2D.Guid, static b => b->Release()); - - // // CRT accepts a Tex2D pointer just fine. - // ID3D11RenderTargetView* newRenderTargetView = null; - // device.Ref.CreateRenderTargetView((ID3D11Resource*)~backBuffer, null, &newRenderTargetView); - // this.renderTargetView = newRenderTargetView; - // this.SurfacesReady = true; - - // if (!this.SwapchainReady) - // { - // this.RefreshSwapchain(); - // } - //} - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private unsafe void InitializeDevices(ComPtr swapChain, nint hWnd) - { - using var device = swapChain.Cast(static (p, g, o) => p->GetDevice(g, o), - ID3D11Device.Guid, static d => d->Release()); - using var deviceContext = device.Cast(static (p, o) => p->GetImmediateContext(o), static r => r->Release()); - - //this.WndProc.InitializeIO(hWnd); - this.Input = new Win32Backend(hWnd); - this.Backend.Init((nint)~device, (nint)~deviceContext, false); - this.DevicesReady = true; - } - - private void InvalidateDevices() - { - //this.WndProc.InvalidateIO(); - this.Input?.Dispose(); - this.Input = null; - this.Backend.Shutdown(); - this.DevicesReady = false; - } - - public unsafe bool PrepareForPaint(ComPtr swapChain, Vector2 screenDim) - { - SwapChainDesc desc = new(); - swapChain.Ref.GetDesc(ref desc); - - if (desc.OutputWindow != this.outputWindowHandle) - { - Console.WriteLine("Swapchain outdated and so discarded."); - //this.InvalidateRenderTarget(); - this.InvalidateDevices(); - } - - if (!this.DevicesReady) - { - this.InitializeDevices(swapChain, desc.OutputWindow); - } - - //if (!this.SurfacesReady) - //{ - // this.RefreshTargetView(swapChain); - //} - - ImGuiIOPtr io = ImGui.GetIO(); - io.DisplaySize = screenDim; - - /* TEMP INPUT */ - this.Input?.NewFrame((int)screenDim.X, (int)screenDim.Y); - - this.outputWindowHandle = desc.OutputWindow; - return true; - } - - //public unsafe void SetRenderContext(ComPtr deviceContext) - //{ - // deviceContext.Ref.OMSetRenderTargets(1, ref renderTargetView, null); - //} - - protected virtual void Dispose(bool disposing) - { - //if (!disposedValue) - //{ - // if (disposing) - // { - // unsafe - // { - // if (renderTargetView != null) - // renderTargetView->Release(); - // } - // //this.Context?.Dispose(); - // } - // disposedValue = true; - //} - } - - public void Dispose() - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Dispose(disposing: true); - GC.SuppressFinalize(this); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs deleted file mode 100644 index 43fa2b5fb..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs +++ /dev/null @@ -1,192 +0,0 @@ -using Silk.NET.Core.Native; -using Silk.NET.Direct3D11; -using Silk.NET.DXGI; -using Snowflake.Orchestration.Ingame; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Vanara.PInvoke; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11 -{ - internal class Direct3D11OverlayTexture : IOverlayTexture - { - private unsafe IDXGIKeyedMutex* overlayTextureMutex = null; - private unsafe ID3D11ShaderResourceView* overlayShaderResourceView = null; - private unsafe ID3D11Texture2D* overlayTexture = null; - - private (uint width, uint height) OverlayTexDim { get; set; } - private IntPtr overlayTextureHandle = IntPtr.Zero; - private nint outputWindowHandle = 0; - - public readonly object TextureMutex = new(); - private bool ReadyToPaint { get; set; } - public bool ReadyToInitialize => this.overlayTextureHandle != IntPtr.Zero; - - public bool SizeMatchesViewport(uint width, uint height) - { - return (width == OverlayTexDim.width) && (height == OverlayTexDim.height); - } - - public bool AcquireSync() - { - unsafe - { - if (this.overlayTextureMutex == null) - return false; - - this.overlayTextureMutex->AcquireSync(0, unchecked((uint)-1)); - } - return true; - } - - public void ReleaseSync() - { - unsafe - { - this.overlayTextureMutex->ReleaseSync(0); - } - } - - public bool Refresh(OverlayTextureEventParams texParams) - { - int owningPid = texParams.SourceProcessId; - nint textureHandle = texParams.TextureHandle; - - var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); - if (process.IsNull) - { - Console.WriteLine("unable to open source process..."); - return false; - } - - if (!Kernel32.DuplicateHandle(process, textureHandle, Kernel32.GetCurrentProcess(), out IntPtr dupedHandle, - 0, false, Kernel32.DUPLICATE_HANDLE_OPTIONS.DUPLICATE_SAME_ACCESS)) - { - Console.WriteLine("unable to dupe handle"); - return false; - }; - - Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")}"); - - // Release old texture - unsafe - { - if (this.overlayTexture != null) - { - this.Invalidate(); - } - } - - // close old the handle - Kernel32.CloseHandle(this.overlayTextureHandle); - - // new texture will be fetched on next paint. - this.overlayTextureHandle = dupedHandle; - return true; - } - - private unsafe void Invalidate() - { - lock (this.TextureMutex) - { - if (this.overlayShaderResourceView != null) - this.overlayShaderResourceView->Release(); - - if (this.overlayTextureMutex != null) - this.overlayTextureMutex->Release(); - - if (this.overlayTexture != null) - this.overlayTexture->Release(); - - this.overlayTexture = null; - this.overlayTextureMutex = null; - this.overlayShaderResourceView = null; - - this.ReadyToPaint = false; - } - } - - public unsafe bool PrepareForPaint(ComPtr device1Handle, nint outputWindowHandle) - { - if (this.ReadyToPaint && this.outputWindowHandle == outputWindowHandle) - { - return true; - } - - this.Invalidate(); - - ID3D11ShaderResourceView* texSRV = null; // moved to this.overlayShaderResourceView - - using ComPtr tex2D = - device1Handle.Cast((p, g, o) => - p->OpenSharedResource1(this.overlayTextureHandle.ToPointer(), g, o), ID3D11Texture2D.Guid, static d => d->Release(), out int res); - - using ComPtr deviceHandle = - device1Handle.Cast(static (p, g, o) => p->QueryInterface(g, o), ID3D11Device.Guid, static d => d->Release()); - - if (res != 0) - { - Console.WriteLine($"Unable to open shared texture handle {this.overlayTextureHandle}: {res.ToString("x")}."); - return false; - } - - // todo: error check - Console.WriteLine("Opened shared texture."); - using var texMtx = tex2D.Cast(static (p, g, o) => p->QueryInterface(g, o), IDXGIKeyedMutex.Guid, static d => d->Release()); - - if (~texMtx == null) - { - Console.WriteLine("Mutex not yet ready, can not open shared texture."); - - // not ready yet. - return false; - } - - Texture2DDesc tex2dDesc = new(); // dropped - - tex2D.Ref.GetDesc(ref tex2dDesc); - using var texRsrc = tex2D.Cast - (static (p, g, o) => p->QueryInterface(g, o), ID3D11Resource.Guid, static d => d->Release()); - - this.overlayTextureMutex = texMtx.Forget(); - this.overlayTexture = tex2D.Forget(); - this.OverlayTexDim = (tex2dDesc.Width, tex2dDesc.Height); - - ShaderResourceViewDesc srvDesc = new() // dropped - { - Format = tex2dDesc.Format, - ViewDimension = D3DSrvDimension.D3D101SrvDimensionTexture2D, - Anonymous = new(texture2D: new() - { - MipLevels = tex2dDesc.MipLevels, - MostDetailedMip = 0, - }) - }; - - // not worth using ComPtr for texSrc here because capture and lifetime of texSRV.. - // CSRV requires a ID3D11Resource..? - deviceHandle.Ref.CreateShaderResourceView(texRsrc, ref srvDesc, ref texSRV); - - // Get text src - this.overlayShaderResourceView = texSRV; - this.outputWindowHandle = outputWindowHandle; - - this.ReadyToPaint = true; - return true; - } - - public void Paint(Action renderFn) - { - lock (this.TextureMutex) - { - unsafe - { - renderFn((nint)this.overlayShaderResourceView, OverlayTexDim.width, OverlayTexDim.height); - } - } - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs deleted file mode 100644 index 2f78e7305..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks -{ - internal static class GuidHelpers - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe Guid* RiidOf(Guid @in) - { - return &@in; - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs deleted file mode 100644 index 6b6e5f7b8..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Snowflake.Orchestration.Ingame; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks -{ - internal interface IOverlayTexture - { - bool AcquireSync(); - void ReleaseSync(); - bool SizeMatchesViewport(uint width, uint height); - bool Refresh(OverlayTextureEventParams texParams); - void Paint(Action renderFn); - - } -} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs deleted file mode 100644 index 6e2aa39a1..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs +++ /dev/null @@ -1,164 +0,0 @@ -using ImGuiNET; -using Reloaded.Hooks; -using Reloaded.Hooks.Definitions; -using Silk.NET.Core.Contexts; -using Silk.NET.OpenGL; -using Silk.NET.OpenGL.Legacy.Extensions.EXT; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using Vanara.PInvoke; -using static Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc.WndProcHook; -using X64 = Reloaded.Hooks.Definitions.X64; -using X86 = Reloaded.Hooks.Definitions.X86; -using Snowflake.Orchestration.Ingame; -using System.Numerics; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL -{ - internal class OpenGLHook - { - GL GlContext { get; } - Kernel32.SafeHINSTANCE OpenGLHandle { get; } - HWND ActiveHwnd { get; set; } - - OpenGLImGuiInstance ImGuiInst { get; } - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public delegate nint WndProcCallback(nint hWnd, uint msg, nint wParam, nint lParam); - - private unsafe delegate* unmanaged wglGetCurrentContext; - private unsafe delegate* unmanaged wglMakeCurrent; - private unsafe delegate* unmanaged wglCreateContext; - - private nint ImGuiContext = 0; - - public OpenGLHook(IngameIpc ingameIpc) - { - this.IngameIpc = ingameIpc; - (this.OpenGLHandle, this.GlContext) = GetOpenGLGlobalInstance(); - - this.SwapBuffersHook = ReloadedHooks.Instance.CreateHook - (this.SwapBuffersImpl, this.GlContext.Context.GetProcAddress("wglSwapBuffers")); - unsafe - { - this.wglGetCurrentContext = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglGetCurrentContext"); - this.wglMakeCurrent = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglMakeCurrent"); - this.wglCreateContext = (delegate* unmanaged)this.GlContext.Context.GetProcAddress("wglCreateContext"); - } - - this.Overlay = new OpenGLOverlayTexture(); - this.IngameIpc.CommandReceived += CommandReceivedHandler; - this.ImGuiInst = new(); - } - - private void CommandReceivedHandler(GameWindowCommand command) - { - if (command.Type == GameWindowCommandType.OverlayTextureEvent) - { - Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - this.Overlay.Refresh(command.TextureEvent); - } - } - - public void Activate() - { - Console.WriteLine("Activated OpenGL Hooks"); - this.SwapBuffersHook.Activate(); - } - - public IngameIpc IngameIpc { get; } - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate int SwapBuffers(HDC deviceContext); - - public unsafe int SwapBuffersImpl(HDC deviceContext) - { - HWND renderingHwnd = User32.WindowFromDC(deviceContext); - - User32.GetClientRect(renderingHwnd, out RECT lpRect); - int width = lpRect.right - lpRect.left; - int height = lpRect.bottom - lpRect.top; - - Vector2 screenDim = new(width, height); - - if (!this.Overlay.SizeMatchesViewport((uint)width, (uint)height)) - { - Console.WriteLine($"Requesting resize to {width} x {height}"); - this.IngameIpc.SendRequest(new() - { - Magic = GameWindowCommand.GameWindowMagic, - Type = GameWindowCommandType.WindowResizeEvent, - ResizeEvent = new() - { - Height = (int)(height), - Width = (int)(width), - } - }); - } - - if (!this.Overlay.ReadyToInitialize) - { - Console.WriteLine("Texture handle not ready."); - return this.SwapBuffersHook.OriginalFunction(deviceContext); - } - - if (!this.Overlay.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle())) - { - Console.WriteLine("Failed to open shared texture"); - return this.SwapBuffersHook.OriginalFunction(deviceContext); - } - - this.ImGuiInst.PrepareForPaint(this.GlContext, renderingHwnd.DangerousGetHandle(), screenDim); - - var io = ImGui.GetIO(); - lock (this.Overlay.TextureMutex) - { - if (this.Overlay.AcquireSync()) - { - ImGuiInst.NewFrame(); - ImGui.NewFrame(); - - ImGui.Begin("Fps"); - ImGui.Text($"{io.Framerate}"); - ImGui.End(); - - this.Overlay.Paint(static (tex, w, h) => - { - ImGuiFullscreenOverlay.Render(tex, w, h); - }); - - ImGui.ShowDemoWindow(); - ImGui.Render(); - ImGuiInst.Render(ImGui.GetDrawData()); - this.Overlay.ReleaseSync(); - } - } - - return this.SwapBuffersHook.OriginalFunction(deviceContext); - } - - public IHook SwapBuffersHook { get; } - public IHook? WndProcHook { get; set; } - public OpenGLOverlayTexture Overlay { get; private set; } - - private unsafe static (Kernel32.SafeHINSTANCE, GL) GetOpenGLGlobalInstance() - { - var handle = Kernel32.GetModuleHandle("opengl32"); - if (handle.IsNull) - { - throw new PlatformNotSupportedException("OpenGL not supported."); - } - - return (handle, GL.GetApi(new WglNativeContext(handle))); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs deleted file mode 100644 index f4437b024..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs +++ /dev/null @@ -1,92 +0,0 @@ - -using ImGuiBackends.OpenGL3; -using ImGuiNET; -using Silk.NET.OpenGL; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; -using System.Numerics; -using Vanara.PInvoke; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL -{ - internal class OpenGLImGuiInstance - { - private bool DevicesReady { get; set; } - public ImGuiBackendOpenGL Backend { get; set; } - - public Win32Backend? Input { get; set; } - IntPtr context; - - private nint outputWindowHandle; - - public void InitializeDevices(GL gl, nint hWnd) - { - // OpenGL backend does not support reusable contexts. - Console.WriteLine("reinitializing imgui context"); - - context = ImGui.CreateContext(); - ImGui.SetCurrentContext(context); - ImGui.StyleColorsDark(); - - this.Input = new Win32Backend(hWnd); - this.Backend = new ImGuiBackendOpenGL(); - - this.Backend.Init(gl); - this.Backend.CreateDeviceObjects(); - - this.outputWindowHandle = hWnd; - this.DevicesReady = true; - //this.WndProc.InitializeIO(hWnd); - } - - public void NewFrame() - { - this.Backend.NewFrame(); - } - - public void Render(ImDrawDataPtr drawData) - { - this.Backend.RenderDrawData(drawData); - } - - private void DiscardContext() - { - this.Input?.Dispose(); - this.Input = null; - this.Backend?.Shutdown(); - - // OpenGL backend does not support reusable contexts. - if (context != IntPtr.Zero) - ImGui.DestroyContext(context); - - this.DevicesReady = false; - } - - public unsafe bool PrepareForPaint(GL gl, nint hWnd, Vector2 screenDim) - { - if (hWnd != this.outputWindowHandle) - { - Console.WriteLine($"GL context outdated and discarded was {this.outputWindowHandle} now {hWnd}."); - this.DiscardContext(); - } - - if (!this.DevicesReady) - { - this.InitializeDevices(gl, hWnd); - } - - ImGuiIOPtr io = ImGui.GetIO(); - io.DisplaySize = screenDim; - this.Input?.NewFrame((int)screenDim.X, (int)screenDim.Y); - - this.outputWindowHandle = hWnd; - return true; - } - - - - - //public ImGuiContext Context { get; } - //public ImGuiWndProcHandler WndProc { get; } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs deleted file mode 100644 index b110d052b..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs +++ /dev/null @@ -1,195 +0,0 @@ -using Silk.NET.OpenGL; -using Silk.NET.OpenGL.Legacy.Extensions.EXT; -using Snowflake.Orchestration.Ingame; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Text; -using System.Threading.Tasks; -using Vanara.PInvoke; -using Legacy = Silk.NET.OpenGL.Legacy; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL -{ - internal class OpenGLOverlayTexture : IOverlayTexture - { - private IntPtr overlayTextureHandle; - private (uint glTex, uint glMemHandle) overlayTexture; - private bool ReadyToPaint { get; set; } - private (uint width, uint height) overlayTexDim { get; set; } - public readonly object TextureMutex = new(); - - GL? currentContext; - ExtWin32KeyedMutex kmtExt; - ExtMemoryObject memObjExt; - private nint outputWindowHandle; - private ulong overlayTextureSize; - public bool ReadyToInitialize => this.overlayTextureHandle != IntPtr.Zero; - - public bool Refresh(OverlayTextureEventParams texParams) - { - int owningPid = texParams.SourceProcessId; - nint textureHandle = texParams.TextureHandle; - // todo: unify this with d3d11 - var process = Kernel32.OpenProcess(new(Kernel32.ProcessAccess.PROCESS_DUP_HANDLE), false, (uint)owningPid); - if (process.IsNull) - { - Console.WriteLine("unable to open source process..."); - return false; - } - - if (!Kernel32.DuplicateHandle(process, textureHandle, Kernel32.GetCurrentProcess(), out IntPtr dupedHandle, - 0, false, Kernel32.DUPLICATE_HANDLE_OPTIONS.DUPLICATE_SAME_ACCESS)) - { - Console.WriteLine("unable to dupe handle"); - return false; - }; - - Console.WriteLine($"Got owned handle {dupedHandle.ToString("x")} {texParams.Width}x{texParams.Height}"); - - // Release old texture - unsafe - { - if (this.overlayTexture.glMemHandle != 0) - { - this.Invalidate(); - } - } - - // close old the handle - Kernel32.CloseHandle(this.overlayTextureHandle); - - // new texture will be fetched on next paint. - this.overlayTextureHandle = dupedHandle; - this.overlayTexDim = (texParams.Width, texParams.Height); - this.overlayTextureSize = texParams.Size; - return true; - } - - private void Invalidate() - { - lock (this.TextureMutex) - { - if (this.currentContext == null || this.overlayTexture.glTex == 0) - { - this.currentContext = null; - this.ReadyToPaint = false; - return; - } - - this.currentContext.DeleteTexture(this.overlayTexture.glTex); - Legacy.GL legacyContext = Legacy.GL.GetApi(this.currentContext.Context); - if (legacyContext.TryGetExtension(out ExtMemoryObject memObjExt)) - { - memObjExt.DeleteMemoryObject(this.overlayTexture.glMemHandle); - } - - this.overlayTexture = (0, 0); - this.ReadyToPaint = false; - } - } - - public unsafe bool PrepareForPaint(GL glContext, nint outputWindowHandle) - { - if (this.ReadyToPaint && this.outputWindowHandle == outputWindowHandle) - { - return true; - } - - this.Invalidate(); - - Legacy.GL legacyContext = Legacy.GL.GetApi(glContext.Context); - - if (!legacyContext.TryGetExtension(out ExtMemoryObjectWin32 memObjWin32Ext)) - { - return false; - } - - if (!legacyContext.TryGetExtension(out ExtMemoryObject memObjExt)) - { - return false; - } - - if (!legacyContext.TryGetExtension(out ExtWin32KeyedMutex kmtExt)) - { - return false; - } - - this.currentContext = glContext; - glContext.CreateTextures(GLEnum.Texture2D, 1, out uint tex); - glContext.TextureParameter(tex, TextureParameterName.TextureTilingExt, (uint)EXT.OptimalTilingExt); - glContext.TextureParameter(tex, TextureParameterName.TextureMinFilter, (uint)GLEnum.Linear); - glContext.TextureParameter(tex, TextureParameterName.TextureMagFilter, (uint)GLEnum.Linear); - glContext.TextureParameter(tex, TextureParameterName.TextureWrapS, (uint)GLEnum.ClampToEdge); - glContext.TextureParameter(tex, TextureParameterName.TextureWrapT, (uint)GLEnum.ClampToEdge); - - Span swizzleMask = stackalloc[] { (int)GLEnum.Blue, (int)GLEnum.Green, (int)GLEnum.Red, (int)GLEnum.Alpha }; - glContext.TextureParameter(tex, TextureParameterName.TextureSwizzleRgba, swizzleMask); - - uint memHandle = memObjExt.CreateMemoryObject(); - // CEF texture is always 4BPP - memObjWin32Ext.ImportMemoryWin32Handle(memHandle, this.overlayTextureSize * 2, EXT.HandleTypeD3D11ImageExt, (void*)this.overlayTextureHandle); - - CheckGlError(glContext, "importwin32"); - if (kmtExt.AcquireKeyedMutexWin32(memHandle, 0, unchecked((uint)-1))) - { - CheckGlError(glContext, "akmtw32"); - memObjExt.TextureStorageMem2D(tex, 1, EXT.Rgba8Ext, this.overlayTexDim.width, this.overlayTexDim.height, memHandle, 0); - CheckGlError(glContext, "texmem"); - kmtExt.ReleaseKeyedMutexWin32(memHandle, 0); - } - else - { - Console.WriteLine("Mutex not yet ready."); - return false; - } - CheckGlError(glContext, "rkmt32"); - - Console.WriteLine($"Got new texture at {this.overlayTextureHandle} ({this.overlayTexDim.width} x {this.overlayTexDim.height}) MEM ({memHandle})"); - this.overlayTexture = (tex, memHandle); - this.kmtExt = kmtExt; - this.memObjExt = memObjExt; - this.outputWindowHandle = outputWindowHandle; - this.ReadyToPaint = true; - return true; - } - - public bool SizeMatchesViewport(uint width, uint height) - { - return (width == overlayTexDim.width) && (height == overlayTexDim.height); - } - - public bool AcquireSync() - { - return this.kmtExt?.AcquireKeyedMutexWin32(this.overlayTexture.glMemHandle, 0, unchecked((uint)-1)) ?? false; - } - - public void ReleaseSync() - { - if (this.overlayTexture.glMemHandle == 0) - return; - this.kmtExt?.ReleaseKeyedMutexWin32(this.overlayTexture.glMemHandle, 0); - } - - public void Paint(Action renderFn) - { - lock (this.TextureMutex) - { - unsafe - { - renderFn((nint)this.overlayTexture.glTex, overlayTexDim.width, overlayTexDim.height); - } - } - } - - public static void CheckGlError(GL gl, string title) - { - var error = gl.GetError(); - if (error != GLEnum.NoError) - { - Console.WriteLine($"{title}: {error}"); - } - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs deleted file mode 100644 index 97a955db5..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs +++ /dev/null @@ -1,77 +0,0 @@ -using Silk.NET.Core.Contexts; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; -using Vanara.PInvoke; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL -{ - internal class WglNativeContext : INativeContext - { - public WglNativeContext(Kernel32.SafeHINSTANCE opengl32) - { - this.LibraryInstance = opengl32; - unsafe - { - nint wglGPA = this.LibraryInstance.GetProcAddress("wglGetProcAddress"); - this.WglGetProcAddress = (delegate* unmanaged)wglGPA; - - if (this.WglGetProcAddress == null) - { - throw new PlatformNotSupportedException("Unable to find wglGetProcAddress in instance handle."); - } - } - } - - private bool disposedValue; - - unsafe readonly delegate* unmanaged WglGetProcAddress; - - public Kernel32.SafeHINSTANCE LibraryInstance { get; } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public nint GetProcAddress(string proc, int? slot = null) - { - nint procAddr; - unsafe - { - procAddr = this.WglGetProcAddress(proc); - } - - if (procAddr == 0) - { - procAddr = Kernel32.GetProcAddress(this.LibraryInstance, proc); - } - - return procAddr; - } - - public bool TryGetProcAddress(string proc, out nint addr, int? slot = null) - { - addr = this.GetProcAddress(proc, slot); - return addr != 0; - } - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - this.LibraryInstance.Dispose(); - } - disposedValue = true; - } - } - - public void Dispose() - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Dispose(disposing: true); - GC.SuppressFinalize(this); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs deleted file mode 100644 index 62177714a..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs +++ /dev/null @@ -1,162 +0,0 @@ -using Snowflake.Orchestration.Ingame; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using X64 = Reloaded.Hooks.Definitions.X64; -using X86 = Reloaded.Hooks.Definitions.X86; -using Silk.NET.Vulkan; -using Reloaded.Hooks; -using Reloaded.Hooks.Definitions; -using Vanara.PInvoke; -using Silk.NET.Core; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Vulkan -{ - internal class VulkanHook - { - - private Vk VK; - - private nint ImGuiContext = 0; - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate PfnVoidFunction vkCreateInstance(InstanceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Instance* pInstance); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate PfnVoidFunction vkCreateDevice(PhysicalDevice physicalDevice, DeviceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Device* device); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate Result vkQueuePresentKHR(Queue queue, PresentInfoKHR* pPresentInfo); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate void vkCmdDrawIndexed(CommandBuffer cmdBuffer, uint indexCount, uint instanceCount, uint firstIndex, int vertexOff, uint firstInstance); - - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - public unsafe delegate void vkAcquireNextImageKHR(Device device, SwapchainKHR swapChain, ulong timeout, Silk.NET.Vulkan.Semaphore semaphore, Fence fence, uint* pImageIndex); - - - public unsafe VulkanHook(Instance? i, Device? d, IngameIpc ingameIpc) - { - this.IngameIpc = ingameIpc; - this.VK = Vk.GetApi(); - - var handle = Kernel32.GetModuleHandle("vulkan-1"); - - if (i != null && d != null) - { - this.VK.CurrentInstance = i; - this.VK.CurrentDevice = d; - - long x = (long)this.VK.GetDeviceProcAddr(d.Value, "vkQueuePresentKHR").Handle; - //Console.WriteLine($"{x:x}"); - this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, x); - } - - unsafe { - this.VkCreateInstanceHook = ReloadedHooks.Instance.CreateHook(CreateInstanceImpl, this.VK.Context.GetProcAddress("vkCreateInstance")).Activate(); - this.VkCreateDeviceHook = ReloadedHooks.Instance.CreateHook(CreateDeviceImpl, this.VK.Context.GetProcAddress("vkCreateDevice")).Activate(); - } - this.IngameIpc.CommandReceived += CommandReceivedHandler; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct LayerDeviceCreateInfo - { - public StructureType SType; - public void* PNext; - public uint LayerFunction; - public LayerInstanceLink* pLayerInfo; - } - - [StructLayout(LayoutKind.Sequential)] - unsafe struct LayerInstanceLink - { - public LayerInstanceLink* PNext; - public delegate* unmanaged[Cdecl] pfnNextGetInstanceProcAddr; - public delegate* unmanaged[Cdecl] pfnNextGetDeviceProcAddr; - - } - - private unsafe PfnVoidFunction CreateDeviceImpl(PhysicalDevice physicalDevice, DeviceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Device* device) - { - Console.WriteLine("[vk] cDI"); - var res = this.VkCreateDeviceHook.OriginalFunction(physicalDevice, pCreateInfo, pAllocator, device); - - if (this.VkQueuePresentKHRHook == null) - { - this.VK.CurrentDevice = *device; - long x = (long)this.VK.GetDeviceProcAddr(*device, "vkQueuePresentKHR").Handle; - Console.WriteLine($"{x:x}"); - this.VkQueuePresentKHRHook = ReloadedHooks.Instance.CreateHook(QueuePresentKHRFn, x).Activate(); - } - return res; - } - - private unsafe PfnVoidFunction CreateInstanceImpl(InstanceCreateInfo* pCreateInfo, AllocationCallbacks* pAllocator, Instance* pInstance) - { - Console.WriteLine("[vk] cII"); - var res = this.VkCreateInstanceHook.OriginalFunction(pCreateInfo, pAllocator, pInstance); - this.VK.CurrentInstance = *pInstance; - //this.CurrentInstance = pInstance; - return res; - } - - private unsafe void AcquireNextImageImpl(Device device, SwapchainKHR swapChain, ulong timeout, Silk.NET.Vulkan.Semaphore semaphore, Fence fence, uint* pImageIndex) - { - Console.WriteLine("[vk] anI"); - this.AcquireNextImageImpl(device, swapChain, timeout, semaphore, fence, pImageIndex); - } - - private void CmdDrawIndexedImpl(CommandBuffer cmdBuffer, uint indexCount, uint instanceCount, uint firstIndex, int vertexOff, uint firstInstance) - { - Console.WriteLine("[vk] drawIndexed"); - this.VkCmdDrawIndexImpl.OriginalFunction(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOff, firstInstance); - } - - private unsafe Result QueuePresentKHRFn(Queue queue, PresentInfoKHR* pPresentInfo) - { - Console.WriteLine("[vk] Present"); - return this.VkQueuePresentKHRHook.OriginalFunction(queue, pPresentInfo); - } - - - public void Activate() - { - Console.WriteLine("Activated Vulkan Hooks"); - this.VkCreateInstanceHook.Activate(); - this.VkCreateDeviceHook.Activate(); - this.VkQueuePresentKHRHook?.Activate(); - } - - private void CommandReceivedHandler(GameWindowCommand command) - { - if (command.Type == GameWindowCommandType.OverlayTextureEvent) - { - Console.WriteLine($"Got texhandle {command.TextureEvent.TextureHandle.ToString("x")} from PID {command.TextureEvent.SourceProcessId}"); - //this.Overlay.Refresh(command.TextureEvent); - } - } - - public IngameIpc IngameIpc { get; } - public IHook VkCreateInstanceHook { get; } - //public IHook VkDeviceInstanceHook { get; } - public IHook VkQueuePresentKHRHook { get; set; } - public IHook VkCmdDrawIndexImpl { get; } - public IHook VkAcquireNextImageKHRHook { get; } - public IHook VkCreateDeviceHook { get; } - public unsafe Instance* CurrentInstance { get; private set; } - } -} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs deleted file mode 100644 index 6f7d0106e..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs +++ /dev/null @@ -1,463 +0,0 @@ -using ImGuiNET; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using Vanara.PInvoke; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc -{ - // For now taken from - // https://github.com/ff-meli/ImGuiScene/blob/master/ImGuiScene/ImGui_Impl/Input/ImGui_Input_Impl_Direct.cs - // We will eventually not actually need this at all, since we will be installing our own hooks and UI driver is really - // the CEF texture and not ImGui, but whatever - // - // largely a port of https://github.com/ocornut/imgui/blob/master/examples/imgui_impl_User32.cpp, though some changes - // and wndproc hooking -#if DEBUG_INPUT - public class Win32Backend - { - [DllImport("user32.dll")] - public static extern long CallWindowProc(IntPtr lpPrevWndFunc, IntPtr hWnd, uint Msg, ulong wParam, long lParam); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ushort HIWORD(ulong val) - { - // #define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff)) - return (ushort)((val >> 16) & 0xFFFF); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ushort LOWORD(ulong val) - { - // #define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff)) - return (ushort)(val & 0xFFFF); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static ushort GET_XBUTTON_WPARAM(ulong val) - { - // #define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) - return HIWORD(val); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static short GET_WHEEL_DELTA_WPARAM(ulong val) - { - // #define GET_WHEEL_DELTA_WPARAM(wParam) ((short)HIWORD(wParam)) - return (short)HIWORD(val); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int GET_X_LPARAM(ulong val) - { - // #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) - return (int)(short)LOWORD(val); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int GET_Y_LPARAM(ulong val) - { - // #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp)) - return (int)(short)HIWORD(val); - } - - delegate long WndProcDelegate(IntPtr hWnd, uint msg, ulong wParam, long lParam); - - private long _lastTime; - private IntPtr _platformNamePtr; - private IntPtr _iniPathPtr; - private IntPtr _hWnd; - private WndProcDelegate _wndProcDelegate; - private IntPtr _wndProcPtr; - private IntPtr _oldWndProcPtr; - private ImGuiMouseCursor _oldCursor = ImGuiMouseCursor.None; - private User32.SafeHCURSOR[] _cursors; - - public Win32Backend(IntPtr hWnd) - { - _hWnd = hWnd; - - // hook wndproc - // have to hold onto the delegate to keep it in memory for unmanaged code - _wndProcDelegate = WndProcDetour; - _wndProcPtr = Marshal.GetFunctionPointerForDelegate(_wndProcDelegate); - _oldWndProcPtr = User32.SetWindowLong(_hWnd, User32.WindowLongFlags.GWL_WNDPROC, _wndProcPtr); - - var io = ImGui.GetIO(); - - io.BackendFlags = io.BackendFlags | (ImGuiBackendFlags.HasMouseCursors | ImGuiBackendFlags.HasSetMousePos); - - _platformNamePtr = Marshal.StringToHGlobalAnsi("imgui_impl_User32_c#"); - unsafe - { - io.NativePtr->BackendPlatformName = (byte*)_platformNamePtr.ToPointer(); - } - - - io.KeyMap[(int)ImGuiKey.Tab] = (int)User32.VK.VK_TAB; - io.KeyMap[(int)ImGuiKey.LeftArrow] = (int)User32.VK.VK_LEFT; - io.KeyMap[(int)ImGuiKey.RightArrow] = (int)User32.VK.VK_RIGHT; - io.KeyMap[(int)ImGuiKey.UpArrow] = (int)User32.VK.VK_UP; - io.KeyMap[(int)ImGuiKey.DownArrow] = (int)User32.VK.VK_DOWN; - io.KeyMap[(int)ImGuiKey.PageUp] = (int)User32.VK.VK_PRIOR; - io.KeyMap[(int)ImGuiKey.PageDown] = (int)User32.VK.VK_NEXT; - io.KeyMap[(int)ImGuiKey.Home] = (int)User32.VK.VK_HOME; - io.KeyMap[(int)ImGuiKey.End] = (int)User32.VK.VK_END; - io.KeyMap[(int)ImGuiKey.Insert] = (int)User32.VK.VK_INSERT; - io.KeyMap[(int)ImGuiKey.Delete] = (int)User32.VK.VK_DELETE; - io.KeyMap[(int)ImGuiKey.Backspace] = (int)User32.VK.VK_BACK; - io.KeyMap[(int)ImGuiKey.Space] = (int)User32.VK.VK_SPACE; - io.KeyMap[(int)ImGuiKey.Enter] = (int)User32.VK.VK_RETURN; - io.KeyMap[(int)ImGuiKey.Escape] = (int)User32.VK.VK_ESCAPE; - io.KeyMap[(int)ImGuiKey.KeyPadEnter] = (int)User32.VK.VK_RETURN; // same keycode, lparam is different. Not sure if this will cause dupe events or not - io.KeyMap[(int)ImGuiKey.A] = (int)User32.VK.VK_A; - io.KeyMap[(int)ImGuiKey.C] = (int)User32.VK.VK_C; - io.KeyMap[(int)ImGuiKey.V] = (int)User32.VK.VK_V; - io.KeyMap[(int)ImGuiKey.X] = (int)User32.VK.VK_X; - io.KeyMap[(int)ImGuiKey.Y] = (int)User32.VK.VK_Y; - io.KeyMap[(int)ImGuiKey.Z] = (int)User32.VK.VK_Z; - - _cursors = new User32.SafeHCURSOR[8]; - _cursors[(int)ImGuiMouseCursor.Arrow] = User32.LoadCursor(IntPtr.Zero, User32.IDC_ARROW); - _cursors[(int)ImGuiMouseCursor.TextInput] = User32.LoadCursor(IntPtr.Zero, User32.IDC_IBEAM); - _cursors[(int)ImGuiMouseCursor.ResizeAll] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZEALL); - _cursors[(int)ImGuiMouseCursor.ResizeEW] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZEWE); - _cursors[(int)ImGuiMouseCursor.ResizeNS] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZENS); - _cursors[(int)ImGuiMouseCursor.ResizeNESW] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZENESW); - _cursors[(int)ImGuiMouseCursor.ResizeNWSE] = User32.LoadCursor(IntPtr.Zero, User32.IDC_SIZENWSE); - _cursors[(int)ImGuiMouseCursor.Hand] = User32.LoadCursor(IntPtr.Zero, User32.IDC_HAND); - } - - //public bool IsImGuiCursor(IntPtr hCursor) - //{ - // return _cursors.Contains(hCursor) ?? false; - //} - - public void NewFrame(int targetWidth, int targetHeight) - { - var io = ImGui.GetIO(); - - io.DisplaySize.X = targetWidth; - io.DisplaySize.Y = targetHeight; - io.DisplayFramebufferScale.X = 1f; - io.DisplayFramebufferScale.Y = 1f; - - var frequency = Stopwatch.Frequency; - var currentTime = Stopwatch.GetTimestamp(); - io.DeltaTime = _lastTime > 0 ? (float)((double)(currentTime - _lastTime) / frequency) : 1f / 60; - _lastTime = currentTime; - - io.KeyCtrl = (User32.GetKeyState((int)User32.VK.VK_CONTROL) & 0x8000) != 0; - io.KeyShift = (User32.GetKeyState((int)User32.VK.VK_SHIFT) & 0x8000) != 0; - io.KeyAlt = (User32.GetKeyState((int)User32.VK.VK_MENU) & 0x8000) != 0; - io.KeySuper = false; - - UpdateMousePos(); - - // TODO: need to figure out some way to unify all this - // The bottom case works(?) if the caller hooks SetCursor, but otherwise causes fps issues - // The top case more or less works if we use ImGui's software cursor (and ideally hide the - // game's hardware cursor) - // It would be nice if hooking WM_SETCURSOR worked as it 'should' so that external hooking - // wasn't necessary - - // this is what imgui's example does, but it doesn't seem to work for us - // this could be a timing issue.. or their logic could just be wrong for many applications - var cursor = io.MouseDrawCursor ? ImGuiMouseCursor.None : ImGui.GetMouseCursor(); - if (_oldCursor != cursor) - { - _oldCursor = cursor; - UpdateMouseCursor(); - } - - // this mouse logic makes the window scroll feel bad. - - // hacky attempt to make cursors work how I think they 'should' - //if (io.WantCaptureMouse || io.MouseDrawCursor) - //{ - // UpdateMouseCursor(); - //} - } - - public void SetIniPath(string iniPath) - { - // TODO: error/messaging when trying to set after first render? - if (iniPath != null) - { - if (_iniPathPtr != IntPtr.Zero) - { - Marshal.FreeHGlobal(_iniPathPtr); - } - - _iniPathPtr = Marshal.StringToHGlobalAnsi(iniPath); - unsafe - { - ImGui.GetIO().NativePtr->IniFilename = (byte*)_iniPathPtr.ToPointer(); - } - } - } - - private void UpdateMousePos() - { - var io = ImGui.GetIO(); - - if (io.WantSetMousePos) - { - var pos = new Point { X = (int)io.MousePos.X, Y = (int)io.MousePos.Y }; - User32.ClientToScreen(_hWnd, ref pos); - User32.SetCursorPos(pos.X, pos.Y); - } - - //if (HWND active_window = ::GetForegroundWindow()) - // if (active_window == g_hWnd || ::IsChild(active_window, g_hWnd)) - if (User32.GetCursorPos(out Point pt) && User32.ScreenToClient(_hWnd, ref pt)) - { - io.MousePos.X = pt.X; - io.MousePos.Y = pt.Y; - } - else - { - io.MousePos.X = float.MinValue; - io.MousePos.Y = float.MinValue; - } - } - - private bool UpdateMouseCursor() - { - var io = ImGui.GetIO(); - if (io.ConfigFlags.HasFlag(ImGuiConfigFlags.NoMouseCursorChange)) - { - return false; - } - - var cur = ImGui.GetMouseCursor(); - if (cur == ImGuiMouseCursor.None || io.MouseDrawCursor) - { - User32.SetCursor(null); - } - else - { - User32.SetCursor(_cursors[(int)cur]); - } - - return true; - } - - private long WndProcDetour(IntPtr hWnd, uint msg, ulong wParam, long lParam) - { - if (hWnd == _hWnd && ImGui.GetCurrentContext() != IntPtr.Zero && (ImGui.GetIO().WantCaptureMouse || ImGui.GetIO().WantCaptureKeyboard)) - { - var io = ImGui.GetIO(); - var wmsg = (User32.WindowMessage)msg; - - switch (wmsg) - { - case User32.WindowMessage.WM_LBUTTONDOWN: - case User32.WindowMessage.WM_LBUTTONDBLCLK: - case User32.WindowMessage.WM_RBUTTONDOWN: - case User32.WindowMessage.WM_RBUTTONDBLCLK: - case User32.WindowMessage.WM_MBUTTONDOWN: - case User32.WindowMessage.WM_MBUTTONDBLCLK: - case User32.WindowMessage.WM_XBUTTONDOWN: - case User32.WindowMessage.WM_XBUTTONDBLCLK: - if (io.WantCaptureMouse) - { - var button = 0; - if (wmsg == User32.WindowMessage.WM_LBUTTONDOWN || wmsg == User32.WindowMessage.WM_LBUTTONDBLCLK) - { - button = 0; - } - else if (wmsg == User32.WindowMessage.WM_RBUTTONDOWN || wmsg == User32.WindowMessage.WM_RBUTTONDBLCLK) - { - button = 1; - } - else if (wmsg == User32.WindowMessage.WM_MBUTTONDOWN || wmsg == User32.WindowMessage.WM_MBUTTONDBLCLK) - { - button = 2; - } - else if (wmsg == User32.WindowMessage.WM_XBUTTONDOWN || wmsg == User32.WindowMessage.WM_XBUTTONDBLCLK) - { - button = GET_XBUTTON_WPARAM(wParam) == 1 /* XBUTTON1 */ ? 3 : 4; - } - - if (!ImGui.IsAnyMouseDown() && User32.GetCapture() == IntPtr.Zero) - { - User32.SetCapture(hWnd); - } - io.MouseDown[button] = true; - return 0; - } - break; - - case User32.WindowMessage.WM_LBUTTONUP: - case User32.WindowMessage.WM_RBUTTONUP: - case User32.WindowMessage.WM_MBUTTONUP: - case User32.WindowMessage.WM_XBUTTONUP: - if (io.WantCaptureMouse) - { - var button = 0; - if (wmsg == User32.WindowMessage.WM_LBUTTONUP) - { - button = 0; - } - else if (wmsg == User32.WindowMessage.WM_RBUTTONUP) - { - button = 1; - } - else if (wmsg == User32.WindowMessage.WM_MBUTTONUP) - { - button = 2; - } - else if (wmsg == User32.WindowMessage.WM_XBUTTONUP) - { - button = GET_XBUTTON_WPARAM(wParam) == 1 /* XBUTTON1 */ ? 3 : 4; - } - - if (!ImGui.IsAnyMouseDown() && User32.GetCapture() == hWnd) - { - User32.ReleaseCapture(); - } - io.MouseDown[button] = false; - return 0; - } - break; - - case User32.WindowMessage.WM_MOUSEWHEEL: - if (io.WantCaptureMouse) - { - io.MouseWheel += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)120 /* WHEEL_DELTA */; - return 0; - } - break; - - case User32.WindowMessage.WM_MOUSEHWHEEL: - if (io.WantCaptureMouse) - { - io.MouseWheelH += (float)GET_WHEEL_DELTA_WPARAM(wParam) / (float)120 /* WHEEL_DELTA */; - return 0; - } - break; - - case User32.WindowMessage.WM_KEYDOWN: - case User32.WindowMessage.WM_SYSKEYDOWN: - if (io.WantCaptureKeyboard) - { - if (wParam < 256) - { - io.KeysDown[(int)wParam] = true; - } - return 0; - } - break; - - case User32.WindowMessage.WM_KEYUP: - case User32.WindowMessage.WM_SYSKEYUP: - if (io.WantCaptureKeyboard) - { - if (wParam < 256) - { - io.KeysDown[(int)wParam] = false; - } - return 0; - } - break; - - case User32.WindowMessage.WM_CHAR: - if (io.WantCaptureKeyboard) - { - io.AddInputCharacter((uint)wParam); - return 0; - } - break; - - // this never seemed to work reasonably, but I'll leave it for now - case User32.WindowMessage.WM_SETCURSOR: - if (io.WantCaptureMouse) - { - if (LOWORD((ulong)lParam) == 1 /* HTCLIENT*/ && UpdateMouseCursor()) - { - // this message returns 1 to block further processing - // because consistency is no fun - return 1; - } - } - break; - - default: - break; - } - } - return CallWindowProc(_oldWndProcPtr, hWnd, msg, wParam, lParam); - } - -#region IDisposable Support - private bool disposedValue = false; // To detect redundant calls - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - // TODO: dispose managed state (managed objects). - _cursors = null; - } - - // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below. - // TODO: set large fields to null. - - if (_oldWndProcPtr != IntPtr.Zero) - { - User32.SetWindowLong(_hWnd, User32.WindowLongFlags.GWL_WNDPROC, _oldWndProcPtr); - _oldWndProcPtr = IntPtr.Zero; - } - - if (_platformNamePtr != IntPtr.Zero) - { - unsafe - { - ImGui.GetIO().NativePtr->BackendPlatformName = null; - } - - Marshal.FreeHGlobal(_platformNamePtr); - _platformNamePtr = IntPtr.Zero; - } - - if (_iniPathPtr != IntPtr.Zero) - { - unsafe - { - ImGui.GetIO().NativePtr->IniFilename = null; - } - - Marshal.FreeHGlobal(_iniPathPtr); - _iniPathPtr = IntPtr.Zero; - } - - disposedValue = true; - } - } - - ~Win32Backend() - { - // Do not change this code. Put cleanup code in Dispose(bool disposing) above. - Dispose(false); - } - - // This code added to correctly implement the disposable pattern. - public void Dispose() - { - // Do not change this code. Put cleanup code in Dispose(bool disposing) above. - Dispose(true); - GC.SuppressFinalize(this); - } -#endregion - } -#endif -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs deleted file mode 100644 index 9cd50c3fe..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs +++ /dev/null @@ -1,83 +0,0 @@ -using X64 = Reloaded.Hooks.Definitions.X64; -using X86 = Reloaded.Hooks.Definitions.X86; -using System.Runtime.InteropServices; -using Reloaded.Hooks.Definitions; -using Reloaded.Hooks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc -{ - internal class WndProcHook - { - [X64.Function(X64.CallingConventions.Microsoft)] - [X86.Function(X86.CallingConventions.Stdcall)] - [UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Unicode, SetLastError = true)] - - public delegate nint WndProcCallback(nint hWnd, uint msg, nint wParam, nint lParam); - - private WndProcCallback Callback { get; } - - /// The hook created for the WndProc function. - /// Can be used to call the original WndProc. - /// - public IHook Hook { get; private set; } - - public WndProcHook(nint hWnd, WndProcCallback callback) - { - var wndProcAddr = WndProcNative.GetWindowLong(hWnd, WndProcNative.GWL.GWL_WNDPROC); - this.Callback = callback; - this.Hook = ReloadedHooks.Instance.CreateHook(this.Callback, (long)wndProcAddr); - } - - public static class WndProcNative - { - [DllImport("kernel32.dll", CharSet = CharSet.Auto)] - public static extern IntPtr GetModuleHandle(string lpModuleName); - - public static IntPtr GetWindowLong(IntPtr hWnd, GWL nIndex) - { - if (IsWindowUnicode(hWnd)) - return GetWindowLongW(hWnd, nIndex); - - return GetWindowLongA(hWnd, nIndex); - } - - private static IntPtr GetWindowLongA(IntPtr hWnd, GWL nIndex) - { - var is64Bit = Environment.Is64BitProcess; - return is64Bit ? GetWindowLongPtr64(hWnd, (int)nIndex) : GetWindowLongPtr32(hWnd, (int)nIndex); - } - - private static IntPtr GetWindowLongW(IntPtr hWnd, GWL nIndex) - { - var is64Bit = Environment.Is64BitProcess; - return is64Bit ? GetWindowLongPtr64W(hWnd, (int)nIndex) : GetWindowLongPtr32W(hWnd, (int)nIndex); - } - - public enum GWL - { - GWL_WNDPROC = (-4), - GWL_HINSTANCE = (-6), - GWL_HWNDPARENT = (-8), - GWL_STYLE = (-16), - GWL_EXSTYLE = (-20), - GWL_USERDATA = (-21), - GWL_ID = (-12) - } - - [DllImport("user32.dll")] - private static extern bool IsWindowUnicode(IntPtr hWnd); - - [DllImport("user32.dll", EntryPoint = "GetWindowLong")] - private static extern IntPtr GetWindowLongPtr32(IntPtr hWnd, int nIndex); - - [DllImport("user32.dll", EntryPoint = "GetWindowLongPtr")] - private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex); - - [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetWindowLongW")] - private static extern IntPtr GetWindowLongPtr32W(IntPtr hWnd, int nIndex); - - [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetWindowLongPtrW")] - private static extern IntPtr GetWindowLongPtr64W(IntPtr hWnd, int nIndex); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs deleted file mode 100644 index 189710ef9..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs +++ /dev/null @@ -1,161 +0,0 @@ -using Snowflake.Orchestration.Ingame; -using System; -using System.Collections.Generic; -using System.IO.Pipes; -using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows -{ - internal class IngameIpc - { - public IngameIpc(Guid instanceGuid) - { - this.Cancellation = new CancellationTokenSource(); - this.InstanceGuid = instanceGuid; - this.ClientStream = new NamedPipeClientStream(".", "Snowflake.Orchestration.Renderer-" + this.InstanceGuid.ToString("N"), PipeDirection.InOut, PipeOptions.Asynchronous); - } - - private CancellationTokenSource Cancellation { get; } - private Guid InstanceGuid { get; } - private NamedPipeClientStream ClientStream { get; } - - public delegate void IngameCommandHandler(GameWindowCommand command); - public event IngameCommandHandler CommandReceived; - - private bool IsListening { get; set; } = false; - public async ValueTask ConnectAsync(CancellationToken cancellationToken = default) - { - Console.WriteLine("Waiting for IPC connection..."); - Memory handshakePacket = new byte[Marshal.SizeOf()]; - try - { - await this.ClientStream.ConnectAsync(cancellationToken); - this.SendRequest(GameWindowCommand.Handshake(this.InstanceGuid)); - await this.ClientStream.ReadAsync(handshakePacket, cancellationToken); - } - catch - { - return IpcConnectStatus.ConnectionError; - } - if (cancellationToken.IsCancellationRequested) - return IpcConnectStatus.ConnectionTimeout; - - // failed to parse packet - GameWindowCommand? _command = GameWindowCommand.FromBuffer(handshakePacket); - if (!_command.HasValue) - return IpcConnectStatus.InvalidCommand; - - // got unexpected handshake?? - GameWindowCommand handshake = _command.Value; - if (handshake.Type != GameWindowCommandType.Handshake - && handshake.HandshakeEvent.Guid != this.InstanceGuid) - return IpcConnectStatus.InvalidHandshake; - - return IpcConnectStatus.Success; - } - - public bool SendRequest(GameWindowCommand command) - { - // todo: reconnect on failure. Will need async :( - Span buffer = stackalloc byte[Marshal.SizeOf()]; - command.IntoBuffer(ref buffer); - - // this should return immediately... - try - { - this.ClientStream.Write(buffer); - return true; - } - catch - { - return false; - } - } - - public void Listen() - { - if (this.IsListening) - return; - Task.Run(async () => await this.ServerWorkThread(this.Cancellation.Token)); - this.IsListening = true; - } - - public async ValueTask ServerWorkThread(CancellationToken shutdownEvent) - { - Memory readBuffer = new byte[Marshal.SizeOf()]; - Console.WriteLine("IPC Thread Running..."); - try - { - while (!shutdownEvent.IsCancellationRequested && this.ClientStream.IsConnected) - { - int bytesRead = await this.ClientStream.ReadAsync(readBuffer, shutdownEvent); - if (shutdownEvent.IsCancellationRequested) - { - Console.WriteLine("Cancellation requested."); - break; - } - - if (bytesRead == 0) - { - Console.WriteLine("Pipe closed"); - break; - } - if (readBuffer.Span[0] != GameWindowCommand.GameWindowMagic) - { - Console.WriteLine("Unexpected magic number: " + readBuffer.Span[0]); - continue; - } - - if (bytesRead != readBuffer.Length) - { - Console.WriteLine($"Unexpected length {bytesRead}, expected {readBuffer.Length}"); - continue; - } - - GameWindowCommand? commandBytes = GameWindowCommand.FromBuffer(readBuffer); - if (!commandBytes.HasValue) - { - Console.WriteLine($"Unexpected payload."); - continue; - } - var command = commandBytes.Value; - - switch (command.Type) - { - case GameWindowCommandType.WindowResizeEvent: - case GameWindowCommandType.WindowMessageEvent: - case GameWindowCommandType.OverlayTextureEvent: - case GameWindowCommandType.MouseEvent: - case GameWindowCommandType.CursorEvent: - this.CommandReceived?.Invoke(command); - break; - } - } - } - catch - { - } - finally - { - this.ClientStream.Dispose(); - } - } - - public void Stop() - { - this.Cancellation.Cancel(); - } - - public enum IpcConnectStatus - { - Success, - InvalidHandshake, - InvalidCommand, - ConnectionTimeout, - ConnectionError - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs deleted file mode 100644 index 5ea987959..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs +++ /dev/null @@ -1,48 +0,0 @@ -using ImGuiNET; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Numerics; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render -{ - internal static class ImGuiFullscreenOverlay - { - public static readonly Vector2 Zero2 = new(0, 0); - public static readonly Vector2 One2 = new(1, 1); - public static readonly Vector4 One4 = new(1, 1, 1, 1); - public static readonly Vector4 Zero4 = new(0, 0, 0, 0); - - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public static void Render(nint imageHandle, float width, float height) - { - var browserDim = new Vector2 { X = width, Y = height }; - - var viewPort = ImGui.GetMainViewport(); - ImGui.SetNextWindowPos(viewPort.Pos, ImGuiCond.Always, Zero2); - ImGui.SetNextWindowSize(viewPort.Size, ImGuiCond.Always); - //ImGui.SetNextWindowFocus(); - - ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, Zero2); - ImGui.PushStyleVar(ImGuiStyleVar.WindowBorderSize, Zero2); - - unsafe - { - ImGui.Begin("Browser Window", - ImGuiWindowFlags.NoDecoration - | ImGuiWindowFlags.NoMove - | ImGuiWindowFlags.NoResize - | ImGuiWindowFlags.NoBackground - //| DearImguiSharp.ImGuiWindowFlags.ImGuiWindowFlagsNoSavedSettings - ); - } - ImGui.Image(imageHandle, browserDim, Zero2, One2, One4, Zero4); - - ImGui.PopStyleVar(1); - ImGui.End(); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs deleted file mode 100644 index 7babfd371..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs +++ /dev/null @@ -1,47 +0,0 @@ -using ImGuiNET; -using Reloaded.Hooks; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.WndProc; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render -{ - // No need to update windows because we don't support viewports. - internal class ImGuiWndProcHandler - { - protected nint outputWindowHandle = 0; - - private WndProcHook? WndProcHook = null; - - private unsafe nint WndProcHandler(nint hWnd, uint msg, nint wParam, nint lParam) - { - //var io = ImGui.GetIO(); - //ImGui.ImplWin32_WndProcHandler((void*)hWnd, msg, wParam, lParam); - return this.WndProcHook?.Hook.OriginalFunction.Invoke(hWnd, msg, wParam, lParam) ?? -1; - } - - public void InvalidateIO() - { - return; - //ImGui.ImGuiImplWin32Shutdown(); - this.WndProcHook?.Hook.Disable(); - this.WndProcHook = null; - } - - public bool InitializeIO(nint outputWindowHandle) - { - if (this.WndProcHook != null && this.outputWindowHandle == outputWindowHandle) - return true; - this.InvalidateIO(); - - //ImGui.ImGuiImplWin32Init(outputWindowHandle); - this.WndProcHook = new WndProcHook(outputWindowHandle, this.WndProcHandler); - this.WndProcHook.Hook.Activate(); - this.outputWindowHandle = outputWindowHandle; - return true; - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs deleted file mode 100644 index 5c12a2e19..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Vanara.PInvoke; -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows -{ - internal class RenderWindow : IDisposable - { - private bool disposedValue; - - private WindowClass WindowClass { get; } - public HWND WindowHandle { get; } - - public RenderWindow() - { - this.WindowClass = new WindowClass( - "SnowflakeOverlay", - Vanara.PInvoke.Kernel32.GetModuleHandle(), - User32.DefWindowProc, - User32.WindowClassStyles.CS_HREDRAW | User32.WindowClassStyles.CS_VREDRAW - ); - User32.RegisterClassEx(this.WindowClass.wc); - this.WindowHandle = User32.CreateWindowEx(0, "SnowflakeOverlay", "SnowflakeOverlayInitWindow", - User32.WindowStyles.WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, (nint)0, (nint)0, this.WindowClass.wc.hInstance); - } - - protected virtual void Dispose(bool disposing) - { - if (!disposedValue) - { - if (disposing) - { - User32.DestroyWindow(this.WindowHandle); - this.WindowClass.Unregister(); - } - disposedValue = true; - } - } - - ~RenderWindow() - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Dispose(disposing: false); - } - - public void Dispose() - { - // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method - Dispose(disposing: true); - GC.SuppressFinalize(this); - } - } -} diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj deleted file mode 100644 index 451064b95..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj +++ /dev/null @@ -1,46 +0,0 @@ - - - net6.0 - enable - enable - true - DEBUG_INPUT - - - - true - True - - - - Always - - - Always - - - Always - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-vk.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-vk.dll deleted file mode 100644 index 6dc5c55551c1e1247b75af863cecbbff69af05b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664576 zcmd?S3w)eao&P^+Lz_ZN!cBt;j4;}%LOV*8sZ^L?kf$0XV3nW<;Z`CFL~JD@t0@VR zG|gJ1YE{(eD%PL6Ru>^$)Pz{P2D)-o|g_* zHQn>l#cl6?f4cp$OE0|aoQu=vopZ@0mo818dqMiLWtXJieM!3Ul((iYzV!SH=FXb6 zcP4;tyzaNRrk?H^i~nY8so<@~Nk<8v85h zioO+Yy5+mZUipmjU9QT?uN?E~a?79g?(^CVSHRzVVk&k1N2jGeyQuEmnA^>%!_)gr z**BfKe|jqQjwx2${6)Uk+1F0k_TQCUs&AsgWbC#ZyN#pz%4C9UjJ5+w6aNard)Wo= zy_ANMQ3_e5W|G!#)9!>sxBp*%jk=!7N4-s%oIbKqA0Mw8>b=7)eOq;^r!g~o1%H{U z+M9-=t_}J1ci%l(`^L%JM;auu5xl*PnS60ZbSH__ zp~5^EqxIlR_CI+y`nN^Bi#>nFDc}}onuV&R9#pS_vn}R{VqC|519Mdd%p(8nQjT`|Ob37U{P}AN3M# zS|0_;H-g`kNgE;0*(jmZiSZhlS)Iv9y>iie?y8TfMpTgZQthqIM1A~qZD<)MAmsB8 z#n&A5LRfX?j6lcud^{eq;uD*g;obz(tHNk0kC$@2e9^Y`CN&x%4wpZts?;KepRBL1 ztZ(x|q-!?nZ_4Bw1~mb=-+XO4<4EG|U!2LisZ1slSRL>?nq;jdAn7EK0f022GH>#W z`cNn4y{NBHqc3fIF+H{$j;4OG&1N|A1!|>%M2kDIiY|LqjP0uE$srSuM1dm zhM+sMkt&a)JG04u2TgZol<(1<-5E!!e@%TW?R(U}GSfpo>R)YOoBBNr_g_rUVy8_t zYT*_ZJ#}r-)k8~X6jNiLq12DZw4~J@^{&j+L9sF&%4jx@K-5V?<?D_ zW;12A*^rV?87ZqRZR+dJ)R1rLpOt%LddjWeLVpOC?v`(m4$OklM@(y36$8Kxs`%Dd zu^L1?LXrLntiDJ6K>`SJfV?|ExDjouMBAy7N5&*5dA}gqPf?l>Eq1yx164E%a`yBG zIg5Bn&suo-tn?g`F(F$EG6>n^B-`fOL=w)$a+QEht`hJBa&41bWp9$JrQ}DA$kmog z0FFFz-SjYWeb2K=xk{E59t!zx5hIZ4hm6w|3+QL*CkvAF_VknN?Qa?b}1onvl2lPe+icfv7M0v+o+wujgbV!g{g5ULllF!@2^F)DAPfcjAZCoexF z{ia@ZSJZW7rjUwi8;4obR4vFZHq|wky-WD~t z)`;%CXTnq;Q;1}swi;0yEoxW0pMe-rasOUFeF*0P#EoRlaafA}t$Jl9Qp(6ky9YkE zmjO*nJUNQpc~4LWRm#K;M0V*F`KS7x%-DE7>9 zvaw^9KM3_@mk&wOx^=s_?Y=M;+5gKzjy!sZvR(K!Q8_c&1L-RUGCxpX< zwV%;JEZrB<2SfTmNPiyE`xEtYLMo4)kbI9hA$*T_Lg=CFgf`JsdKe{jAHGQgA~+#O zNq~g}CvZKKwaR=tAyQ1YyMMja52%mc;{6cwxZKn9&kBbh!ax-D=7%(5H_|!wL;5cB zucJUZ-xTuoAwL@O>5#W}3BP0QV!uOwYe#;>`t79OLH%+2b?S$T*O0nLu~ad!DikVp z7a!pZ9T_;29?TEPgXo{QFmF=*u=hioDWstkYko+1cj5QE*dG3sZQn7H#$RRSUyz8-#vs*c}F9*?(z(5AqlM zRW#0DF*W&#!JTuH`75(k4L0Gft@9(gwr;fnuARejMCEhv?w0yNcuNih-haJmI>M0u zDh<$VXqydv_iIkq?uSqFzD$D(Uv?}(4Y49)(hyd$)|<*pmThWgzHG*)6TYmOV)v;> zsiTiFllZb0fs;VZ^cHI}_Vbep^9Fl$reJCCo7DSq@5_9h_hpf_D=lwOWIVv*0Us;0 zVxU+0GEpR7woWO&%u@100^YaU(vnl}pEdPCeA#h?tR}-IA+16S?t_pW+gcdEudx#I zHnA_0*TR=+KN9s-$!XwU8qCqO^2Js=HvDZr)8e}3pw@od-W>F;pHFA~IuB$x+55=2 z6CaXxv1+;zY3E;y3VBe!&JRmy!#>m1ERfd(=)?#IXOC3PFEYTN9x z?6HI|7rcJ(@N{I&85Ux(@0Z2UTO21=LAF>8En$lFYVez6I-;)OIye6?b9sKs>l#L= zez_Q6rQG`=SopC6qeMflx4A~9(asmv1dFxbYp#!b7})P&sjHZ2rL%bdB>x+x){_3b zPL(zNZL}uJX2szqvVgTs9q9(L%KtE=KT71KM&*^NeU-cDMz2m5@<=+N&fGY4B3`Z1 zV0@I0Ql}$z7kx_Z3C06NGN^OICa=zdR8(+ZITCdaJ>u1=mPV7*`IiOd?nW@(;Zd8m zK0FTCI)$yTkWT6nNoq1jO;$^$O_?4wB}2RbBT~?y)xBbkx@)@xkx^{@B~vleq^3nR zvQLPU0L?nq8oXc&!1s1M$;8|>oOQDfDVYiJ32!Ew%Rp1E2|);VI*`N~&Tz<5R{M>H z84FW~FPFWTLIIa`{YQIyk&SqJA-?LqdTlBN*GB^P$f(QWsId>i|3tyxp+E2M^0B`& z<>XvXW%nq#SQ5Q>6>$)IC znTIJ#K^5uG-Syk8Tm2wHe+7b@9rxmXZ+QWA%$r?g%=5Z)9+YCW_*=d~G{)mcK*IQe zUTC?70+FiJNNsV;zGZX2)rk1KNN92U2Gm()^Pv9Q#sun`66(i)?on%zEOcdwAumTk z8NbGf#;4}pQPqI0&Am-_660k*JURtdWTV3Co_JVUzXlhyGI-5jEg_zk3_2I&kRw$z zhj5xj3t{Y4Lk;X0HL?V;fO%AeJfWBIVe5HRYvbGYbQ(Sw{E*ct3S&bIUc|0=F|&n( zR(ID^P%F&p&!lP}^2_Z-U%|+e_0YK8-MxCMtqy}TfoC+ViX(ulCarGl6`uPD;fl5d z_qPAg%BU&!3xOi}2|tkh>Q@vF2qN{Pq-t+^fhU#=l>13A>I;!Q>RYUQrR_W2{NF-^ zd0Wi@klEqRdB(GYb6IJ?-48yl(Qdm6TVdIUSopw`zG+K@QLi;Rx^1_}X&{qZOJLLPSnB0iZDe1jKVo|mG++!X{eGDWWfT%z~*7-hne7f^7{ey!=(w#7yfvPykd8;C}DH5jXHb>0X{{Ha!DPu(*; z<+lFD$IgOlS-wH0vR>MY+`k<*6@oPag38^sZ}i&39m?)$Rd7eW&X?iqYyia$D@^GW zaImb`RW+3F=UtoA1kp}y-+soGC)4#h!S zd=lYl6o2Y7S08U&Lc3-A=a}m}&3y2sS{(ISXFOb8 zS-|7_fA6j(gNLdA2r}u~T)QJEvHU8fmeAkwr+SQg=>ZbkmT*LK=X1-+pRp2a_6OsiHA~e2nfokyRh?%3DJl6v&o>`PK+J9~5BU&^(%EIqs)9t_s!>2t`F?;n*7xiv*H@`U^CS4Va7buke z!V#Gu*HmiP>SK723mw9mb0?nWEl-C;I#w?I^Y~*r-RmFqnhKUXuCd1t{8Ibx?L_+) zH@iBioTy*^XMKp5v%OSyL&zd%fZtk&LR|an{F*rsBh?8t_|0v}p3IbzQ#kyzxakw% zdut`W#S`F5?H;~1$=QTb5P2=iw)%7Jt}Ur$=AAfPAF@q$bMa;3u;89KK{7!%;=#Oa z&V4LMvsw156~l)^BQrnj1JjoMMQAacWW(?7;qRIN{}&$d+ArZhbf@tf>(NB~ALuD& zyru%Qe6hjH;CGr1ybO%98u!ak0>d`wP`NwfZwab2V#U0GB2*WI`gm;6u{?H$p3Z=* zM9-z$(DSYd==sxMca0vCidk-XGEVEAy8#25YF2 z!1Bc>1H#VeTZutD#N1(w+^egT{oo_uDq5K zOKgo#^GlP#`}Z(cYyhIe@{b@U>pA>$J@M9Np&-n7ZTU%dR=BUE_8?&w1NAIaM`hv}#TBk3~e5r@n zcoXLBqY|F(4TZt7JMh4zNuzI3jhnl`&nOsy#-5oiAJ7P3SH~fc%F?RUOzG$6MF0QF zZ?FI6g_HHS^?=P>j1kush744MU1`?c_-8+ilDIX*kq7v9+`sxSJKx`hA!hiE_ne#m zr{~vy>2~{v)th;Syo>Q?y#f$|5s`LhzuI5bNo)u_|2x_Lu*v${EvXS{IW3%qIH#47 zjg5kjGMp;4n2WQZ!)cPJnTZ)fg}>b?cny{Cz9S893(v2Yn=sLIQ}2+16)}k$Wgec? z;4IBzA=$hVYik)syV&S(e_+L=ibyCT7SU{9*u2=5b3eb7W)D)(1d=KqYlbIWgh;{$ zoRQn?4mFY`7UaOttWnDN_IGAlwbK*)LcFHNKKBs)H|`Po_cf=xTlAYPXa++Qkv`fb zUG8dm`7niCs+r}|s_58L>n@-1M}1w^QhZAj63R=IHep3^yGyFLzIciJVYA(4OuPFu zcbk;6Y}pf+GOLLStaI1Bkz=5JV!;;w7~5Mc-@iM3=k68L*K_j(^gVOpWb}=2l4M3$ z3QiN!&?ayN=a$su4`79~(RbzDo@ zxMH;@yzlzV0Qrb=>*S3i1fSrhh80^=@AY;#+thzZ@9o^-Bdd^5L+7JajXkR~Tz4@6 zWG(IXw=NJ!p1k7v?!efdlq+b*4>Fz}s$VcSg6%QPJtQO{W+> z$i@=;7~d_fYAI1nHSHa3>}kd&M(L>E-?Gt2ZE>&7Pzhng7co7UbJhQ@5+dm0G~AEt zh6;vQKS5iScHL2<=3DsQFqosx9o`8Y6t$?DW{Ills)8vo=`JTYD?8H}s{V=goam#0 z$|Mct!+N7TlUE_yEsz!$s9C4F(QFl{WO!?Yk`@EB5Zh~&_Rsnpl5tyb9b=aoO;`*S z?gm?jtj;u(5%NeWP%I7BQV^@27dI`VwX>%_; znI4fX*BEai;ef*#;5F{ZKc!N-q+NUUUB;32XTcWKe?Wz>)e;D8H9~z}Y%A~9PE#Xu zaEyGli0PiI>lx^kId9li9aN@CePw5UE~EvM6<$Kno_vWfj!ID6;T}q%+-umaSF=8R zeYx-scj&_E)YvDPM8>Y=qxgCai1yeYh%e(O$c5vO&kxFQnX=tdv%oMELo^il;jm}< zh7m~9u7UYdU;m;0vg5xd@Rvt_V-kP4_lx9-{*nIj=H2j@zvg<@uKCMzXYDzEIcW^SFE2(iZseZv{_+C`H+Ew?_Lo0DR34-3FJJyOFP%=goN@m0GqpSAFCW9-;4lCB z%=7n`E;v5C;y8c#oQ_dre|c}Mi1tjBom^O`mi^_eFQl369Ad9K7@$=6%j?u^yubXf z*Y2Xf{5Kh{{AHtA;7<6<@VrDW>b3n4sZA8NnX|1>ix%H4C-<38ZPj|f?~9^7Lsf8} z=A>M`nxlU0ah^197&iR{d3Y8S?1Ut@$X)p%`4w%#s89?b5$n;Coc*Xhzwtcixl8j{ znV#2em!8|N*a1EMK7#g-KGd&W3v#h@xA-jAU#idoT+0_u{y$0*-vEeH-GEVfm8;*^ ztGeK+)a>dqFA8NVv~@X!CHoDujk-Qqms+;pil)pd?gZ}H+E(Z6;$G~6&Q7rbI@=ca zU!~zr$%4e zxd>AyGVLOLYt+x;)U`e3ciOF{NH7~)%NmQX3Aj;tECepRvS#??)9Mk>=iLiuL5(yt zc1qX~r`ecky|KRd`>-(!3G=zFccEpE$$t&cP8WN}u*EJ!ywhUA?K- zf{^A7^$`}$vsg59QkzHBsp7#>Le~6(MOxhNWLW5g@Q6O-9OMs#Ay)q6`2YN`F@Do8 z!!!~sEPki)&zlf`oABel%!dWf;xqoKu@({ETE6r|9Q5S@P(d!S;2s?Fe8H=NxOC12 zHt{9yKR!^k&7-N|^vV3;Zs1>1^aum~W44R`YdgRXe==MNRLkmS=RzdgILTGU!h(Xc zrr;yQDh@`EF15$th2)zT zX}TSD%hD`FZS?E%kBsC_O%&8|esO0*oqfNv0jEq^0=@QkiXLb_#w0Z^`Di8*)=4Qd z=h@n{D7d3d{uWF9a{@L~vXrz1^(rddBlhTIh~QKNbYDRrs3~){qChKC(?qan1XX1S z=w;eUv!)j`EfqCUDZeJ<*MkF+!-pZ5&0g=+qKkC38T1za9h}_ zZD7$>SE`tBZQ;yxth8#`Yvowmw0PqJ8E(^^^A}I%NWf$%e6Lm@d)cdac9ea5DrWq; zt$R(%xb8sV$ot}WoqvYGwJQpOtXK!7Y2ng`c_m|D#BV53P2SS($`D!Ah?+F33ZP2e zTMzY}3t|}`((NC-&=qrkD2>w?t8x$VkfwOVYV96~*OZjMQEXxin=B2Nh}k4L^7q@xwI!0fbT2>tQO&)!rgveqU0YFA0@pDo7B0_+2h`6j~E|t1M;3NvhQwNt{+K(zU7PxHRh5ZNm4< z$v{P`hFyo5GR$>)=IX>~kN<8=ukzp1VKX-N6*F~cbnkgW;=rSGkw#L$vo~g-tlMI@ zishJH^~do^&415Ao!T-T`6aTu;JZ>lY3$iC$|be?NR!QK$)>{xx3s8U7g!xku!<5u zI@;qSmG#tk2lJ4fD#;W;wHYqligg~9GFpb5jGF`Sk5&w4da z5W5F%vn95qOepRXBx7BCXb_YyM_SaEe2N+gBvMMgCgi<+`{Am38H4JrANh@m%SA~R`wcW&Q=B3Ns)4WK44cTl}0)(+dF~-isvO@7yzZJ$Gc=ea>7Y`Zc)i$o& z^)>jWcemsl#Thvi(6#4V2xRH3NH@Mn4Ob|J{pVUL_{VER#5z&fb-Sfi%N8c7@za?~ zC(aATw1y!^bwVde_`*60B?+bO33Y_@<0OgWTpmd%yHIy*7cPMajzg@qQn$baHO_hv zmswHRC(f?jr;Mu*a4B`KlzIUEx-nvgFs?-rXj(P;jKkRCvg(D!iQ`2_)P+IK!I8=l z(2#X6q$L%7-?|agS%B#*Fq7iEP$s2>@_Cfc!=$D&c^n-q(H13UtE?(CdD7JMuJ3|s zbz#nzWM1c&9M& z103h?mOr%#V6vS7+9)++&6wXPuTj^k61t^o{gcscQ3~BElmE3mI^IaWfm_f>|F^4X zLeV-k?e_=Gu5F2?_n<)FND#^osuB5`kRJ+pvmNS3LcU)0098MC+XY%gt`4icZvXr{ zjnirrtm7qq@i{<$_vYyyiG(y}cL2i5L7bQk08Ani(7Z6*Vk0DWGeJ$DFR1cLZo%0Y zP_FD7o0Y@(y{Bv^CxTloU2W5vd;09qQ>E(JYNMx9Z6L)+2&B2!8VQ6|Z2$_eZ@el1 zR_acLl(Api6c>C+*Ot1=>gB`4x%sf)?j^>UM~cfT${z^j_%`3#-}wE0C@#dsZf2mw zu2|$n4t2JziqC(Uc%Vj3Xrrk55GIUyF5e(CfLJstZlNyFNjU3{s;Kr` z8{G$gG7eQK*aOF&URyp8NBY%%9v}iW62kJsc+R?^gEUmcZkgxG{-57&|A8I$KWl>i zaFui4t&2GYwZb>?l``<#f+-!YRFMXGAU7QkeD)XKVgpNFMl+(9j;NtM#!*11DX|pH zu@oDUK>#0paG9$Se|b!>j1hJNd{+-Xyn=ezrKw@7n*l}|pQITAQ3X59<7-c{2T*uk zO%EtG&4Gl5I`<~oq{q$%uxpqb&`QIFaOQ8hPK!Ut2Ee${j~b6T7`S&h-p6R@$UDj4 z2T0u}jcJ-Q`fc^0K9FT{YmNHtaSer7p}t-1I#g=`_%_#MfXt>0d3UB$B{&#M`2gxa`hCmtdqkWLv}hhGX344Py$K(5h|AoAxF!|$8i1p~qz)F^d>dtbKBtCKn-Iwr*)AAvuGMs zN}j%!cOkzvx{%*O8py3uzfmhk5z1I+#L=OQ^#ntwT98*yVU!g#@p2lKb@Kh> zIU_38S6-S`FAt+8u}s7xT3+qfyksyPzX&Qh4Dto|R9-z*A1ROMn=S3OFoh5*udqyu z$`M@3QV-lMeNI3$%DQ+8z2CpXEnNG0?%u!}i8bd;8^H7(egj zgp#zNGA8Sqcpsqq&QzAzk0thNb`!WISf*{Kki2Ao)^OG^IQ}ZWL!?XYm zZ@HhZh{JZ%or3pJTv@<6eWSC#MG*pfjI>eXqkzeUXZ9geWm`8& zRyje>%fMowA5#P$c=-1kcb}ah+r-lC$8g-Njb?#Xn`5|t8VF7cq>b;m?ZN=EV3Vb6 z(tscI?AEQeL47;;IZ{wkwd}|eC3}T#anP&AowtQ?)t%8!cH!2g#}_lDw*T>GPqm>i z=uZHB>~6$WqB0$UIq$yD2}GqFua7&!a>JlSD$f9uHJ2#T2EzUDfa+B78yf$-uMi1p zCD5v&%D}W$RD4uXc{ke43XfIbbs5ouWeT&2K|{~oey@o4KECp#b4Kkx?zsARioh;> zXj_gT9(DsjP<~KpJPgSXg}k*R-x>1Oj=b49?T1uOewEdSB_2#M$;aV(izNn2qNN`x zaqLi|i$WVNI+w9YjF+WcvzK2iv`B)iADElnW5eF2QIHm0_g9Anz64{M18G>XG`l5G zs@KSDfv^hqEBVXqN%S4U-6_&Z*H{{dr9wOqZ&gR*I@Q? zlZm`FxAl8ry9?eDHs2DdZNAH!>LG!rp;GtMDL#C3mcmlMQVnoAB+pJ&e=dM;R%!7FExv2t|EqzibZu0Mc3PT;4(o8mraxyNJS`T*IdLY9GF+9FnQu(hS`{fElf zIswHEoVu|4kWbVN|EP8k%s&~h0n3wyrYvFdeb}!2}NGY~{T>cbyYE3^Z z#cWl}^k5}S52XHGRjr(|z3lRX+}AKai3ScoaN)zQF{bqY@zz}Yi#u&^zdi( zzA7+iuHK)AuX#T*w>;7maQ<=|ftec>;YCOTl+fXaZkq*yua__A?0# z>&A7+szZI~;8!IFU776gk#QZKy_F6>R`?f^a?lM)&wM(8;Vt7j{74

{j1hbhSp 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 HRR(?mrzk?p diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x86.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x86.dll deleted file mode 100644 index 9cd8ed304a6a2024c728a251c4adb63f34e4d67e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259072 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

XH~TGN5jEC?p~ufG0hg0irkHU3*9tIcL- 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 z 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 EU+g0sSO5S3 diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co deleted file mode 100644 index 840ee7a8f..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co +++ /dev/null @@ -1,4 +0,0 @@ -kaku_s -Snowflake.Support.Orchestration.Overlay.Runtime.Windows::Snowflake.Support.Orchestration.Overlay.Runtime.Windows.EntryPoint!Main -vulkan 2 CreateDevice -env SABINOKAKU_VULKAN_BOOTED=1 \ No newline at end of file diff --git a/src/Snowflake.sln b/src/Snowflake.sln index a41e2d9b6..b1570cb14 100644 --- a/src/Snowflake.sln +++ b/src/Snowflake.sln @@ -96,8 +96,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Framework.Languag EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Plugin.Scraping.Filename", "Snowflake.Plugin.Scraping.Filename\Snowflake.Plugin.Scraping.Filename.csproj", "{09F314C3-054A-4907-96A4-C180976FA4DD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Support.Orchestration.Overlay.Runtime.Windows", "Snowflake.Support.Orchestration.Overlay.Runtime.Windows\Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj", "{32E9E587-B66D-419E-ACE0-261D1688709E}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Support.Orchestration.Overlay.Renderer.Windows", "Snowflake.Support.Orchestration.Overlay.Renderer.Windows\Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj", "{BCE0A187-9D45-41C7-8C6F-D0AE20D97866}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ImGuiBackendsTemp", "ImGuiBackendsTemp", "{50E3E120-745A-4798-86CA-FDD16E5846F1}" @@ -912,30 +910,6 @@ Global {09F314C3-054A-4907-96A4-C180976FA4DD}.Release-Module|x64.Build.0 = Release-Module|Any CPU {09F314C3-054A-4907-96A4-C180976FA4DD}.Release-Module|x86.ActiveCfg = Release-Module|Any CPU {09F314C3-054A-4907-96A4-C180976FA4DD}.Release-Module|x86.Build.0 = Release-Module|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug|x64.ActiveCfg = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug|x64.Build.0 = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug|x86.ActiveCfg = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug|x86.Build.0 = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug-Module|Any CPU.ActiveCfg = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug-Module|Any CPU.Build.0 = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug-Module|x64.ActiveCfg = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug-Module|x64.Build.0 = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug-Module|x86.ActiveCfg = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Debug-Module|x86.Build.0 = Debug|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release|Any CPU.Build.0 = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release|x64.ActiveCfg = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release|x64.Build.0 = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release|x86.ActiveCfg = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release|x86.Build.0 = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|Any CPU.ActiveCfg = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|Any CPU.Build.0 = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x64.ActiveCfg = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x64.Build.0 = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x86.ActiveCfg = Release|Any CPU - {32E9E587-B66D-419E-ACE0-261D1688709E}.Release-Module|x86.Build.0 = Release|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|Any CPU.Build.0 = Debug|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -1050,7 +1024,6 @@ Global {22986263-0BAD-4D78-9EE4-641F6534B050} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {966B61B4-183E-40DE-8E47-40BEBD117638} = {49B7A61F-B3BE-485E-84D0-B78C08656412} {09F314C3-054A-4907-96A4-C180976FA4DD} = {86D5767F-B32D-4E1B-BBA2-B87A0DEC6C6F} - {32E9E587-B66D-419E-ACE0-261D1688709E} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {BCE0A187-9D45-41C7-8C6F-D0AE20D97866} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {50E3E120-745A-4798-86CA-FDD16E5846F1} = {FBD15674-246A-4C57-B865-07214D8BB9A1} {3D635E77-66BF-40C3-BE0A-4B8805DA5954} = {50E3E120-745A-4798-86CA-FDD16E5846F1} From bb0dd64586ed96e894485ca307817f8b1a07b640 Mon Sep 17 00:00:00 2001 From: chyyran Date: Fri, 18 Mar 2022 15:25:29 -0400 Subject: [PATCH 38/38] sln: remove imguibackends reference --- src/Snowflake.sln | 56 ----------------------------------------------- 1 file changed, 56 deletions(-) diff --git a/src/Snowflake.sln b/src/Snowflake.sln index b1570cb14..5efab50d5 100644 --- a/src/Snowflake.sln +++ b/src/Snowflake.sln @@ -98,11 +98,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Plugin.Scraping.F EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Snowflake.Support.Orchestration.Overlay.Renderer.Windows", "Snowflake.Support.Orchestration.Overlay.Renderer.Windows\Snowflake.Support.Orchestration.Overlay.Renderer.Windows.csproj", "{BCE0A187-9D45-41C7-8C6F-D0AE20D97866}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ImGuiBackendsTemp", "ImGuiBackendsTemp", "{50E3E120-745A-4798-86CA-FDD16E5846F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGuiBackends.Direct3D11", "..\..\ImGuiNETBackends\ImGuiNETBackends\ImGuiBackends.Direct3D11\ImGuiBackends.Direct3D11.csproj", "{3D635E77-66BF-40C3-BE0A-4B8805DA5954}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImGuiBackends.OpenGL3", "..\..\ImGuiNETBackends\ImGuiNETBackends\ImGuiBackends.OpenGL3\ImGuiBackends.OpenGL3.csproj", "{BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -934,54 +929,6 @@ Global {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x64.Build.0 = Release|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x86.ActiveCfg = Release|Any CPU {BCE0A187-9D45-41C7-8C6F-D0AE20D97866}.Release-Module|x86.Build.0 = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x64.ActiveCfg = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x64.Build.0 = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x86.ActiveCfg = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug|x86.Build.0 = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|Any CPU.ActiveCfg = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|Any CPU.Build.0 = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x64.ActiveCfg = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x64.Build.0 = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x86.ActiveCfg = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Debug-Module|x86.Build.0 = Debug|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|Any CPU.Build.0 = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x64.ActiveCfg = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x64.Build.0 = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x86.ActiveCfg = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release|x86.Build.0 = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|Any CPU.ActiveCfg = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|Any CPU.Build.0 = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x64.ActiveCfg = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x64.Build.0 = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x86.ActiveCfg = Release|Any CPU - {3D635E77-66BF-40C3-BE0A-4B8805DA5954}.Release-Module|x86.Build.0 = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x64.ActiveCfg = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x64.Build.0 = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x86.ActiveCfg = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug|x86.Build.0 = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|Any CPU.ActiveCfg = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|Any CPU.Build.0 = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x64.ActiveCfg = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x64.Build.0 = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x86.ActiveCfg = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Debug-Module|x86.Build.0 = Debug|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|Any CPU.Build.0 = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x64.ActiveCfg = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x64.Build.0 = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x86.ActiveCfg = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release|x86.Build.0 = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|Any CPU.ActiveCfg = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|Any CPU.Build.0 = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x64.ActiveCfg = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x64.Build.0 = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x86.ActiveCfg = Release|Any CPU - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A}.Release-Module|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1025,9 +972,6 @@ Global {966B61B4-183E-40DE-8E47-40BEBD117638} = {49B7A61F-B3BE-485E-84D0-B78C08656412} {09F314C3-054A-4907-96A4-C180976FA4DD} = {86D5767F-B32D-4E1B-BBA2-B87A0DEC6C6F} {BCE0A187-9D45-41C7-8C6F-D0AE20D97866} = {FBD15674-246A-4C57-B865-07214D8BB9A1} - {50E3E120-745A-4798-86CA-FDD16E5846F1} = {FBD15674-246A-4C57-B865-07214D8BB9A1} - {3D635E77-66BF-40C3-BE0A-4B8805DA5954} = {50E3E120-745A-4798-86CA-FDD16E5846F1} - {BF8F42F6-7958-4B6B-9E90-8A53C66CD37A} = {50E3E120-745A-4798-86CA-FDD16E5846F1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {532F5D25-2D82-45B3-BF60-DDA40A0FB795}

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 Ie>s8w4cptEssI20 diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll deleted file mode 100644 index a141faed53f55dae8abdbbd76317dcd0545df62b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 338432 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 Ie>s8w4cptEssI20 literal 0 HcmV?d00001 diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll index dac0e6c5ef4222c79039fe6761fa31ea74513608..a141faed53f55dae8abdbbd76317dcd0545df62b 100644 GIT binary patch delta 135383 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%0Ar#ht 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 yn@8Q%N3$3L71nF(XYQ(ZdkzgE7dPM4Lg(~W(p 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 diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co index dc46ca7e7..840ee7a8f 100644 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co +++ b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co @@ -1,2 +1,4 @@ kaku_s -Snowflake.Support.Orchestration.Overlay.Runtime.Windows::Snowflake.Support.Orchestration.Overlay.Runtime.Windows.EntryPoint!Main \ No newline at end of file +Snowflake.Support.Orchestration.Overlay.Runtime.Windows::Snowflake.Support.Orchestration.Overlay.Runtime.Windows.EntryPoint!Main +vulkan 2 CreateDevice +env SABINOKAKU_VULKAN_BOOTED=1 \ No newline at end of file From f94b617d9bfebf35ad5c0ead7cf85695f02244d9 Mon Sep 17 00:00:00 2001 From: chyyran Date: Thu, 17 Mar 2022 19:24:40 -0400 Subject: [PATCH 37/38] runtime: remove runtime in favour of https://github.com/SnowflakePowered/snowflake-ingame --- .../EntryPoint.cs | 67 --- .../Hooks/ComPtr.cs | 197 -------- .../Hooks/Direct3D11/D3D11DeviceOrdinals.cs | 86 ---- .../Hooks/Direct3D11/Direct3D11Hook.cs | 277 ----------- .../Direct3D11/Direct3D11ImGuiInstance.cs | 168 ------- .../Direct3D11/Direct3D11OverlayTexture.cs | 192 -------- .../Hooks/GuidHelpers.cs | 18 - .../Hooks/IOverlayTexture.cs | 14 - .../Hooks/OpenGL/OpenGLHook.cs | 164 ------- .../Hooks/OpenGL/OpenGLImGuiInstance.cs | 92 ---- .../Hooks/OpenGL/OpenGLOverlayTexture.cs | 195 -------- .../Hooks/OpenGL/WglNativeContext.cs | 77 --- .../Hooks/Vulkan/VulkanHook.cs | 162 ------ .../Hooks/WndProc/Win32Backend.cs | 463 ------------------ .../Hooks/WndProc/WndProcHook.cs | 83 ---- .../IngameIpc.cs | 161 ------ .../Render/ImGuiFullscreenOverlay.cs | 48 -- .../Render/ImGuiWndProcHandler.cs | 47 -- .../RenderWindow.cs | 55 --- ...chestration.Overlay.Runtime.Windows.csproj | 46 -- .../kaku-vk.dll | Bin 664576 -> 0 bytes .../kaku-x64.dll | Bin 338432 -> 0 bytes .../kaku-x86.dll | Bin 259072 -> 0 bytes .../kaku.co | 4 - src/Snowflake.sln | 27 - 25 files changed, 2643 deletions(-) delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/D3D11DeviceOrdinals.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11Hook.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11ImGuiInstance.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Direct3D11/Direct3D11OverlayTexture.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/GuidHelpers.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/IOverlayTexture.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLHook.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLImGuiInstance.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/OpenGLOverlayTexture.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/OpenGL/WglNativeContext.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/Vulkan/VulkanHook.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/Win32Backend.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/WndProc/WndProcHook.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/IngameIpc.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiFullscreenOverlay.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Render/ImGuiWndProcHandler.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/RenderWindow.cs delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Snowflake.Support.Orchestration.Overlay.Runtime.Windows.csproj delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-vk.dll delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x64.dll delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku-x86.dll delete mode 100644 src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/kaku.co diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs deleted file mode 100644 index a94b2e919..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/EntryPoint.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Runtime.InteropServices; -using System; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks; -using System.Reflection; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Direct3D11; -using System.IO.Pipes; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Render; -using Snowflake.Orchestration.Ingame; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.OpenGL; -using Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks.Vulkan; -using Silk.NET.Vulkan; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows -{ - - public static class EntryPoint - { - public static int Main(nint args, int sizeBytes) - { - Vanara.PInvoke.Kernel32.AllocConsole(); - - try - { - unsafe - { - nint* handles = (nint*)args; - if (handles != null) - { - Console.WriteLine($"ip: {handles[0]}, dp: {handles[1]}, {sizeBytes}"); - return Main(new Instance(handles[0]), new Device(handles[1])); - } - } - return Main(null, null); - } - catch(Exception e) - { - Console.WriteLine($"failed:\n{e}"); - //Console.ReadLine(); - return 1; - } - } - - private static int Main(Instance? i, Device? d) - { - Console.WriteLine("Hello from C#! (" + RuntimeInformation.FrameworkDescription + ")"); - var ipc = new IngameIpc(Guid.Empty); - - ipc.CommandReceived += (c) => - { - Console.WriteLine($"Received command {c.Type}"); - }; - Task.Run(async () => - { - var result = await ipc.ConnectAsync(); - Console.WriteLine($"IPC Connection: {result}"); - ipc.Listen(); - new VulkanHook(i, d, ipc).Activate(); - - new Direct3D11Hook(ipc).Activate(); - new OpenGLHook(ipc).Activate(); - - }); - - return 0; - } - } -} \ No newline at end of file diff --git a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs b/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs deleted file mode 100644 index d3192e643..000000000 --- a/src/Snowflake.Support.Orchestration.Overlay.Runtime.Windows/Hooks/ComPtr.cs +++ /dev/null @@ -1,197 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace Snowflake.Support.Orchestration.Overlay.Runtime.Windows.Hooks -{ - ///