From 82ad7bb4423706a2c38f0636150cb2542dd6199f Mon Sep 17 00:00:00 2001 From: fallenoak Date: Thu, 6 Apr 2023 11:18:29 -0500 Subject: [PATCH 1/2] feat(glue): partially implement glue reloading --- src/glue/CGlueMgr.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/glue/CGlueMgr.cpp b/src/glue/CGlueMgr.cpp index 2a8a9b5..c38fd28 100644 --- a/src/glue/CGlueMgr.cpp +++ b/src/glue/CGlueMgr.cpp @@ -202,10 +202,10 @@ int32_t CGlueMgr::Idle(const void* a1, void* a2) { if (CGlueMgr::m_idleState == IDLE_NONE) { if (CGlueMgr::m_reload) { if (!CGlueMgr::m_suspended) { - // TODO CGlueMgr::Suspend(); - // TODO CGlueMgr::Resume(); + CGlueMgr::Suspend(); + CGlueMgr::Resume(); // TODO Sub4DA360(); - // TODO CGlueMgr::SetScreen(ByteB6A9E0); + CGlueMgr::SetScreen(CGlueMgr::m_currentScreen); } CGlueMgr::m_reload = 0; @@ -703,6 +703,19 @@ void CGlueMgr::Sub4D8BA0() { } void CGlueMgr::Suspend() { + CGlueMgr::m_suspended = 1; + + // TODO + + if (CGlueMgr::m_simpleTop) { + delete CGlueMgr::m_simpleTop; + CGlueMgr::m_simpleTop = nullptr; + } + + // TODO + + FrameXML_FreeHashNodes(); + // TODO } From 4a1b84ad572da42df0d0d87104e4c8de5812e9f1 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Thu, 6 Apr 2023 12:22:04 -0500 Subject: [PATCH 2/2] fix(gx): correct GxScenePresent behavior --- src/gx/Draw.cpp | 8 ++++++-- src/gx/Draw.hpp | 4 +++- src/gx/Screen.cpp | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gx/Draw.cpp b/src/gx/Draw.cpp index c948759..54d8954 100644 --- a/src/gx/Draw.cpp +++ b/src/gx/Draw.cpp @@ -9,11 +9,15 @@ void GxSceneClear(uint32_t mask, CImVector color) { g_theGxDevicePtr->SceneClear(mask, color); } -void GxScenePresent() { +void GxScenePresent(uint32_t a2) { + g_theGxDevicePtr->ScenePresent(); +} + +void GxSub682A00() { C3Vector v2 = { 0.0f, 0.0f, 0.0f }; GxuFlushDrawList(GxuCat_2, v2); - g_theGxDevicePtr->ScenePresent(); + GxScenePresent(0); } void GxuFlushDrawList(EGxuDrawListCategory a1, const C3Vector& a2) { diff --git a/src/gx/Draw.hpp b/src/gx/Draw.hpp index 959ba0d..e3dd0c5 100644 --- a/src/gx/Draw.hpp +++ b/src/gx/Draw.hpp @@ -12,7 +12,9 @@ void GxDraw(CGxBatch* batch, int32_t indexed); void GxSceneClear(uint32_t, CImVector); -void GxScenePresent(void); +void GxScenePresent(uint32_t a2); + +void GxSub682A00(); void GxuFlushDrawList(EGxuDrawListCategory, const C3Vector&); diff --git a/src/gx/Screen.cpp b/src/gx/Screen.cpp index 3c4ed9f..dafd513 100644 --- a/src/gx/Screen.cpp +++ b/src/gx/Screen.cpp @@ -115,14 +115,14 @@ int32_t OnPaint(const void* a1, void* a2) { if (Screen::s_captureScreen) { // TODO - GxScenePresent(); + GxSub682A00(); // TODO return 1; } - GxScenePresent(); + GxSub682A00(); } Screen::s_elapsedSec = 0.0f;