From 0014bfa6fcfa12ab025fd06eebfc070d8f32ecb5 Mon Sep 17 00:00:00 2001 From: Ava Chaney Date: Sun, 28 May 2023 22:30:12 -0700 Subject: [PATCH] revert IM changes for now due to instability (#1226) Revert "hook Present and ResizeBuffers immediately when InterfaceManager is created" This reverts commit e1a56d6d64391c7bf6b297580f21fd52b9360c6a. Revert "add a bunch of logging to IM setup" This reverts commit 6870c8e7d20cbf915a9c9757f1d3e31828b15de1. Revert "more IM logging tweaks" This reverts commit 4139dc14e772273d508ebca0979b365895010f7e. Revert "IM logs on information" This reverts commit d393bd4e2adc90e5f6fd6ee1250f6c8aa7773cd7. --- .../Interface/Internal/InterfaceManager.cs | 53 ++++++++----------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/Dalamud/Interface/Internal/InterfaceManager.cs b/Dalamud/Interface/Internal/InterfaceManager.cs index cde3f1c42..f02baa890 100644 --- a/Dalamud/Interface/Internal/InterfaceManager.cs +++ b/Dalamud/Interface/Internal/InterfaceManager.cs @@ -20,12 +20,12 @@ using Dalamud.Interface.Internal.ManagedAsserts; using Dalamud.Interface.Internal.Notifications; using Dalamud.Interface.Style; using Dalamud.Interface.Windowing; -using Dalamud.Logging.Internal; using Dalamud.Utility; using Dalamud.Utility.Timing; using ImGuiNET; using ImGuiScene; using PInvoke; +using Serilog; // general dev notes, here because it's easiest @@ -47,8 +47,6 @@ namespace Dalamud.Interface.Internal; [ServiceManager.BlockingEarlyLoadedService] internal class InterfaceManager : IDisposable, IServiceType { - private static ModuleLog Log = new ModuleLog("IM"); - private const float DefaultFontSizePt = 12.0f; private const float DefaultFontSizePx = DefaultFontSizePt * 4.0f / 3.0f; private const ushort Fallback1Codepoint = 0x3013; // Geta mark; FFXIV uses this to indicate that a glyph is missing. @@ -78,41 +76,16 @@ internal class InterfaceManager : IDisposable, IServiceType private bool isOverrideGameCursor = true; [ServiceManager.ServiceConstructor] - private InterfaceManager(SigScanner sigScanner) + private InterfaceManager() { - Log.Information("ctor called"); - this.dispatchMessageWHook = Hook.FromImport( null, "user32.dll", "DispatchMessageW", 0, this.DispatchMessageWDetour); this.setCursorHook = Hook.FromImport( null, "user32.dll", "SetCursor", 0, this.SetCursorDetour); - Log.Information("Import hooks applied"); this.fontBuildSignal = new ManualResetEvent(false); this.address = new SwapChainVtableResolver(); - this.address.Setup(); - Log.Information("Resolver setup complete"); - - Log.Information("===== S W A P C H A I N ====="); - Log.Information($"Is ReShade: {this.address.IsReshade}"); - Log.Information($"Present address 0x{this.address.Present.ToInt64():X}"); - Log.Information($"ResizeBuffers address 0x{this.address.ResizeBuffers.ToInt64():X}"); - - this.presentHook = Hook.FromAddress(this.address.Present, this.PresentDetour); - this.resizeBuffersHook = Hook.FromAddress(this.address.ResizeBuffers, this.ResizeBuffersDetour); - Log.Information("Present and ResizeBuffers hooked"); - - var wndProcAddress = sigScanner.ScanText("E8 ?? ?? ?? ?? 80 7C 24 ?? ?? 74 ?? B8"); - Log.Information($"WndProc address 0x{wndProcAddress.ToInt64():X}"); - this.processMessageHook = Hook.FromAddress(wndProcAddress, this.ProcessMessageDetour); - - this.setCursorHook.Enable(); - this.presentHook.Enable(); - this.resizeBuffersHook.Enable(); - this.dispatchMessageWHook.Enable(); - this.processMessageHook.Enable(); - Log.Information("Hooks enabled"); } [UnmanagedFunctionPointer(CallingConvention.ThisCall)] @@ -1009,9 +982,10 @@ internal class InterfaceManager : IDisposable, IServiceType } [ServiceManager.CallWhenServicesReady] - private void ContinueConstruction() + private void ContinueConstruction(SigScanner sigScanner, Framework framework) { - this.framework.RunOnFrameworkThread(() => + this.address.Setup(sigScanner); + framework.RunOnFrameworkThread(() => { while ((this.GameWindowHandle = NativeFunctions.FindWindowEx(IntPtr.Zero, this.GameWindowHandle, "FFXIVGAME", IntPtr.Zero)) != IntPtr.Zero) { @@ -1030,6 +1004,23 @@ internal class InterfaceManager : IDisposable, IServiceType { Log.Error(ex, "Could not enable immersive mode"); } + + this.presentHook = Hook.FromAddress(this.address.Present, this.PresentDetour, true); + this.resizeBuffersHook = Hook.FromAddress(this.address.ResizeBuffers, this.ResizeBuffersDetour, true); + + Log.Verbose("===== S W A P C H A I N ====="); + Log.Verbose($"Present address 0x{this.presentHook!.Address.ToInt64():X}"); + Log.Verbose($"ResizeBuffers address 0x{this.resizeBuffersHook!.Address.ToInt64():X}"); + + var wndProcAddress = sigScanner.ScanText("E8 ?? ?? ?? ?? 80 7C 24 ?? ?? 74 ?? B8"); + Log.Verbose($"WndProc address 0x{wndProcAddress.ToInt64():X}"); + this.processMessageHook = Hook.FromAddress(wndProcAddress, this.ProcessMessageDetour); + + this.setCursorHook.Enable(); + this.presentHook.Enable(); + this.resizeBuffersHook.Enable(); + this.dispatchMessageWHook.Enable(); + this.processMessageHook.Enable(); }); }