- moved the content from p_glnodes into the MapLoader class.

This commit is contained in:
Christoph Oelckers 2018-12-27 11:28:47 +01:00
parent 2e22c01d45
commit 89ba723609
3 changed files with 126 additions and 116 deletions

View file

@ -118,14 +118,14 @@ struct gl5_mapnode_t
//
//==========================================================================
static int CheckForMissingSegs()
int MapLoader::CheckForMissingSegs()
{
auto numsides = level.sides.Size();
auto numsides = Level->sides.Size();
double *added_seglen = new double[numsides];
int missing = 0;
memset(added_seglen, 0, sizeof(double)*numsides);
for (auto &seg : level.segs)
for (auto &seg : Level->segs)
{
if (seg.sidedef != nullptr)
{
@ -137,7 +137,7 @@ static int CheckForMissingSegs()
for (unsigned i = 0; i < numsides; i++)
{
double linelen = level.sides[i].linedef->Delta().Length();
double linelen = Level->sides[i].linedef->Delta().Length();
missing += (added_seglen[i] < linelen - 1.);
}
@ -151,9 +151,9 @@ static int CheckForMissingSegs()
//
//==========================================================================
bool P_CheckForGLNodes()
bool MapLoader::CheckForGLNodes()
{
for(auto &sub : level.subsectors)
for(auto &sub : Level->subsectors)
{
seg_t * firstseg = sub.firstline;
seg_t * lastseg = sub.firstline + sub.numlines - 1;
@ -168,7 +168,7 @@ bool P_CheckForGLNodes()
{
for(uint32_t j=0;j<sub.numlines;j++)
{
if (level.segs[j].linedef==NULL) // miniseg
if (Level->segs[j].linedef==nullptr) // miniseg
{
// We already have GL nodes. Great!
return true;
@ -201,14 +201,12 @@ bool P_CheckForGLNodes()
#define gNd5 MAKE_ID('g','N','d','5')
#define GL_VERT_OFFSET 4
static int firstglvertex;
static bool format5;
static bool LoadGLVertexes(FileReader &lump)
bool MapLoader::LoadGLVertexes(FileReader &lump)
{
int i;
firstglvertex = level.vertexes.Size();
firstglvertex = Level->vertexes.Size();
lump.Seek(0, FileReader::SeekSet);
auto glbuf = lump.Read();
@ -234,19 +232,19 @@ static bool LoadGLVertexes(FileReader &lump)
mapglvertex_t* mgl = (mapglvertex_t *)(gldata + GL_VERT_OFFSET);
unsigned numvertexes = (unsigned)(firstglvertex + (gllen - GL_VERT_OFFSET)/sizeof(mapglvertex_t));
auto oldvertexes = &level.vertexes[0];
level.vertexes.Resize(numvertexes);
auto oldvertexes = &Level->vertexes[0];
Level->vertexes.Resize(numvertexes);
for(auto &line : level.lines)
for(auto &line : Level->lines)
{
// Remap vertex pointers in linedefs
line.v1 = &level.vertexes[line.v1 - oldvertexes];
line.v2 = &level.vertexes[line.v2 - oldvertexes];
line.v1 = &Level->vertexes[line.v1 - oldvertexes];
line.v2 = &Level->vertexes[line.v2 - oldvertexes];
}
for (i = firstglvertex; i < (int)numvertexes; i++)
{
level.vertexes[i].set(LittleLong(mgl->x)/65536., LittleLong(mgl->y)/65536.);
Level->vertexes[i].set(LittleLong(mgl->x)/65536., LittleLong(mgl->y)/65536.);
mgl++;
}
return true;
@ -258,14 +256,14 @@ static bool LoadGLVertexes(FileReader &lump)
//
//==========================================================================
static inline int checkGLVertex(int num)
int MapLoader::checkGLVertex(int num)
{
if (num & 0x8000)
num = (num&0x7FFF)+firstglvertex;
return num;
}
static inline int checkGLVertex3(int num)
int MapLoader::checkGLVertex3(int num)
{
if (num & 0xc0000000)
num = (num&0x3FFFFFFF)+firstglvertex;
@ -278,63 +276,63 @@ static inline int checkGLVertex3(int num)
//
//==========================================================================
static bool LoadGLSegs(FileReader &lump)
bool MapLoader::LoadGLSegs(FileReader &lump)
{
int i;
line_t *ldef=NULL;
line_t *ldef=nullptr;
lump.Seek(0, FileReader::SeekSet);
auto data = lump.Read();
int numsegs = (int)lump.GetLength();
auto &segs = level.segs;
auto &segs = Level->segs;
if (!format5 && memcmp(data.Data(), "gNd3", 4))
{
numsegs/=sizeof(glseg_t);
level.segs.Alloc(numsegs);
Level->segs.Alloc(numsegs);
memset(&segs[0],0,sizeof(seg_t)*numsegs);
glseg_t * ml = (glseg_t*)data.Data();
for(i = 0; i < numsegs; i++)
{
// check for gl-vertices
segs[i].v1 = &level.vertexes[checkGLVertex(LittleShort(ml->v1))];
segs[i].v2 = &level.vertexes[checkGLVertex(LittleShort(ml->v2))];
segs[i].v1 = &Level->vertexes[checkGLVertex(LittleShort(ml->v1))];
segs[i].v2 = &Level->vertexes[checkGLVertex(LittleShort(ml->v2))];
segs[i].PartnerSeg = ml->partner == 0xFFFF ? nullptr : &segs[LittleShort(ml->partner)];
if(ml->linedef != 0xffff)
{
ldef = &level.lines[LittleShort(ml->linedef)];
ldef = &Level->lines[LittleShort(ml->linedef)];
segs[i].linedef = ldef;
ml->side=LittleShort(ml->side);
segs[i].sidedef = ldef->sidedef[ml->side];
if (ldef->sidedef[ml->side] != NULL)
if (ldef->sidedef[ml->side] != nullptr)
{
segs[i].frontsector = ldef->sidedef[ml->side]->sector;
}
else
{
segs[i].frontsector = NULL;
segs[i].frontsector = nullptr;
}
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != NULL)
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != nullptr)
{
segs[i].backsector = ldef->sidedef[ml->side^1]->sector;
}
else
{
ldef->flags &= ~ML_TWOSIDED;
segs[i].backsector = NULL;
segs[i].backsector = nullptr;
}
}
else
{
segs[i].linedef = NULL;
segs[i].sidedef = NULL;
segs[i].linedef = nullptr;
segs[i].sidedef = nullptr;
segs[i].frontsector = NULL;
segs[i].backsector = NULL;
segs[i].frontsector = nullptr;
segs[i].backsector = nullptr;
}
ml++;
}
@ -343,51 +341,51 @@ static bool LoadGLSegs(FileReader &lump)
{
if (!format5) numsegs-=4;
numsegs/=sizeof(glseg3_t);
level.segs.Alloc(numsegs);
Level->segs.Alloc(numsegs);
memset(&segs[0],0,sizeof(seg_t)*numsegs);
glseg3_t * ml = (glseg3_t*)(data.Data() + (format5? 0:4));
for(i = 0; i < numsegs; i++)
{ // check for gl-vertices
segs[i].v1 = &level.vertexes[checkGLVertex3(LittleLong(ml->v1))];
segs[i].v2 = &level.vertexes[checkGLVertex3(LittleLong(ml->v2))];
segs[i].v1 = &Level->vertexes[checkGLVertex3(LittleLong(ml->v1))];
segs[i].v2 = &Level->vertexes[checkGLVertex3(LittleLong(ml->v2))];
const uint32_t partner = LittleLong(ml->partner);
segs[i].PartnerSeg = DWORD_MAX == partner ? nullptr : &segs[partner];
if(ml->linedef != 0xffff) // skip minisegs
{
ldef = &level.lines[LittleLong(ml->linedef)];
ldef = &Level->lines[LittleLong(ml->linedef)];
segs[i].linedef = ldef;
ml->side=LittleShort(ml->side);
segs[i].sidedef = ldef->sidedef[ml->side];
if (ldef->sidedef[ml->side] != NULL)
if (ldef->sidedef[ml->side] != nullptr)
{
segs[i].frontsector = ldef->sidedef[ml->side]->sector;
}
else
{
segs[i].frontsector = NULL;
segs[i].frontsector = nullptr;
}
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != NULL)
if (ldef->flags & ML_TWOSIDED && ldef->sidedef[ml->side^1] != nullptr)
{
segs[i].backsector = ldef->sidedef[ml->side^1]->sector;
}
else
{
ldef->flags &= ~ML_TWOSIDED;
segs[i].backsector = NULL;
segs[i].backsector = nullptr;
}
}
else
{
segs[i].linedef = NULL;
segs[i].sidedef = NULL;
segs[i].frontsector = NULL;
segs[i].backsector = NULL;
segs[i].linedef = nullptr;
segs[i].sidedef = nullptr;
segs[i].frontsector = nullptr;
segs[i].backsector = nullptr;
}
ml++;
}
@ -402,7 +400,7 @@ static bool LoadGLSegs(FileReader &lump)
//
//==========================================================================
static bool LoadGLSubsectors(FileReader &lump)
bool MapLoader::LoadGLSubsectors(FileReader &lump)
{
int i;
@ -419,14 +417,14 @@ static bool LoadGLSubsectors(FileReader &lump)
{
mapsubsector_t * data = (mapsubsector_t*) datab.Data();
numsubsectors /= sizeof(mapsubsector_t);
level.subsectors.Alloc(numsubsectors);
auto &subsectors = level.subsectors;
Level->subsectors.Alloc(numsubsectors);
auto &subsectors = Level->subsectors;
memset(&subsectors[0],0,numsubsectors * sizeof(subsector_t));
for (i=0; i<numsubsectors; i++)
{
subsectors[i].numlines = LittleShort(data[i].numsegs );
subsectors[i].firstline = &level.segs[LittleShort(data[i].firstseg)];
subsectors[i].firstline = &Level->segs[LittleShort(data[i].firstseg)];
if (subsectors[i].numlines == 0)
{
@ -438,14 +436,14 @@ static bool LoadGLSubsectors(FileReader &lump)
{
gl3_mapsubsector_t * data = (gl3_mapsubsector_t*) (datab.Data()+(format5? 0:4));
numsubsectors /= sizeof(gl3_mapsubsector_t);
level.subsectors.Alloc(numsubsectors);
auto &subsectors = level.subsectors;
Level->subsectors.Alloc(numsubsectors);
auto &subsectors = Level->subsectors;
memset(&subsectors[0],0,numsubsectors * sizeof(subsector_t));
for (i=0; i<numsubsectors; i++)
{
subsectors[i].numlines = LittleLong(data[i].numsegs );
subsectors[i].firstline = &level.segs[LittleLong(data[i].firstseg)];
subsectors[i].firstline = &Level->segs[LittleLong(data[i].firstseg)];
if (subsectors[i].numlines == 0)
{
@ -454,12 +452,12 @@ static bool LoadGLSubsectors(FileReader &lump)
}
}
for (auto &sub : level.subsectors)
for (auto &sub : Level->subsectors)
{
for(unsigned j=0;j<sub.numlines;j++)
{
seg_t * seg = sub.firstline + j;
if (seg->linedef==NULL) seg->frontsector = seg->backsector = sub.firstline->frontsector;
if (seg->linedef==nullptr) seg->frontsector = seg->backsector = sub.firstline->frontsector;
}
seg_t *firstseg = sub.firstline;
seg_t *lastseg = sub.firstline + sub.numlines - 1;
@ -479,7 +477,7 @@ static bool LoadGLSubsectors(FileReader &lump)
//
//==========================================================================
static bool LoadNodes (FileReader &lump)
bool MapLoader::LoadNodes (FileReader &lump)
{
const int NF_SUBSECTOR = 0x8000;
const int GL5_NF_SUBSECTOR = (1 << 31);
@ -496,7 +494,7 @@ static bool LoadNodes (FileReader &lump)
if (numnodes == 0) return false;
level.nodes.Alloc(numnodes);
Level->nodes.Alloc(numnodes);
lump.Seek(0, FileReader::SeekSet);
auto buf = lump.Read();
@ -505,7 +503,7 @@ static bool LoadNodes (FileReader &lump)
used.Resize(numnodes);
memset (used.Data(), 0, sizeof(uint16_t)*numnodes);
no = &level.nodes[0];
no = &Level->nodes[0];
for (unsigned i = 0; i < numnodes; i++, no++, mn++)
{
@ -519,11 +517,11 @@ static bool LoadNodes (FileReader &lump)
if (child & NF_SUBSECTOR)
{
child &= ~NF_SUBSECTOR;
if (child >= level.subsectors.Size())
if (child >= Level->subsectors.Size())
{
return false;
}
no->children[j] = (uint8_t *)&level.subsectors[child] + 1;
no->children[j] = (uint8_t *)&Level->subsectors[child] + 1;
}
else if (child >= numnodes)
{
@ -535,7 +533,7 @@ static bool LoadNodes (FileReader &lump)
}
else
{
no->children[j] = &level.nodes[child];
no->children[j] = &Level->nodes[child];
used[child] = j + 1;
}
for (k = 0; k < 4; k++)
@ -552,7 +550,7 @@ static bool LoadNodes (FileReader &lump)
if (numnodes == 0) return false;
level.nodes.Alloc(numnodes);
Level->nodes.Alloc(numnodes);
lump.Seek(0, FileReader::SeekSet);
auto buf = lump.Read();
@ -561,7 +559,7 @@ static bool LoadNodes (FileReader &lump)
used.Resize(numnodes);
memset(used.Data(), 0, sizeof(uint16_t)*numnodes);
no = &level.nodes[0];
no = &Level->nodes[0];
for (unsigned i = 0; i < numnodes; i++, no++, mn++)
{
@ -575,11 +573,11 @@ static bool LoadNodes (FileReader &lump)
if (child & GL5_NF_SUBSECTOR)
{
child &= ~GL5_NF_SUBSECTOR;
if ((unsigned)child >= level.subsectors.Size())
if ((unsigned)child >= Level->subsectors.Size())
{
return false;
}
no->children[j] = (uint8_t *)&level.subsectors[child] + 1;
no->children[j] = (uint8_t *)&Level->subsectors[child] + 1;
}
else if ((unsigned)child >= numnodes)
{
@ -591,7 +589,7 @@ static bool LoadNodes (FileReader &lump)
}
else
{
no->children[j] = &level.nodes[child];
no->children[j] = &Level->nodes[child];
used[child] = j + 1;
}
for (k = 0; k < 4; k++)
@ -610,7 +608,7 @@ static bool LoadNodes (FileReader &lump)
//
//==========================================================================
static bool DoLoadGLNodes(FileReader * lumps)
bool MapLoader::DoLoadGLNodes(FileReader * lumps)
{
int missing = 0;
@ -625,7 +623,7 @@ static bool DoLoadGLNodes(FileReader * lumps)
// Quick check for the validity of the nodes
// For invalid nodes there is a high chance that this test will fail
for (auto &sub : level.subsectors)
for (auto &sub : Level->subsectors)
{
seg_t * seg = sub.firstline;
if (!seg->sidedef)
@ -644,9 +642,9 @@ static bool DoLoadGLNodes(FileReader * lumps)
return missing == 0;
fail:
level.nodes.Clear();
level.subsectors.Clear();
level.segs.Clear();
Level->nodes.Clear();
Level->subsectors.Clear();
Level->segs.Clear();
return false;
}
@ -723,7 +721,7 @@ static int FindGLNodesInWAD(int labellump)
//
// Looks for GL nodes in the same WAD as the level itself
// Function returns the lump number within the file. Returns -1 if the input
// resource file is NULL.
// resource file is nullptr.
//
//===========================================================================
@ -840,7 +838,7 @@ bool MapLoader::LoadGLNodes(MapData * map)
// Todo: Compare file dates
f_gwa = FResourceFile::OpenResourceFile(path, true);
if (f_gwa==NULL) return false;
if (f_gwa==nullptr) return false;
strncpy(map->MapLumps[0].Name, Wads.GetLumpFullName(map->lumpnum), 8);
}
@ -885,7 +883,7 @@ bool MapLoader::CheckNodes(MapData * map, bool rebuilt, int buildtime)
bool loaded = false;
// If the map loading code has performed a node rebuild we don't need to check for it again.
if (!rebuilt && !P_CheckForGLNodes())
if (!rebuilt && !CheckForGLNodes())
{
ret = true; // we are not using the level's original nodes if we get here.
for (auto &sub : Level->subsectors)
@ -988,26 +986,26 @@ static void WriteLong(MemFile &f, uint32_t b)
f[v+3] = (uint8_t)(b>>24);
}
static void CreateCachedNodes(MapData *map)
void MapLoader::CreateCachedNodes(MapData *map)
{
MemFile ZNodes;
WriteLong(ZNodes, 0);
WriteLong(ZNodes, level.vertexes.Size());
for(auto &vert : level.vertexes)
WriteLong(ZNodes, Level->vertexes.Size());
for(auto &vert : Level->vertexes)
{
WriteLong(ZNodes, vert.fixX());
WriteLong(ZNodes, vert.fixY());
}
WriteLong(ZNodes, level.subsectors.Size());
for (auto &sub : level.subsectors)
WriteLong(ZNodes, Level->subsectors.Size());
for (auto &sub : Level->subsectors)
{
WriteLong(ZNodes, sub.numlines);
}
WriteLong(ZNodes, level.segs.Size());
for(auto &seg : level.segs)
WriteLong(ZNodes, Level->segs.Size());
for(auto &seg : Level->segs)
{
WriteLong(ZNodes, seg.v1->Index());
WriteLong(ZNodes, seg.PartnerSeg == nullptr? 0xffffffffu : uint32_t(seg.PartnerSeg->Index()));
@ -1023,8 +1021,8 @@ static void CreateCachedNodes(MapData *map)
}
}
WriteLong(ZNodes, level.nodes.Size());
for(auto &node : level.nodes)
WriteLong(ZNodes, Level->nodes.Size());
for(auto &node : Level->nodes)
{
WriteLong(ZNodes, node.x);
WriteLong(ZNodes, node.y);
@ -1055,7 +1053,7 @@ static void CreateCachedNodes(MapData *map)
uLongf outlen = ZNodes.Size();
TArray<Bytef> compressed;
int offset = level.lines.Size() * 8 + 12 + 16;
int offset = Level->lines.Size() * 8 + 12 + 16;
int r;
do
{
@ -1069,12 +1067,12 @@ static void CreateCachedNodes(MapData *map)
while (r == Z_BUF_ERROR);
memcpy(compressed.Data(), "CACH", 4);
uint32_t len = LittleLong(level.lines.Size());
uint32_t len = LittleLong(Level->lines.Size());
memcpy(&compressed[4], &len, 4);
map->GetChecksum(&compressed[8]);
for (unsigned i = 0; i < level.lines.Size(); i++)
for (unsigned i = 0; i < Level->lines.Size(); i++)
{
uint32_t ndx[2] = { LittleLong(uint32_t(level.lines[i].v1->Index())), LittleLong(uint32_t(level.lines[i].v2->Index())) };
uint32_t ndx[2] = { LittleLong(uint32_t(Level->lines[i].v1->Index())), LittleLong(uint32_t(Level->lines[i].v2->Index())) };
memcpy(&compressed[8 + 16 + 8 * i], ndx, 8);
}
memcpy(&compressed[offset - 4], "ZGL3", 4);
@ -1246,7 +1244,7 @@ static bool PointOnLine (int x, int y, int x1, int y1, int dx, int dy)
//
//==========================================================================
void P_SetRenderSector()
void MapLoader::SetRenderSector()
{
int i;
uint32_t j;
@ -1255,14 +1253,14 @@ void P_SetRenderSector()
// Check for incorrect partner seg info so that the following code does not crash.
for (auto &seg : level.segs)
for (auto &seg : Level->segs)
{
auto p = seg.PartnerSeg;
if (p != nullptr)
{
int partner = p->Index();
if (partner < 0 || partner >= (int)level.segs.Size() || &level.segs[partner] != p)
if (partner < 0 || partner >= (int)Level->segs.Size() || &Level->segs[partner] != p)
{
seg.PartnerSeg = nullptr;
}
@ -1274,7 +1272,7 @@ void P_SetRenderSector()
}
}
}
for (auto &seg : level.segs)
for (auto &seg : Level->segs)
{
if (seg.PartnerSeg != nullptr && seg.PartnerSeg->PartnerSeg != &seg)
{
@ -1283,7 +1281,7 @@ void P_SetRenderSector()
}
// look up sector number for each subsector
for (auto &ss : level.subsectors)
for (auto &ss : Level->subsectors)
{
// For rendering pick the sector from the first seg that is a sector boundary
// this takes care of self-referencing sectors
@ -1312,7 +1310,7 @@ void P_SetRenderSector()
}
seg++;
}
if(ss.render_sector == NULL)
if(ss.render_sector == nullptr)
{
undetermined.Push(&ss);
}

View file

@ -3011,16 +3011,15 @@ void MapLoader::AddToList(uint8_t *hitlist, FTextureID texid, int bitmask)
void MapLoader::PrecacheLevel()
{
int i;
uint8_t *hitlist;
TMap<PClassActor *, bool> actorhitlist;
int cnt = TexMan.NumTextures();
if (demoplayback)
return;
hitlist = new uint8_t[cnt];
memset(hitlist, 0, cnt);
int i;
TMap<PClassActor *, bool> actorhitlist;
int cnt = TexMan.NumTextures();
TArray<uint8_t> hitlist(cnt, true);
memset(hitlist.Data(), 0, cnt);
AActor *actor;
TThinkerIterator<AActor> iterator;
@ -3044,15 +3043,15 @@ void MapLoader::PrecacheLevel()
for (i = Level->sectors.Size() - 1; i >= 0; i--)
{
AddToList(hitlist, Level->sectors[i].GetTexture(sector_t::floor), FTextureManager::HIT_Flat);
AddToList(hitlist, Level->sectors[i].GetTexture(sector_t::ceiling), FTextureManager::HIT_Flat);
AddToList(hitlist.Data(), Level->sectors[i].GetTexture(sector_t::floor), FTextureManager::HIT_Flat);
AddToList(hitlist.Data(), Level->sectors[i].GetTexture(sector_t::ceiling), FTextureManager::HIT_Flat);
}
for (i = Level->sides.Size() - 1; i >= 0; i--)
{
AddToList(hitlist, Level->sides[i].GetTexture(side_t::top), FTextureManager::HIT_Wall);
AddToList(hitlist, Level->sides[i].GetTexture(side_t::mid), FTextureManager::HIT_Wall);
AddToList(hitlist, Level->sides[i].GetTexture(side_t::bottom), FTextureManager::HIT_Wall);
AddToList(hitlist.Data(), Level->sides[i].GetTexture(side_t::top), FTextureManager::HIT_Wall);
AddToList(hitlist.Data(), Level->sides[i].GetTexture(side_t::mid), FTextureManager::HIT_Wall);
AddToList(hitlist.Data(), Level->sides[i].GetTexture(side_t::bottom), FTextureManager::HIT_Wall);
}
// Sky texture is always present.
@ -3064,31 +3063,30 @@ void MapLoader::PrecacheLevel()
if (sky1texture.isValid())
{
AddToList(hitlist, sky1texture, FTextureManager::HIT_Sky);
AddToList(hitlist.Data(), sky1texture, FTextureManager::HIT_Sky);
}
if (sky2texture.isValid())
{
AddToList(hitlist, sky2texture, FTextureManager::HIT_Sky);
AddToList(hitlist.Data(), sky2texture, FTextureManager::HIT_Sky);
}
for (auto n : gameinfo.PrecachedTextures)
{
FTextureID tex = TexMan.CheckForTexture(n, ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ReturnFirst);
if (tex.Exists()) AddToList(hitlist, tex, FTextureManager::HIT_Wall);
if (tex.Exists()) AddToList(hitlist.Data(), tex, FTextureManager::HIT_Wall);
}
for (unsigned i = 0; i < Level->info->PrecacheTextures.Size(); i++)
{
FTextureID tex = TexMan.CheckForTexture(Level->info->PrecacheTextures[i], ETextureType::Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ReturnFirst);
if (tex.Exists()) AddToList(hitlist, tex, FTextureManager::HIT_Wall);
if (tex.Exists()) AddToList(hitlist.Data(), tex, FTextureManager::HIT_Wall);
}
// This is just a temporary solution, until the hardware renderer's texture manager is in a better state.
if (!V_IsHardwareRenderer())
SWRenderer->Precache(hitlist, actorhitlist);
SWRenderer->Precache(hitlist.Data(), actorhitlist);
else
hw_PrecacheTexture(hitlist, actorhitlist);
hw_PrecacheTexture(hitlist.Data(), actorhitlist);
delete[] hitlist;
}
extern polyblock_t **PolyBlockMap;
@ -3628,7 +3626,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame)
}
else
{
P_CheckForGLNodes();
loader.CheckForGLNodes();
}
// set the head node for gameplay purposes. If the separate gamenodes array is not empty, use that, otherwise use the render nodes.
@ -3650,7 +3648,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame)
loader.FloodZones();
times[13].Unclock();
P_SetRenderSector();
loader.SetRenderSector();
FixMinisegReferences();
FixHoles();

View file

@ -165,8 +165,6 @@ int GetUDMFInt(int type, int index, FName key);
double GetUDMFFloat(int type, int index, FName key);
FString GetUDMFString(int type, int index, FName key);
bool P_CheckForGLNodes();
void P_SetRenderSector();
void FixMinisegReferences();
void FixHoles();
void ReportUnpairedMinisegs();
@ -213,6 +211,20 @@ class MapLoader
void *level; // this is to hide the global variable and produce an error for referencing it.
FLevelLocals *Level;
int firstglvertex; // helpers for loading GL nodes from GWA files.
bool format5;
int checkGLVertex(int num);
int checkGLVertex3(int num);
int CheckForMissingSegs();
bool LoadGLVertexes(FileReader &lump);
bool LoadGLSegs(FileReader &lump);
bool LoadGLSubsectors(FileReader &lump);
bool LoadNodes(FileReader &lump);
bool DoLoadGLNodes(FileReader * lumps);
void CreateCachedNodes(MapData *map);
void SetTexture(side_t *side, int position, const char *name, FMissingTextureTracker &track);
void SetTexture(sector_t *sector, int index, int position, const char *name, FMissingTextureTracker &track, bool truncate);
void SetTexture(side_t *side, int position, uint32_t *blend, const char *name);
@ -245,6 +257,7 @@ public:
bool LoadGLNodes(MapData * map);
bool CheckCachedNodes(MapData *map);
bool CheckNodes(MapData * map, bool rebuilt, int buildtime);
bool CheckForGLNodes();
void LoadSectors(MapData *map, FMissingTextureTracker &missingtex);
void LoadThings(MapData * map);
@ -264,6 +277,7 @@ public:
void PrecacheLevel();
void ParseTextMap(MapData *map, FMissingTextureTracker &missingtex);
void SummarizeMissingTextures(const FMissingTextureTracker &missing);
void SetRenderSector();
MapLoader(FLevelLocals *lev)
{