mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-28 06:42:09 +00:00
Minor bug fixes
This commit is contained in:
parent
e1a8749586
commit
b5f3f63b93
4 changed files with 30 additions and 6 deletions
|
@ -74,7 +74,7 @@ void PolyRenderer::RenderActorView(AActor *actor, bool dontmaplines)
|
||||||
{
|
{
|
||||||
NetUpdate();
|
NetUpdate();
|
||||||
|
|
||||||
//swrenderer::r_dontmaplines = dontmaplines;
|
DontMapLines = dontmaplines;
|
||||||
|
|
||||||
P_FindParticleSubsectors();
|
P_FindParticleSubsectors();
|
||||||
PO_LinkToSubsectors();
|
PO_LinkToSubsectors();
|
||||||
|
|
|
@ -50,6 +50,8 @@ public:
|
||||||
bool InsertSeenLinePortal(FLinePortal *portal);
|
bool InsertSeenLinePortal(FLinePortal *portal);
|
||||||
bool InsertSeenMirror(line_t *mirrorLine);
|
bool InsertSeenMirror(line_t *mirrorLine);
|
||||||
|
|
||||||
|
bool DontMapLines = false;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void ClearBuffers();
|
void ClearBuffers();
|
||||||
void SetSceneViewport();
|
void SetSceneViewport();
|
||||||
|
|
|
@ -239,10 +239,31 @@ LineSegmentRange PolyCull::GetSegmentRangeForLine(double x1, double y1, double x
|
||||||
{
|
{
|
||||||
double znear = 5.0;
|
double znear = 5.0;
|
||||||
double updownnear = -400.0;
|
double updownnear = -400.0;
|
||||||
|
double sidenear = 400.0;
|
||||||
|
|
||||||
// Cull if entirely behind the portal clip plane (tbd: should we clip the segment?)
|
// Clip line to the portal clip plane
|
||||||
if (Vec4f::dot(PortalClipPlane, Vec4f((float)x1, (float)y1, 0.0f, 1.0f)) < 0.0f && Vec4f::dot(PortalClipPlane, Vec4f((float)x2, (float)y2, 0.0f, 1.0f)) < 0.0f)
|
float distance1 = Vec4f::dot(PortalClipPlane, Vec4f((float)x1, (float)y1, 0.0f, 1.0f));
|
||||||
|
float distance2 = Vec4f::dot(PortalClipPlane, Vec4f((float)x2, (float)y2, 0.0f, 1.0f));
|
||||||
|
if (distance1 < 0.0f && distance2 < 0.0f)
|
||||||
|
{
|
||||||
return LineSegmentRange::NotVisible;
|
return LineSegmentRange::NotVisible;
|
||||||
|
}
|
||||||
|
else if (distance1 < 0.0f || distance2 < 0.0f)
|
||||||
|
{
|
||||||
|
double t1 = 0.0f, t2 = 1.0f;
|
||||||
|
if (distance1 < 0.0f)
|
||||||
|
t1 = clamp(distance1 / (distance1 - distance2), 0.0f, 1.0f);
|
||||||
|
else
|
||||||
|
t2 = clamp(distance2 / (distance1 - distance2), 0.0f, 1.0f);
|
||||||
|
double nx1 = x1 * (1.0 - t1) + x2 * t1;
|
||||||
|
double ny1 = y1 * (1.0 - t1) + y2 * t1;
|
||||||
|
double nx2 = x1 * (1.0 - t2) + x2 * t2;
|
||||||
|
double ny2 = y1 * (1.0 - t2) + y2 * t2;
|
||||||
|
x1 = nx1;
|
||||||
|
x2 = nx2;
|
||||||
|
y1 = ny1;
|
||||||
|
y2 = ny2;
|
||||||
|
}
|
||||||
|
|
||||||
// Transform to 2D view space:
|
// Transform to 2D view space:
|
||||||
x1 = x1 - ViewPos.X;
|
x1 = x1 - ViewPos.X;
|
||||||
|
@ -255,7 +276,8 @@ LineSegmentRange PolyCull::GetSegmentRangeForLine(double x1, double y1, double x
|
||||||
double ry2 = x2 * ViewCos + y2 * ViewSin;
|
double ry2 = x2 * ViewCos + y2 * ViewSin;
|
||||||
|
|
||||||
// Is it potentially visible when looking straight up or down?
|
// Is it potentially visible when looking straight up or down?
|
||||||
if (!(ry1 < updownnear && ry2 < updownnear) && !(ry1 > znear && ry2 > znear))
|
if (!(ry1 < updownnear && ry2 < updownnear) && !(ry1 > znear && ry2 > znear) &&
|
||||||
|
!(rx1 < -sidenear && rx2 < -sidenear) && !(rx1 > sidenear && rx2 > sidenear))
|
||||||
return LineSegmentRange::AlwaysVisible;
|
return LineSegmentRange::AlwaysVisible;
|
||||||
|
|
||||||
// Cull if line is entirely behind view
|
// Cull if line is entirely behind view
|
||||||
|
@ -267,7 +289,7 @@ LineSegmentRange PolyCull::GetSegmentRangeForLine(double x1, double y1, double x
|
||||||
if (ry1 < znear)
|
if (ry1 < znear)
|
||||||
t1 = clamp((znear - ry1) / (ry2 - ry1), 0.0, 1.0);
|
t1 = clamp((znear - ry1) / (ry2 - ry1), 0.0, 1.0);
|
||||||
if (ry2 < znear)
|
if (ry2 < znear)
|
||||||
t2 = clamp((znear - ry1) / (ry2 - ry1), 0.0, 1.0);
|
t2 = clamp((znear - ry2) / (ry2 - ry1), 0.0, 1.0);
|
||||||
if (t1 != 0.0 || t2 != 1.0)
|
if (t1 != 0.0 || t2 != 1.0)
|
||||||
{
|
{
|
||||||
double nx1 = rx1 * (1.0 - t1) + rx2 * t1;
|
double nx1 = rx1 * (1.0 - t1) + rx2 * t1;
|
||||||
|
|
|
@ -198,7 +198,7 @@ void RenderPolyScene::RenderLine(subsector_t *sub, seg_t *line, sector_t *fronts
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Tell automap we saw this
|
// Tell automap we saw this
|
||||||
if (!swrenderer::r_dontmaplines && line->linedef && segmentRange != LineSegmentRange::AlwaysVisible)
|
if (!PolyRenderer::Instance()->DontMapLines && line->linedef && segmentRange != LineSegmentRange::AlwaysVisible)
|
||||||
{
|
{
|
||||||
line->linedef->flags |= ML_MAPPED;
|
line->linedef->flags |= ML_MAPPED;
|
||||||
sub->flags |= SSECF_DRAWN;
|
sub->flags |= SSECF_DRAWN;
|
||||||
|
|
Loading…
Reference in a new issue