Added a basic screenshot feature dumping the GPU input texture by pressing Y. Fixes #19.

This commit is contained in:
profi200 2020-10-23 01:18:22 +02:00
parent 07f6f01d92
commit 179ea504d0
No known key found for this signature in database
GPG Key ID: 17B42AE5911139F3
1 changed files with 37 additions and 37 deletions

View File

@ -394,9 +394,7 @@ static void adjustGammaTableForGba(void)
}
}
#ifndef NDEBUG
#include "fsutil.h"
static void dbgDumpFrame(void)
static void dumpFrameTex(void)
{
// 512x-512 (hight negative to flip vertically).
alignas(4) static const u8 bmpHeader[122] =
@ -415,10 +413,10 @@ static void dbgDumpFrame(void)
};
/*GX_displayTransfer((u32*)0x18200000, 160u<<16 | 256u, (u32*)0x18400000, 160u<<16 | 256u, 1u<<12 | 1u<<8);
GFX_waitForEvent(GFX_EVENT_PPF, false);
//fsQuickWrite((void*)0x18400000, "sdmc:/lgyfb_dbg_frame.bgr", 256 * 160 * 3);*/
GFX_waitForPPF();
//fsQuickWrite("sdmc:/lgyfb_dbg_frame.bgr", (void*)0x18400000, 256 * 160 * 3);*/
GX_displayTransfer((u32*)0x18200000, 240u<<16 | 512u, (u32*)0x18400000, 240u<<16 | 512u, 1u<<12 | 1u<<8);
GFX_waitForEvent(GFX_EVENT_PPF, false);
GFX_waitForPPF();
FHandle f;
if(fOpen(&f, "sdmc:/texture_dump.bmp", FA_CREATE_ALWAYS | FA_WRITE) == RES_OK)
@ -431,37 +429,6 @@ static void dbgDumpFrame(void)
}
}
void debugTests(void)
{
const u32 kDown = hidKeysDown();
// Print GBA RTC date/time.
if(kDown & KEY_X)
{
GbaRtc rtc; LGY_getGbaRtc(&rtc);
ee_printf("RTC: %02X.%02X.%04X %02X:%02X:%02X\n", rtc.d, rtc.mon, rtc.y + 0x2000u, rtc.h, rtc.min, rtc.s);
// Trigger Game Boy Player enhancements.
// Needs to be done on the Game Boy Player logo screen.
// 2 frames nothing pressed and 1 frame all D-Pad buttons pressed.
/*REG_LGY_PAD_SEL = 0x1FFF; // Override all buttons.
static u8 gbp = 2;
if(gbp > 0)
{
REG_LGY_PAD_VAL = 0x1FFF; // Force all buttons not pressed.
gbp--;
}
else
{
REG_LGY_PAD_VAL = 0x1F0F; // All D-Pad buttons pressed.
gbp = 2;
}*/
}
//else REG_LGY_PAD_SEL = 0; // Stop overriding buttons.
if(kDown & KEY_Y) dbgDumpFrame();
}
#endif
static void gbaGfxHandler(void *args)
{
KEvent *const event = (KEvent*)args;
@ -495,11 +462,44 @@ static void gbaGfxHandler(void *args)
GFX_getFramebuffer(SCREEN_TOP) + (16 * 240 * 3), 368u<<16 | 240u, 1u<<12 | 1u<<8);
GFX_waitForPPF();
GFX_swapFramebufs();
if(hidKeysDown() & KEY_Y) dumpFrameTex();
}
taskExit();
}
#ifndef NDEBUG
void debugTests(void)
{
const u32 kDown = hidKeysDown();
// Print GBA RTC date/time.
if(kDown & KEY_X)
{
GbaRtc rtc; LGY_getGbaRtc(&rtc);
ee_printf("RTC: %02X.%02X.%04X %02X:%02X:%02X\n", rtc.d, rtc.mon, rtc.y + 0x2000u, rtc.h, rtc.min, rtc.s);
// Trigger Game Boy Player enhancements.
// Needs to be done on the Game Boy Player logo screen.
// 2 frames nothing pressed and 1 frame all D-Pad buttons pressed.
/*REG_LGY_PAD_SEL = 0x1FFF; // Override all buttons.
static u8 gbp = 2;
if(gbp > 0)
{
REG_LGY_PAD_VAL = 0x1FFF; // Force all buttons not pressed.
gbp--;
}
else
{
REG_LGY_PAD_VAL = 0x1F0F; // All D-Pad buttons pressed.
gbp = 2;
}*/
}
//else REG_LGY_PAD_SEL = 0; // Stop overriding buttons.
}
#endif
int main(void)
{
GFX_init(GFX_BGR8, GFX_RGB565);