mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-30 23:51:05 +00:00
- fixed a crash when initializing the GL portal data for an incomplete or inactive portal. Also did a bit of cleanup on this code, the 'delta' member was never used.
This commit is contained in:
parent
a2f56b6ef5
commit
c5db5dff99
3 changed files with 33 additions and 39 deletions
|
@ -56,9 +56,8 @@ struct FPortal
|
|||
|
||||
struct FGLLinePortal
|
||||
{
|
||||
// defines the complete span of this portal
|
||||
vertex_t *v1, *v2; // vertices, from v1 to v2
|
||||
DVector2 delta; // precalculated v2 - v1 for side checking
|
||||
// defines the complete span of this portal, if this is of type PORTT_LINKED.
|
||||
vertex_t *v1 = nullptr, *v2 = nullptr; // vertices, from v1 to v2
|
||||
TArray<FLinePortal *> lines;
|
||||
int validcount = 0;
|
||||
};
|
||||
|
|
|
@ -443,16 +443,14 @@ void gl_InitPortals()
|
|||
tempindex[i] = glLinePortals.Size();
|
||||
line_t *pSrcLine = linePortals[i].mOrigin;
|
||||
line_t *pLine = linePortals[i].mDestination;
|
||||
FGLLinePortal glport;
|
||||
|
||||
glport.v1 = pLine->v1;
|
||||
glport.v2 = pLine->v2;
|
||||
glport.delta = { 0, 0 };
|
||||
FGLLinePortal &glport = glLinePortals[glLinePortals.Reserve(1)];
|
||||
glport.lines.Push(&linePortals[i]);
|
||||
glLinePortals.Push(glport);
|
||||
|
||||
// We cannot do this grouping for non-linked portals because they can be changed at run time.
|
||||
if (linePortals[i].mType == PORTT_LINKED)
|
||||
if (linePortals[i].mType == PORTT_LINKED && pLine != nullptr)
|
||||
{
|
||||
glport.v1 = pLine->v1;
|
||||
glport.v2 = pLine->v2;
|
||||
do
|
||||
{
|
||||
// now collect all other colinear lines connected to this one. We run this loop as long as it still finds a match
|
||||
|
@ -477,9 +475,9 @@ void gl_InitPortals()
|
|||
// The lines connect and both source and destination are colinear, so this is a match
|
||||
gotsome = true;
|
||||
tempindex[j] = tempindex[i];
|
||||
if (pLine->v1 == pLine2->v2) glLinePortals[tempindex[i]].v1 = pLine2->v1;
|
||||
else glLinePortals[tempindex[i]].v2 = pLine2->v2;
|
||||
glLinePortals[tempindex[i]].lines.Push(&linePortals[j]);
|
||||
if (pLine->v1 == pLine2->v2) glport.v1 = pLine2->v1;
|
||||
else glport.v2 = pLine2->v2;
|
||||
glport.lines.Push(&linePortals[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -487,9 +485,6 @@ void gl_InitPortals()
|
|||
} while (gotsome);
|
||||
}
|
||||
}
|
||||
for (auto glport : glLinePortals)
|
||||
{
|
||||
glport.delta = glport.v2->fPos() - glport.v1->fPos();
|
||||
}
|
||||
linePortalToGL.Resize(linePortals.Size());
|
||||
for (unsigned i = 0; i < linePortals.Size(); i++)
|
||||
|
|
|
@ -195,7 +195,7 @@ struct GLLinePortal : public GLPortal
|
|||
|
||||
GLLinePortal(FGLLinePortal *line)
|
||||
{
|
||||
if (line->lines[0]->mType != PORTT_LINKED)
|
||||
if (line->lines[0]->mType != PORTT_LINKED || line->v1 == nullptr)
|
||||
{
|
||||
// For non-linked portals we must check the actual linedef.
|
||||
line_t *lline = line->lines[0]->mDestination;
|
||||
|
|
Loading…
Reference in a new issue