mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-12 11:03:02 +00:00
Skip over empty entries when populating vres, saving memory
This commit is contained in:
parent
8afd9b03b2
commit
1538055091
1 changed files with 34 additions and 14 deletions
48
src/w_wad.c
48
src/w_wad.c
|
|
@ -2271,23 +2271,43 @@ virtres_t* vres_GetMap(lumpnum_t lumpnum)
|
||||||
|
|
||||||
if (W_IsLumpWad(lumpnum))
|
if (W_IsLumpWad(lumpnum))
|
||||||
{
|
{
|
||||||
|
UINT32 realentry;
|
||||||
|
size_t *vsizecache;
|
||||||
|
|
||||||
// Remember that we're assuming that the WAD will have a specific set of lumps in a specific order.
|
// Remember that we're assuming that the WAD will have a specific set of lumps in a specific order.
|
||||||
UINT8 *wadData = W_CacheLumpNum(lumpnum, PU_LEVEL);
|
UINT8 *wadData = W_CacheLumpNum(lumpnum, PU_LEVEL);
|
||||||
filelump_t *fileinfo = (filelump_t *)(wadData + ((wadinfo_t *)wadData)->infotableofs);
|
filelump_t *fileinfo = (filelump_t *)(wadData + ((wadinfo_t *)wadData)->infotableofs);
|
||||||
numlumps = ((wadinfo_t *)wadData)->numlumps;
|
|
||||||
vlumps = Z_Malloc(sizeof(virtlump_t)*numlumps, PU_LEVEL, NULL);
|
|
||||||
|
|
||||||
// Build the lumps.
|
i = ((wadinfo_t *)wadData)->numlumps;
|
||||||
for (i = 0; i < numlumps; i++)
|
vsizecache = Z_Malloc(sizeof(size_t)*i, PU_LEVEL, NULL);
|
||||||
|
|
||||||
|
for (realentry = 0; realentry < i; realentry++)
|
||||||
{
|
{
|
||||||
vlumps[i].size = (size_t)(((filelump_t *)(fileinfo + i))->size);
|
vsizecache[realentry] = (size_t)(((filelump_t *)(fileinfo + realentry))->size);
|
||||||
// Play it safe with the name in this case.
|
|
||||||
memcpy(vlumps[i].name, (fileinfo + i)->name, 8);
|
if (!vsizecache[realentry])
|
||||||
vlumps[i].name[8] = '\0';
|
continue;
|
||||||
vlumps[i].data = Z_Malloc(vlumps[i].size, PU_LEVEL, NULL); // This is memory inefficient, sorry about that.
|
|
||||||
memcpy(vlumps[i].data, wadData + (fileinfo + i)->filepos, vlumps[i].size);
|
numlumps++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vlumps = Z_Malloc(sizeof(virtlump_t)*numlumps, PU_LEVEL, NULL);
|
||||||
|
|
||||||
|
// Build the lumps, skipping over empty entries.
|
||||||
|
for (i = 0, realentry = 0; i < numlumps; realentry++)
|
||||||
|
{
|
||||||
|
if (vsizecache[realentry] == 0)
|
||||||
|
continue;
|
||||||
|
vlumps[i].size = vsizecache[realentry];
|
||||||
|
// Play it safe with the name in this case.
|
||||||
|
memcpy(vlumps[i].name, (fileinfo + realentry)->name, 8);
|
||||||
|
vlumps[i].name[8] = '\0';
|
||||||
|
vlumps[i].data = Z_Malloc(vlumps[i].size, PU_LEVEL, NULL); // This is memory inefficient, sorry about that.
|
||||||
|
memcpy(vlumps[i].data, wadData + (fileinfo + realentry)->filepos, vlumps[i].size);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Z_Free(vsizecache);
|
||||||
Z_Free(wadData);
|
Z_Free(wadData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -2296,10 +2316,10 @@ virtres_t* vres_GetMap(lumpnum_t lumpnum)
|
||||||
lumpnum_t lumppos = lumpnum + 1;
|
lumpnum_t lumppos = lumpnum + 1;
|
||||||
for (i = LUMPNUM(lumppos); i < wadfiles[WADFILENUM(lumpnum)]->numlumps; i++, lumppos++, numlumps++)
|
for (i = LUMPNUM(lumppos); i < wadfiles[WADFILENUM(lumpnum)]->numlumps; i++, lumppos++, numlumps++)
|
||||||
{
|
{
|
||||||
if (W_LumpLength(lumppos) == 0)
|
if (W_LumpLength(lumppos) > 0)
|
||||||
{
|
continue;
|
||||||
break;
|
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
numlumps++;
|
numlumps++;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue