mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-14 08:31:23 +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
|
struct FGLLinePortal
|
||||||
{
|
{
|
||||||
// defines the complete span of this portal
|
// defines the complete span of this portal, if this is of type PORTT_LINKED.
|
||||||
vertex_t *v1, *v2; // vertices, from v1 to v2
|
vertex_t *v1 = nullptr, *v2 = nullptr; // vertices, from v1 to v2
|
||||||
DVector2 delta; // precalculated v2 - v1 for side checking
|
|
||||||
TArray<FLinePortal *> lines;
|
TArray<FLinePortal *> lines;
|
||||||
int validcount = 0;
|
int validcount = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -443,16 +443,14 @@ void gl_InitPortals()
|
||||||
tempindex[i] = glLinePortals.Size();
|
tempindex[i] = glLinePortals.Size();
|
||||||
line_t *pSrcLine = linePortals[i].mOrigin;
|
line_t *pSrcLine = linePortals[i].mOrigin;
|
||||||
line_t *pLine = linePortals[i].mDestination;
|
line_t *pLine = linePortals[i].mDestination;
|
||||||
FGLLinePortal glport;
|
FGLLinePortal &glport = glLinePortals[glLinePortals.Reserve(1)];
|
||||||
|
|
||||||
glport.v1 = pLine->v1;
|
|
||||||
glport.v2 = pLine->v2;
|
|
||||||
glport.delta = { 0, 0 };
|
|
||||||
glport.lines.Push(&linePortals[i]);
|
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.
|
// 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
|
do
|
||||||
{
|
{
|
||||||
// now collect all other colinear lines connected to this one. We run this loop as long as it still finds a match
|
// 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
|
// The lines connect and both source and destination are colinear, so this is a match
|
||||||
gotsome = true;
|
gotsome = true;
|
||||||
tempindex[j] = tempindex[i];
|
tempindex[j] = tempindex[i];
|
||||||
if (pLine->v1 == pLine2->v2) glLinePortals[tempindex[i]].v1 = pLine2->v1;
|
if (pLine->v1 == pLine2->v2) glport.v1 = pLine2->v1;
|
||||||
else glLinePortals[tempindex[i]].v2 = pLine2->v2;
|
else glport.v2 = pLine2->v2;
|
||||||
glLinePortals[tempindex[i]].lines.Push(&linePortals[j]);
|
glport.lines.Push(&linePortals[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -487,9 +485,6 @@ void gl_InitPortals()
|
||||||
} while (gotsome);
|
} while (gotsome);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto glport : glLinePortals)
|
|
||||||
{
|
|
||||||
glport.delta = glport.v2->fPos() - glport.v1->fPos();
|
|
||||||
}
|
}
|
||||||
linePortalToGL.Resize(linePortals.Size());
|
linePortalToGL.Resize(linePortals.Size());
|
||||||
for (unsigned i = 0; i < linePortals.Size(); i++)
|
for (unsigned i = 0; i < linePortals.Size(); i++)
|
||||||
|
|
|
@ -195,7 +195,7 @@ struct GLLinePortal : public GLPortal
|
||||||
|
|
||||||
GLLinePortal(FGLLinePortal *line)
|
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.
|
// For non-linked portals we must check the actual linedef.
|
||||||
line_t *lline = line->lines[0]->mDestination;
|
line_t *lline = line->lines[0]->mDestination;
|
||||||
|
|
Loading…
Reference in a new issue