Fix miptex crash.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5647 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2020-03-08 18:10:50 +00:00
parent 9a88730ba8
commit 4beaf0e0c8
1 changed files with 19 additions and 8 deletions

View File

@ -3356,6 +3356,7 @@ static void Mod_LoadMiptex(model_t *loadmodel, texture_t *tx, miptex_t *mt, size
size_t neww=0, newh=0;
qbyte *newdata=NULL;
qbyte *pal = NULL;
int m;
//bug: vanilla quake ignored offsets and just made assumptions.
//this means we can't just play with offsets to hide stuff, we have to postfix it (which requires guessing lump sizes)
@ -3496,6 +3497,16 @@ static void Mod_LoadMiptex(model_t *loadmodel, texture_t *tx, miptex_t *mt, size
return;
}
if (!mt->offsets[0])
{
tx->srcfmt = PTI_INVALID;
tx->srcwidth = mt->width;
tx->srcheight = mt->height;
tx->srcdata = NULL;
tx->palette = NULL;
return;
}
if (pal)
{ //mostly identical, just a specific palette hidden at the end. handle fences elsewhere.
tx->srcdata = BZ_Malloc(legacysize + 768);
@ -3526,14 +3537,14 @@ static void Mod_LoadMiptex(model_t *loadmodel, texture_t *tx, miptex_t *mt, size
tx->srcheight = mt->height;
legacysize = 0;
memcpy(tx->srcdata+legacysize, (qbyte *)mt + mt->offsets[0], (mt->width>>0)*(mt->height>>0));
legacysize += (mt->width>>0)*(mt->height>>0);
memcpy(tx->srcdata+legacysize, (qbyte *)mt + mt->offsets[1], (mt->width>>1)*(mt->height>>1));
legacysize += (mt->width>>1)*(mt->height>>1);
memcpy(tx->srcdata+legacysize, (qbyte *)mt + mt->offsets[2], (mt->width>>2)*(mt->height>>2));
legacysize += (mt->width>>2)*(mt->height>>2);
memcpy(tx->srcdata+legacysize, (qbyte *)mt + mt->offsets[3], (mt->width>>3)*(mt->height>>3));
// legacysize += (mt->width>>3)*(mt->height>>3);
for (m = 0; m < 4; m++)
{
if (mt->offsets[m])
memcpy(tx->srcdata+legacysize, (qbyte *)mt + mt->offsets[m], (mt->width>>m)*(mt->height>>m));
else
memset(tx->srcdata+legacysize, 0, (mt->width>>m)*(mt->height>>m));
legacysize += (mt->width>>m)*(mt->height>>m);
}
}
#endif