Refactor in preperation for scaling feature

Return a `minigen_t` struct with explicit width and height instead of extending the UINT8 buffer by 2 to provide that information in a very datatype-limited way.
This commit is contained in:
toaster 2023-01-23 19:16:45 +00:00
parent da639fe65f
commit ea7e29f279
4 changed files with 23 additions and 15 deletions

View file

@ -1353,13 +1353,16 @@ void AM_Drawer(void)
if (!followplayer) AM_drawCrosshair(XHAIRCOLORS);
}
UINT8 *AM_MinimapGenerate(INT32 wh)
minigen_t *AM_MinimapGenerate(INT32 wh)
{
UINT8 *buf = NULL;
static minigen_t ret = {0};
if (automapactive)
return NULL;
ret.w = ret.h = 0;
ret.buf = NULL;
am_minigen = true;
AM_drawFline = AM_drawFline_soft; // yes, even in GL
@ -1396,9 +1399,9 @@ UINT8 *AM_MinimapGenerate(INT32 wh)
old_m_w = m_w;
old_m_h = m_h;
buf = malloc(2 + (f_w*f_h));
am_buf = buf+2;
ret.w = f_w;
ret.h = f_h;
am_buf = ret.buf = malloc((f_w*f_h));
//AM_clearFB(BACKGROUND);
memset(am_buf, 0xff, (f_w*f_h));
@ -1411,7 +1414,5 @@ UINT8 *AM_MinimapGenerate(INT32 wh)
am_minigen = false;
buf[0] = (UINT8)f_w;
buf[1] = (UINT8)f_h;
return buf;
return &ret;
}

View file

@ -48,8 +48,14 @@ void AM_Start(void);
// Called to force the automap to quit if the level is completed while it is up.
void AM_Stop(void);
struct minigen_t
{
INT32 w, h;
UINT8 *buf;
};
// Minimap generation
UINT8 *AM_MinimapGenerate(INT32 wh);
minigen_t *AM_MinimapGenerate(INT32 wh);
#ifdef __cplusplus
} // extern "C"

View file

@ -1754,7 +1754,7 @@ void M_MinimapGenerate(void)
#ifdef USE_PNG
char *filepath = va(pandf, srb2home, "MINIMAP.png");
boolean ret = false;
UINT8 *linear = NULL;
minigen_t *minigen = NULL;
INT32 wh = 100;
if (gamestate != GS_LEVEL)
@ -1763,17 +1763,17 @@ void M_MinimapGenerate(void)
return;
}
linear = AM_MinimapGenerate(wh);
minigen = AM_MinimapGenerate(wh);
if (linear == NULL)
if (minigen == NULL || minigen->buf == NULL)
goto failure;
M_CreateScreenShotPalette();
ret = M_SavePNG(filepath, linear+2, linear[0], linear[1], screenshot_palette);
ret = M_SavePNG(filepath, minigen->buf, minigen->w, minigen->h, screenshot_palette);
failure:
if (linear != NULL)
free(linear);
if (minigen->buf != NULL)
free(minigen->buf);
if (ret)
{

View file

@ -26,6 +26,7 @@ extern "C" {
// am_map.h
TYPEDEF (fpoint_t);
TYPEDEF (fline_t);
TYPEDEF (minigen_t);
// command.h
TYPEDEF (vsbuf_t);