From 1f2025d75e8155e8f43acdc6911951ee270c1549 Mon Sep 17 00:00:00 2001 From: Federico Cecchetto Date: Tue, 19 Jul 2022 03:26:26 +0200 Subject: [PATCH] Delay imgui initialization --- src/client/component/gui.cpp | 12 ++++++++++-- src/client/component/loadscreen.cpp | 19 +++++++++++-------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/client/component/gui.cpp b/src/client/component/gui.cpp index 1cba1a67..c421ecf7 100644 --- a/src/client/component/gui.cpp +++ b/src/client/component/gui.cpp @@ -6,6 +6,7 @@ #include "scheduler.hpp" #include "gui.hpp" +#include "console.hpp" #include #include @@ -175,8 +176,14 @@ namespace gui void gui_on_frame() { + if (!game::Sys_IsDatabaseReady2()) + { + return; + } + if (!initialized) { + console::info("[ImGui] Initializing\n"); initialize_gui_context(); } else @@ -212,7 +219,7 @@ namespace gui a.mov(r8d, esi); a.mov(edx, r15d); a.mov(rcx, rdi); - a.call_aligned(rbx); + a.call(rbx); a.mov(ecx, eax); a.jmp(0x1407A14D1); @@ -308,7 +315,8 @@ namespace gui void post_unpack() override { - utils::hook::jump(0x1407A14C4, utils::hook::assemble(dxgi_swap_chain_present_stub), true); + utils::hook::nop(0x1407A14BB, 9); + utils::hook::call(0x1407A14BE, gui_on_frame); wnd_proc_hook.create(0x140650F10, wnd_proc_stub); on_frame([]() diff --git a/src/client/component/loadscreen.cpp b/src/client/component/loadscreen.cpp index 9a7471fc..c72ce20d 100644 --- a/src/client/component/loadscreen.cpp +++ b/src/client/component/loadscreen.cpp @@ -215,6 +215,17 @@ namespace loadscreen class component final : public component_interface { public: + void post_start() override + { + scheduler::loop([]() + { + if (in_loadscreen()) + { + draw_loadscreen(); + } + }, scheduler::pipeline::renderer); + } + void post_unpack() override { // not registered, used in CL_StartLoading @@ -231,14 +242,6 @@ namespace loadscreen cl_loadscreen_obj = dvars::register_string("cl_loadscreenObj", "", 0, "Loadscreen mission objective"); cl_loadscreen_obj_icon = dvars::register_string("cl_loadscreenObjIcon", "", 0, "Loadscreen mission objective icon"); }, scheduler::pipeline::main); - - scheduler::loop([]() - { - if (in_loadscreen()) - { - draw_loadscreen(); - } - }, scheduler::pipeline::renderer); } }; }