From 45d3df9df199b64c96a28df2acbc222765865a98 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Fri, 28 Dec 2018 01:13:58 +0100 Subject: [PATCH] - remove pointless duplication of FWallCoords member variables --- src/swrenderer/line/r_line.cpp | 11 +------- src/swrenderer/line/r_renderdrawsegment.cpp | 31 ++++++++------------- src/swrenderer/scene/r_portal.cpp | 6 ++-- src/swrenderer/segments/r_drawsegment.cpp | 12 ++++---- src/swrenderer/segments/r_drawsegment.h | 5 +--- src/swrenderer/things/r_particle.cpp | 4 ++- src/swrenderer/things/r_visiblesprite.cpp | 8 +++--- 7 files changed, 29 insertions(+), 48 deletions(-) diff --git a/src/swrenderer/line/r_line.cpp b/src/swrenderer/line/r_line.cpp index fba3868bd..528da5d6e 100644 --- a/src/swrenderer/line/r_line.cpp +++ b/src/swrenderer/line/r_line.cpp @@ -328,17 +328,8 @@ namespace swrenderer Thread->DrawSegments->Push(draw_segment); draw_segment->CurrentPortalUniq = renderportal->CurrentPortalUniq; - draw_segment->sx1 = WallC.sx1; - draw_segment->sx2 = WallC.sx2; - draw_segment->sz1 = WallC.sz1; - draw_segment->sz2 = WallC.sz2; - draw_segment->cx = WallC.tleft.X; - draw_segment->cy = WallC.tleft.Y; - draw_segment->cdx = WallC.tright.X - WallC.tleft.X; - draw_segment->cdy = WallC.tright.Y - WallC.tleft.Y; + draw_segment->WallC = WallC; draw_segment->tmapvals = WallT; - draw_segment->siz1 = 1 / WallC.sz1; - draw_segment->siz2 = 1 / WallC.sz2; draw_segment->x1 = start; draw_segment->x2 = stop; draw_segment->curline = mLineSegment; diff --git a/src/swrenderer/line/r_renderdrawsegment.cpp b/src/swrenderer/line/r_renderdrawsegment.cpp index 8b8dd361f..4f404dcb2 100644 --- a/src/swrenderer/line/r_renderdrawsegment.cpp +++ b/src/swrenderer/line/r_renderdrawsegment.cpp @@ -219,12 +219,12 @@ namespace swrenderer } // [RH] Don't bother drawing segs that are completely offscreen - if (viewport->globaldclip * ds->sz1 < -textop && viewport->globaldclip * ds->sz2 < -textop) + if (viewport->globaldclip * ds->WallC.sz1 < -textop && viewport->globaldclip * ds->WallC.sz2 < -textop) { // Texture top is below the bottom of the screen return false; } - if (viewport->globaluclip * ds->sz1 > texheight - textop && viewport->globaluclip * ds->sz2 > texheight - textop) + if (viewport->globaluclip * ds->WallC.sz1 > texheight - textop && viewport->globaluclip * ds->WallC.sz2 > texheight - textop) { // Texture bottom is above the top of the screen return false; } @@ -238,10 +238,10 @@ namespace swrenderer return true; } - WallC.sz1 = ds->sz1; - WallC.sz2 = ds->sz2; - WallC.sx1 = ds->sx1; - WallC.sx2 = ds->sx2; + WallC.sz1 = ds->WallC.sz1; + WallC.sz2 = ds->WallC.sz2; + WallC.sx1 = ds->WallC.sx1; + WallC.sx2 = ds->WallC.sx2; // Unclipped vanilla Doom range for the wall. Relies on ceiling/floor clip to clamp the wall in range. double ceilZ = textop; @@ -345,10 +345,10 @@ namespace swrenderer texturemid = (texturemid - Thread->Viewport->viewpoint.Pos.Z) * MaskedScaleY + rowoffset; } - WallC.sz1 = ds->sz1; - WallC.sz2 = ds->sz2; - WallC.sx1 = ds->sx1; - WallC.sx2 = ds->sx2; + WallC.sz1 = ds->WallC.sz1; + WallC.sz2 = ds->WallC.sz2; + WallC.sx1 = ds->WallC.sx1; + WallC.sx2 = ds->WallC.sx2; if (clip3d->CurrentSkybox) { // Midtex clipping doesn't work properly with skyboxes, since you're normally below the floor @@ -462,14 +462,7 @@ namespace swrenderer texturemid += rowoffset; } - WallC.sz1 = ds->sz1; - WallC.sz2 = ds->sz2; - WallC.sx1 = ds->sx1; - WallC.sx2 = ds->sx2; - WallC.tleft.X = ds->cx; - WallC.tleft.Y = ds->cy; - WallC.tright.X = ds->cx + ds->cdx; - WallC.tright.Y = ds->cy + ds->cdy; + WallC = ds->WallC; WallT = ds->tmapvals; Clip3DFloors *clip3d = Thread->Clip3D.get(); @@ -488,7 +481,7 @@ namespace swrenderer } ProjectedWallTexcoords walltexcoords; - walltexcoords.ProjectPos(Thread->Viewport.get(), curline->sidedef->TexelLength*xscale, ds->sx1, ds->sx2, WallT); + walltexcoords.ProjectPos(Thread->Viewport.get(), curline->sidedef->TexelLength*xscale, ds->WallC.sx1, ds->WallC.sx2, WallT); double top, bot; GetMaskedWallTopBottom(ds, top, bot); diff --git a/src/swrenderer/scene/r_portal.cpp b/src/swrenderer/scene/r_portal.cpp index a13df7ebb..61fc4fc3a 100644 --- a/src/swrenderer/scene/r_portal.cpp +++ b/src/swrenderer/scene/r_portal.cpp @@ -206,10 +206,8 @@ namespace swrenderer // Create a drawseg to clip sprites to the sky plane DrawSegment *draw_segment = Thread->FrameMemory->NewObject(); draw_segment->CurrentPortalUniq = CurrentPortalUniq; - draw_segment->siz1 = INT_MAX; - draw_segment->siz2 = INT_MAX; - draw_segment->sz1 = 0; - draw_segment->sz2 = 0; + draw_segment->WallC.sz1 = 0; + draw_segment->WallC.sz2 = 0; draw_segment->x1 = pl->left; draw_segment->x2 = pl->right; draw_segment->silhouette = SIL_BOTH; diff --git a/src/swrenderer/segments/r_drawsegment.cpp b/src/swrenderer/segments/r_drawsegment.cpp index 76b13df97..a613ce60f 100644 --- a/src/swrenderer/segments/r_drawsegment.cpp +++ b/src/swrenderer/segments/r_drawsegment.cpp @@ -107,18 +107,18 @@ namespace swrenderer group.EndIndex = MIN(index + groupSize, SegmentsCount()); group.x1 = ds->x1; group.x2 = ds->x2; - group.neardepth = MIN(ds->sz1, ds->sz2); - group.fardepth = MAX(ds->sz1, ds->sz2); + group.neardepth = MIN(ds->WallC.sz1, ds->WallC.sz2); + group.fardepth = MAX(ds->WallC.sz1, ds->WallC.sz2); for (unsigned int groupIndex = group.BeginIndex + 1; groupIndex < group.EndIndex; groupIndex++) { ds = Segment(groupIndex); group.x1 = MIN(group.x1, ds->x1); group.x2 = MAX(group.x2, ds->x2); - group.neardepth = MIN(group.neardepth, ds->sz1); - group.neardepth = MIN(group.neardepth, ds->sz2); - group.fardepth = MAX(ds->sz1, group.fardepth); - group.fardepth = MAX(ds->sz2, group.fardepth); + group.neardepth = MIN(group.neardepth, ds->WallC.sz1); + group.neardepth = MIN(group.neardepth, ds->WallC.sz2); + group.fardepth = MAX(ds->WallC.sz1, group.fardepth); + group.fardepth = MAX(ds->WallC.sz2, group.fardepth); } for (int x = group.x1; x < group.x2; x++) diff --git a/src/swrenderer/segments/r_drawsegment.h b/src/swrenderer/segments/r_drawsegment.h index d489bfcda..85e34768c 100644 --- a/src/swrenderer/segments/r_drawsegment.h +++ b/src/swrenderer/segments/r_drawsegment.h @@ -31,10 +31,7 @@ namespace swrenderer float light, lightstep; float iscale, iscalestep; short x1, x2; // Same as sx1 and sx2, but clipped to the drawseg - short sx1, sx2; // left, right of parent seg on screen - float sz1, sz2; // z for left, right of parent seg on screen - float siz1, siz2; // 1/z for left, right of parent seg on screen - float cx, cy, cdx, cdy; + FWallCoords WallC; float yscale; uint8_t silhouette = 0; // 0=none, 1=bottom, 2=top, 3=both bool bFogBoundary = false; diff --git a/src/swrenderer/things/r_particle.cpp b/src/swrenderer/things/r_particle.cpp index c3b53fcf1..07d460b42 100644 --- a/src/swrenderer/things/r_particle.cpp +++ b/src/swrenderer/things/r_particle.cpp @@ -291,7 +291,9 @@ namespace swrenderer { continue; } - if ((ds->siz2 - ds->siz1) * ((x2 + x1) / 2 - ds->sx1) / (ds->sx2 - ds->sx1) + ds->siz1 < idepth) + float siz1 = 1 / ds->WallC.sz1; + float siz2 = 1 / ds->WallC.sz2; + if ((siz2 - siz1) * ((x2 + x1) / 2 - ds->WallC.sx1) / (ds->WallC.sx2 - ds->WallC.sx1) + siz1 < idepth) { // [ZZ] only draw stuff that's inside the same portal as the particle, other portals will care for themselves if (ds->CurrentPortalUniq == CurrentPortalUniq) diff --git a/src/swrenderer/things/r_visiblesprite.cpp b/src/swrenderer/things/r_visiblesprite.cpp index 7145e2b1e..adf058875 100644 --- a/src/swrenderer/things/r_visiblesprite.cpp +++ b/src/swrenderer/things/r_visiblesprite.cpp @@ -340,8 +340,8 @@ namespace swrenderer continue; } - float neardepth = MIN(ds->sz1, ds->sz2); - float fardepth = MAX(ds->sz1, ds->sz2); + float neardepth = MIN(ds->WallC.sz1, ds->WallC.sz2); + float fardepth = MAX(ds->WallC.sz1, ds->WallC.sz2); // Check if sprite is in front of draw seg: if ((!spr->IsWallSprite() && neardepth > spr->depth) || ((spr->IsWallSprite() || fardepth > spr->depth) && @@ -414,8 +414,8 @@ namespace swrenderer int r1 = MAX(ds->x1, x1); int r2 = MIN(ds->x2, x2); - float neardepth = MIN(ds->sz1, ds->sz2); - float fardepth = MAX(ds->sz1, ds->sz2); + float neardepth = MIN(ds->WallC.sz1, ds->WallC.sz2); + float fardepth = MAX(ds->WallC.sz1, ds->WallC.sz2); // Check if sprite is in front of draw seg: if ((!spr->IsWallSprite() && neardepth > spr->depth) || ((spr->IsWallSprite() || fardepth > spr->depth) &&