From b24b25c0940bba106736739198f5ad17dfbacd5d Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 9 Apr 2024 17:31:15 +1000 Subject: [PATCH] Exiting reduced performance message now shown in top left for around a second instead of in chat --- src/Game.c | 5 ++++- src/Graphics.h | 4 ++-- src/Screens.c | 5 ++++- src/_GraphicsBase.h | 14 +++++++------- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/Game.c b/src/Game.c index caff5cbd1..617a7b66b 100644 --- a/src/Game.c +++ b/src/Game.c @@ -307,10 +307,13 @@ static void HandleInactiveChanged(void* obj) { if (Window_Main.Inactive) { Chat_AddOf(&Gfx_LowPerfMessage, MSG_TYPE_EXTRASTATUS_2); Gfx_SetFpsLimit(false, 1000 / 1.0f); + Gfx.ReducedPerfMode = true; } else { Chat_AddOf(&String_Empty, MSG_TYPE_EXTRASTATUS_2); Game_SetFpsLimit(Game_FpsLimit); - Chat_AddRaw(LOWPERF_EXIT_MESSAGE); + + Gfx.ReducedPerfMode = false; + Gfx.ReducedPerfModeCooldown = 2; } #ifdef CC_BUILD_WEB diff --git a/src/Graphics.h b/src/Graphics.h index b102d81f4..72587b126 100644 --- a/src/Graphics.h +++ b/src/Graphics.h @@ -64,6 +64,8 @@ CC_VAR extern struct _GfxData { /* Minimum dimensions in pixels that a texture must be */ /* NOTE: Most graphics backends do not use this */ int MinTexWidth, MinTexHeight; + cc_bool ReducedPerfMode; + cc_uint8 ReducedPerfModeCooldown; } Gfx; extern GfxResourceID Gfx_defaultIb; @@ -87,8 +89,6 @@ typedef enum GfxBuffers_ { /* Texture can fallback to 16 bpp when necessary (most backends don't do this) */ #define TEXTURE_FLAG_LOWRES 0x08 -#define LOWPERF_EXIT_MESSAGE "&eExited reduced performance mode" - void Gfx_RecreateTexture(GfxResourceID* tex, struct Bitmap* bmp, cc_uint8 flags, cc_bool mipmaps); void* Gfx_RecreateAndLockVb(GfxResourceID* vb, VertexFormat fmt, int count); diff --git a/src/Screens.c b/src/Screens.c index 064121c2a..74140e26d 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -95,7 +95,10 @@ static void HUDScreen_RemakeLine1(struct HUDScreen* s) { if (!Gui.ShowFPS && s->line1.tex.ID) return; fps = s->accumulator == 0 ? 1 : (int)(s->frames / s->accumulator); - if (fps == 0) { + if (Gfx.ReducedPerfMode || (Gfx.ReducedPerfModeCooldown > 0)) { + String_AppendConst(&status, "(low perf mode), "); + Gfx.ReducedPerfModeCooldown--; + } else if (fps == 0) { /* Running at less than 1 FPS.. */ real_fps = s->frames / s->accumulator; String_Format1(&status, "%f1 fps, ", &real_fps); diff --git a/src/_GraphicsBase.h b/src/_GraphicsBase.h index 90cafc997..495d0f166 100644 --- a/src/_GraphicsBase.h +++ b/src/_GraphicsBase.h @@ -173,20 +173,20 @@ void Gfx_RecreateContext(void) { Event_RaiseVoid(&GfxEvents.ContextRecreated); } -cc_bool reducedPerformance; static CC_INLINE void TickReducedPerformance(void) { Thread_Sleep(100); /* 10 FPS */ - if (reducedPerformance) return; - reducedPerformance = true; + if (Gfx.ReducedPerfMode) return; + Gfx.ReducedPerfMode = true; Chat_AddOf(&Gfx_LowPerfMessage, MSG_TYPE_EXTRASTATUS_2); } static CC_INLINE void EndReducedPerformance(void) { - if (!reducedPerformance) return; - reducedPerformance = false; - Chat_AddOf(&String_Empty, MSG_TYPE_EXTRASTATUS_2); - Chat_AddRaw(LOWPERF_EXIT_MESSAGE); + if (!Gfx.ReducedPerfMode) return; + + Gfx.ReducedPerfModeCooldown = 2; + Gfx.ReducedPerfMode = false; + Chat_AddOf(&String_Empty, MSG_TYPE_EXTRASTATUS_2); }