Fix flat corruption (from lacto's feffdb37)

This commit is contained in:
GenericHeroGuy 2025-05-25 18:07:25 +02:00
parent fbea771486
commit fc03c880fb

View file

@ -576,21 +576,25 @@ UINT8 *R_GetFlatForTexture(size_t texnum)
lumpnum_t lumpnum = patch->lump; lumpnum_t lumpnum = patch->lump;
boolean doremap = W_NeedPaletteRemapPwad(wadnum, lumpnum, false); boolean doremap = W_NeedPaletteRemapPwad(wadnum, lumpnum, false);
UINT8 *pdata = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE); UINT8 *pdata = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE);
size_t lumplength = W_LumpLengthPwad(wadnum, lumpnum);
if (doremap) if (doremap)
{ {
R_DoPaletteRemapFlat(pdata, W_LumpLengthPwad(wadnum, lumpnum)); R_DoPaletteRemapFlat(pdata, W_LumpLengthPwad(wadnum, lumpnum));
} }
#ifndef NO_PNG_LUMPS #ifndef NO_PNG_LUMPS
size_t lumplength = W_LumpLengthPwad(wadnum, lumpnum);
if (Picture_IsLumpPNG(pdata, lumplength)) if (Picture_IsLumpPNG(pdata, lumplength))
{
texture->flat = Picture_PNGConvert(pdata, PICFMT_FLAT, NULL, NULL, NULL, NULL, lumplength, NULL, 0); texture->flat = Picture_PNGConvert(pdata, PICFMT_FLAT, NULL, NULL, NULL, NULL, lumplength, NULL, 0);
Z_Free(pdata);
}
else else
#endif #endif
texture->flat = pdata; {
texture->flat = Z_Malloc(lumplength, PU_STATIC, NULL);
memcpy(texture->flat, pdata, lumplength);
}
Z_SetUser(texture->flat, &texture->flat);
Z_Free(pdata);
} }
else else
texture->flat = (UINT8 *)Picture_TextureToFlat(texnum); texture->flat = (UINT8 *)Picture_TextureToFlat(texnum);
@ -1104,7 +1108,10 @@ void R_FlushTextureCache(void)
if (numtextures) if (numtextures)
for (i = 0; i < numtextures; i++) for (i = 0; i < numtextures; i++)
{
Z_Free(textures[i]->flat);
Z_Free(texturecache[i]); Z_Free(texturecache[i]);
}
} }
// Need these prototypes for later; defining them here instead of r_textures.h so they're "private" // Need these prototypes for later; defining them here instead of r_textures.h so they're "private"