From 6b1dd17a998a8cfc9ca8f77cf410b4c773a0dfba Mon Sep 17 00:00:00 2001 From: Zack Middleton Date: Fri, 24 May 2024 14:58:54 -0500 Subject: [PATCH] RENDERER: Fix reading source in levelshot command Fix using offset for source returned by RB_ReadPixels(). In practice this shouldn't be an issue because Hunk_AllocateTempMemory() should already be aligned to sizeof(intptr_t). --- code/renderergl1/tr_init.c | 7 ++++--- code/renderergl2/tr_init.c | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/code/renderergl1/tr_init.c b/code/renderergl1/tr_init.c index 7f73da205..e3f91d43f 100644 --- a/code/renderergl1/tr_init.c +++ b/code/renderergl1/tr_init.c @@ -483,7 +483,7 @@ sampled down from full screen distorted images */ static void R_LevelShot(screenshotType_e type, const char *ext) { char fileName[MAX_OSPATH]; - byte *source; + byte *source, *allsource; byte *resample, *resamplestart; size_t offset = 0, memcount; int spadlen, rpadlen; @@ -511,7 +511,8 @@ static void R_LevelShot(screenshotType_e type, const char *ext) { Com_sprintf(fileName, sizeof(fileName), "levelshots/%s%s", tr.world->baseName, ext); - source = RB_ReadPixels(0, 0, glConfig.vidWidth, glConfig.vidHeight, &offset, &spadlen); + allsource = RB_ReadPixels(0, 0, glConfig.vidWidth, glConfig.vidHeight, &offset, &spadlen); + source = allsource + offset; linelen = width * 3; padwidth = spadlen + linelen; @@ -560,7 +561,7 @@ static void R_LevelShot(screenshotType_e type, const char *ext) { RE_SavePNG(fileName, width, height, resample + offset, rpadlen); ri.Hunk_FreeTempMemory(resample); - ri.Hunk_FreeTempMemory(source); + ri.Hunk_FreeTempMemory(allsource); ri.Printf(PRINT_ALL, "Wrote %s\n", fileName); } diff --git a/code/renderergl2/tr_init.c b/code/renderergl2/tr_init.c index 96cb93111..0414d2320 100644 --- a/code/renderergl2/tr_init.c +++ b/code/renderergl2/tr_init.c @@ -572,7 +572,7 @@ the menu system, sampled down from full screen distorted images */ static void R_LevelShot(screenshotType_e type, const char *ext) { char fileName[MAX_OSPATH]; - byte *source; + byte *source, *allsource; byte *resample, *resamplestart; size_t offset = 0, memcount; int spadlen, rpadlen; @@ -600,7 +600,8 @@ static void R_LevelShot(screenshotType_e type, const char *ext) { Com_sprintf(fileName, sizeof(fileName), "levelshots/%s%s", tr.world->baseName, ext); - source = RB_ReadPixels(0, 0, glConfig.vidWidth, glConfig.vidHeight, &offset, &spadlen); + allsource = RB_ReadPixels(0, 0, glConfig.vidWidth, glConfig.vidHeight, &offset, &spadlen); + source = allsource + offset; linelen = width * 3; padwidth = spadlen + linelen; @@ -650,7 +651,7 @@ static void R_LevelShot(screenshotType_e type, const char *ext) { RE_SavePNG(fileName, width, height, resample + offset, rpadlen); ri.Hunk_FreeTempMemory(resample); - ri.Hunk_FreeTempMemory(source); + ri.Hunk_FreeTempMemory(allsource); ri.Printf(PRINT_ALL, "Wrote %s\n", fileName); }