From f340de7d72e4591c0b2fa5afe807b1d0c080a40b Mon Sep 17 00:00:00 2001 From: Lyelye150 Date: Tue, 11 Nov 2025 12:44:58 -0500 Subject: [PATCH] Added apthooks and updated gx2 renderer NO ACTIONS TODAY --- CMakeLists.txt | 1 + ISLE/isleapp.cpp | 14 +++ ISLE/wiiu/apthooks.cpp | 87 +++++++++++++++++++ ISLE/wiiu/apthooks.h | 10 +++ miniwin/src/d3drm/backends/gx2/actual.h | 8 -- miniwin/src/d3drm/backends/gx2/renderer.cpp | 56 ++++++------ miniwin/src/d3drm/backends/gx2/renderer.ps | 6 -- miniwin/src/d3drm/backends/gx2/renderer.vs | 8 -- miniwin/src/internal/d3drmrenderer_gx2.h | 2 - .../src/internal/d3drmrenderer_gx2stub.cpp | 7 -- 10 files changed, 139 insertions(+), 60 deletions(-) create mode 100644 ISLE/wiiu/apthooks.cpp create mode 100644 ISLE/wiiu/apthooks.h delete mode 100644 miniwin/src/d3drm/backends/gx2/actual.h delete mode 100644 miniwin/src/d3drm/backends/gx2/renderer.ps delete mode 100644 miniwin/src/d3drm/backends/gx2/renderer.vs delete mode 100644 miniwin/src/internal/d3drmrenderer_gx2stub.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index cac61eef..757e3cf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -652,6 +652,7 @@ if (ISLE_BUILD_APP) endif() if (WIIU) target_sources(isle PRIVATE + ISLE/wiiu/apthooks.cpp ISLE/wiiu/config.cpp ) endif() diff --git a/ISLE/isleapp.cpp b/ISLE/isleapp.cpp index 313bd11b..c9e1e5d4 100644 --- a/ISLE/isleapp.cpp +++ b/ISLE/isleapp.cpp @@ -78,6 +78,7 @@ #endif #ifdef __WIIU__ +#include "wiiu/apthooks.h" #include "wiiu/config.h" #endif @@ -294,6 +295,12 @@ void IsleApp::SetupVideoFlags( } } +#ifdef __WUT__ +int main(int argc, char* argv[]) { + return 0; +} +#endif + SDL_AppResult SDL_AppInit(void** appstate, int argc, char** argv) { *appstate = NULL; @@ -364,6 +371,9 @@ SDL_AppResult SDL_AppInit(void** appstate, int argc, char** argv) #endif #ifdef __3DS__ N3DS_SetupAptHooks(); +#endif +#ifdef __WIIU__ + WIIU_SetupAptHooks(); #endif return SDL_APP_CONTINUE; } @@ -419,6 +429,10 @@ SDL_AppResult SDL_AppIterate(void* appstate) g_isle->MoveVirtualMouseViaJoystick(); } +#ifdef __WIIU__ + WIIU_ProcessCallbacks(); +#endif + return SDL_APP_CONTINUE; } diff --git a/ISLE/wiiu/apthooks.cpp b/ISLE/wiiu/apthooks.cpp new file mode 100644 index 00000000..7e6fa08a --- /dev/null +++ b/ISLE/wiiu/apthooks.cpp @@ -0,0 +1,87 @@ +#include "apthooks.h" + +#include "legomain.h" +#include "misc.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +static bool running = true; +static bool inBackground = false; + +#ifdef USE_GX2 +static void ReleaseGraphics() +{ + SDL_Log("[APTHooks] Releasing GX2 resources...\n"); + WHBGfxFinishRender(); + GX2Flush(); + GX2Shutdown(); +} + +static void RestoreGraphics() +{ + SDL_Log("[APTHooks] Restoring GX2 resources...\n"); + WHBGfxInit(); +} +#endif + +void WIIU_ProcessCallbacks() +{ + ProcUIStatus status = ProcUIProcessMessages(true); + + switch (status) + { + case PROCUI_STATUS_IN_FOREGROUND: + if (inBackground) { + inBackground = false; + RestoreGraphics(); + Lego()->Resume(); + SDL_Log("[APTHooks] App resumed\n"); + } + break; + + case PROCUI_STATUS_IN_BACKGROUND: + if (!inBackground) { + inBackground = true; + Lego()->Pause(); + ReleaseGraphics(); + SDL_Log("[APTHooks] App backgrounded\n"); + } + break; + + case PROCUI_STATUS_RELEASE_FOREGROUND: + Lego()->Pause(); + ReleaseGraphics(); + SDL_Log("[APTHooks] Yielding to system\n"); + ProcUIDrawDoneRelease(); + break; + + case PROCUI_STATUS_EXITING: + Lego()->CloseMainWindow(); + running = false; + SDL_Log("[APTHooks] App exiting\n"); + break; + + default: + break; + } +} + +bool WIIU_AppIsRunning() +{ + return running; +} + +void WIIU_SetupAptHooks() +{ + SDL_Log("[APTHooks] Initializing lifecycle hooks\n"); + running = true; + inBackground = false; + ProcUIInit(nullptr); +} diff --git a/ISLE/wiiu/apthooks.h b/ISLE/wiiu/apthooks.h new file mode 100644 index 00000000..52674d11 --- /dev/null +++ b/ISLE/wiiu/apthooks.h @@ -0,0 +1,10 @@ +#ifndef WIIU_APTHOOKS_H +#define WIIU_APTHOOKS_H + +#include + +void WIIU_SetupAptHooks(); +void WIIU_ProcessCallbacks(); +bool WIIU_AppIsRunning(); + +#endif diff --git a/miniwin/src/d3drm/backends/gx2/actual.h b/miniwin/src/d3drm/backends/gx2/actual.h deleted file mode 100644 index 71b2d38a..00000000 --- a/miniwin/src/d3drm/backends/gx2/actual.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -#include -#include - -inline uint32_t GX2RGetGpuAddr(const GX2RBuffer* buffer) -{ - return (uint32_t) buffer->buffer; -} diff --git a/miniwin/src/d3drm/backends/gx2/renderer.cpp b/miniwin/src/d3drm/backends/gx2/renderer.cpp index 031274eb..af9c42b4 100644 --- a/miniwin/src/d3drm/backends/gx2/renderer.cpp +++ b/miniwin/src/d3drm/backends/gx2/renderer.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include #include #include @@ -14,34 +16,41 @@ #define D3D_OK S_OK #endif -static struct IsleGX2Backend { +static struct GX2Backend { bool initialized = false; bool rendering = false; - void Init(const char* shaderPath) + void Init() { - if (initialized) return; + if (initialized) + return; + WHBLogUdpInit(); WHBProcInit(); WHBGfxInit(); WHBMountSdCard(); + initialized = true; } void StartFrame() { - if (rendering) return; + if (rendering) + return; + WHBGfxBeginRender(); WHBGfxBeginRenderTV(); + WHBGfxBeginRenderDRC(); rendering = true; } void EndFrame() { - if (!rendering) return; - WHBGfxFinishRenderTV(); - WHBGfxBeginRenderDRC(); + if (!rendering) + return; + WHBGfxFinishRenderDRC(); + WHBGfxFinishRenderTV(); WHBGfxFinishRender(); rendering = false; } @@ -49,7 +58,12 @@ static struct IsleGX2Backend { void Clear(float r, float g, float b) { StartFrame(); - WHBGfxClearColor(r, g, b, 1.0f); + + GX2ColorBuffer* tvBuffer = WHBGfxGetTVColourBuffer(); + GX2ColorBuffer* drcBuffer = WHBGfxGetDRCColourBuffer(); + + GX2ClearColor(tvBuffer, r, g, b, 1.0f); + GX2ClearColor(drcBuffer, r, g, b, 1.0f); } void Flip() @@ -59,20 +73,17 @@ static struct IsleGX2Backend { void Shutdown() { - if (!initialized) return; + if (!initialized) + return; + WHBUnmountSdCard(); WHBGfxShutdown(); WHBProcShutdown(); WHBLogUdpDeinit(); initialized = false; } - } g_backend; -// ------------------------------------ -// GX2Renderer Implementation -// ------------------------------------ - GX2Renderer::GX2Renderer(DWORD width, DWORD height) { m_width = width; @@ -80,7 +91,7 @@ GX2Renderer::GX2Renderer(DWORD width, DWORD height) m_virtualWidth = width; m_virtualHeight = height; - g_backend.Init("content/renderer.gsh"); + g_backend.Init(); } GX2Renderer::~GX2Renderer() @@ -94,10 +105,7 @@ HRESULT GX2Renderer::BeginFrame() return D3D_OK; } -void GX2Renderer::EnableTransparency() -{ - // GX2 blending can be configured here if needed -} +void GX2Renderer::EnableTransparency() {} HRESULT GX2Renderer::FinalizeFrame() { @@ -121,13 +129,3 @@ void GX2Renderer::Resize(int width, int height, const ViewportTransform& viewpor m_height = height; m_viewportTransform = viewportTransform; } - -void GX2Renderer::PushLights(const SceneLight* vertices, size_t count) {} -void GX2Renderer::SetProjection(const D3DRMMATRIX4D&, D3DVALUE, D3DVALUE) {} -void GX2Renderer::SetFrustumPlanes(const Plane*) {} -Uint32 GX2Renderer::GetTextureId(IDirect3DRMTexture*, bool, float, float) { return 0; } -Uint32 GX2Renderer::GetMeshId(IDirect3DRMMesh*, const MeshGroup*) { return 0; } -void GX2Renderer::SubmitDraw(DWORD, const D3DRMMATRIX4D&, const D3DRMMATRIX4D&, const D3DRMMATRIX4D&, const Matrix3x3&, const Appearance&) {} -void GX2Renderer::Draw2DImage(Uint32, const SDL_Rect&, const SDL_Rect&, FColor) {} -void GX2Renderer::Download(SDL_Surface*) {} -void GX2Renderer::SetDither(bool) {} diff --git a/miniwin/src/d3drm/backends/gx2/renderer.ps b/miniwin/src/d3drm/backends/gx2/renderer.ps deleted file mode 100644 index a047fb97..00000000 --- a/miniwin/src/d3drm/backends/gx2/renderer.ps +++ /dev/null @@ -1,6 +0,0 @@ -#version 450 -layout(location = 0) in vec4 vColour; -layout(location = 0) out vec4 outColour; -void main() { - outColour = vColour; -} diff --git a/miniwin/src/d3drm/backends/gx2/renderer.vs b/miniwin/src/d3drm/backends/gx2/renderer.vs deleted file mode 100644 index 8cc8cc3a..00000000 --- a/miniwin/src/d3drm/backends/gx2/renderer.vs +++ /dev/null @@ -1,8 +0,0 @@ -#version 450 -layout(location = 0) in vec4 aPosition; -layout(location = 1) in vec4 aColour; -layout(location = 0) out vec4 vColour; -void main() { - gl_Position = aPosition; - vColour = aColour; -} diff --git a/miniwin/src/internal/d3drmrenderer_gx2.h b/miniwin/src/internal/d3drmrenderer_gx2.h index befc4173..a5848d0c 100644 --- a/miniwin/src/internal/d3drmrenderer_gx2.h +++ b/miniwin/src/internal/d3drmrenderer_gx2.h @@ -14,7 +14,6 @@ class GX2Renderer : public Direct3DRMRenderer { GX2Renderer(DWORD width, DWORD height); ~GX2Renderer() override; - // --- Overrides from Direct3DRMRenderer --- void PushLights(const SceneLight* vertices, size_t count) override; void SetProjection(const D3DRMMATRIX4D& projection, D3DVALUE front, D3DVALUE back) override; void SetFrustumPlanes(const Plane* frustumPlanes) override; @@ -39,7 +38,6 @@ class GX2Renderer : public Direct3DRMRenderer { void SetDither(bool dither) override; }; -// --- Enum device helper --- inline static void GX2Renderer_EnumDevice(LPD3DENUMDEVICESCALLBACK cb, void* ctx) { D3DDEVICEDESC halDesc = {}; diff --git a/miniwin/src/internal/d3drmrenderer_gx2stub.cpp b/miniwin/src/internal/d3drmrenderer_gx2stub.cpp deleted file mode 100644 index de78d972..00000000 --- a/miniwin/src/internal/d3drmrenderer_gx2stub.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "d3drmrenderer_gx2.h" - -GX2Renderer::GX2Renderer(DWORD width, DWORD height) : Direct3DRMRenderer(width, height) -{ -} - -GX2Renderer::~GX2Renderer() = default;