diff --git a/sysmodules/rosalina/include/draw.h b/sysmodules/rosalina/include/draw.h index 5a5ef1060..982f4a1db 100644 --- a/sysmodules/rosalina/include/draw.h +++ b/sysmodules/rosalina/include/draw.h @@ -55,7 +55,11 @@ #define GPU_CMDLIST_CNT REG32(0x104018F0) #define LCD_TOP_BRIGHTNESS REG32(0x10202240) +#define LCD_TOP_FILLCOLOR REG32(0x10202204) #define LCD_BOT_BRIGHTNESS REG32(0x10202A40) +#define LCD_BOT_FILLCOLOR REG32(0x10202A04) + +#define LCD_FILLCOLOR_ENABLE (1u << 24) #define FB_BOTTOM_VRAM_ADDR ((void *)0x1F48F000) // cached #define FB_BOTTOM_VRAM_PA 0x1848F000 diff --git a/sysmodules/rosalina/source/draw.c b/sysmodules/rosalina/source/draw.c index f8ee6724d..333f48a9b 100644 --- a/sysmodules/rosalina/source/draw.c +++ b/sysmodules/rosalina/source/draw.c @@ -36,7 +36,7 @@ #define KERNPA2VA(a) ((a) + (GET_VERSION_MINOR(osGetKernelVersion()) < 44 ? 0xD0000000 : 0xC0000000)) -static u32 gpuSavedFramebufferAddr1, gpuSavedFramebufferAddr2, gpuSavedFramebufferFormat, gpuSavedFramebufferStride; +static u32 gpuSavedFramebufferAddr1, gpuSavedFramebufferAddr2, gpuSavedFramebufferFormat, gpuSavedFramebufferStride, gpuSavedFillColor; static u32 framebufferCacheSize; static void *framebufferCache; static RecursiveLock lock; @@ -203,6 +203,9 @@ u32 Draw_SetupFramebuffer(void) GPU_FB_BOTTOM_ADDR_1 = GPU_FB_BOTTOM_ADDR_2 = FB_BOTTOM_VRAM_PA; GPU_FB_BOTTOM_FMT = format; GPU_FB_BOTTOM_STRIDE = 240 * 2; + + gpuSavedFillColor = LCD_BOT_FILLCOLOR; + LCD_BOT_FILLCOLOR = 0; return framebufferCacheSize; } @@ -211,7 +214,8 @@ void Draw_RestoreFramebuffer(void) { memcpy(FB_BOTTOM_VRAM_ADDR, framebufferCache, FB_BOTTOM_SIZE); Draw_FlushFramebuffer(); - + + LCD_BOT_FILLCOLOR = gpuSavedFillColor; GPU_FB_BOTTOM_ADDR_1 = gpuSavedFramebufferAddr1; GPU_FB_BOTTOM_ADDR_2 = gpuSavedFramebufferAddr2; GPU_FB_BOTTOM_FMT = gpuSavedFramebufferFormat;