mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 07:11:54 +00:00
- Fixed: The "clip midtexture" flag did not work as expected for stacked sectors. This is
because it was an extension of the normal wall clipping process. Since a stacked sector above you doesn't draw a floor, it wouldn't clip any midtextures to the floor either. R_RenderMaskedSegRange() now checks this directly when rendering inside a stacked sector. SVN r3647 (trunk)
This commit is contained in:
parent
44932a6c56
commit
a8507d58bd
1 changed files with 42 additions and 0 deletions
|
@ -213,6 +213,25 @@ static void BlastMaskedColumn (void (*blastfunc)(const BYTE *pixels, const FText
|
||||||
spryscale += rw_scalestep;
|
spryscale += rw_scalestep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clip a midtexture to the floor and ceiling of the sector in front of it.
|
||||||
|
void ClipMidtex(int x1, int x2)
|
||||||
|
{
|
||||||
|
short most[MAXWIDTH];
|
||||||
|
|
||||||
|
WallMost(most, curline->frontsector->ceilingplane);
|
||||||
|
for (int i = x1; i <= x2; ++i)
|
||||||
|
{
|
||||||
|
if (wallupper[i] < most[i])
|
||||||
|
wallupper[i] = most[i];
|
||||||
|
}
|
||||||
|
WallMost(most, curline->frontsector->floorplane);
|
||||||
|
for (int i = x1; i <= x2; ++i)
|
||||||
|
{
|
||||||
|
if (walllower[i] > most[i])
|
||||||
|
walllower[i] = most[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void R_RenderFakeWallRange(drawseg_t *ds, int x1, int x2);
|
void R_RenderFakeWallRange(drawseg_t *ds, int x1, int x2);
|
||||||
|
|
||||||
void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2)
|
void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2)
|
||||||
|
@ -402,6 +421,18 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2)
|
||||||
if (walllower[i] > mfloorclip[i])
|
if (walllower[i] > mfloorclip[i])
|
||||||
walllower[i] = mfloorclip[i];
|
walllower[i] = mfloorclip[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CurrentSkybox)
|
||||||
|
{ // Midtex clipping doesn't work properly with skyboxes, since you're normally below the floor
|
||||||
|
// or above the ceiling, so the appropriate end won't be clipped automatically when adding
|
||||||
|
// this drawseg.
|
||||||
|
if ((curline->linedef->flags & ML_CLIP_MIDTEX) ||
|
||||||
|
(curline->sidedef->Flags & WALLF_CLIP_MIDTEX))
|
||||||
|
{
|
||||||
|
ClipMidtex(x1, x2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mfloorclip = walllower;
|
mfloorclip = walllower;
|
||||||
mceilingclip = wallupper;
|
mceilingclip = wallupper;
|
||||||
|
|
||||||
|
@ -454,6 +485,17 @@ void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2)
|
||||||
WallSX1 = ds->sx1;
|
WallSX1 = ds->sx1;
|
||||||
WallSX2 = ds->sx2;
|
WallSX2 = ds->sx2;
|
||||||
|
|
||||||
|
if (CurrentSkybox)
|
||||||
|
{ // Midtex clipping doesn't work properly with skyboxes, since you're normally below the floor
|
||||||
|
// or above the ceiling, so the appropriate end won't be clipped automatically when adding
|
||||||
|
// this drawseg.
|
||||||
|
if ((curline->linedef->flags & ML_CLIP_MIDTEX) ||
|
||||||
|
(curline->sidedef->Flags & WALLF_CLIP_MIDTEX))
|
||||||
|
{
|
||||||
|
ClipMidtex(x1, x2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (fake3D & FAKE3D_CLIPTOP)
|
if (fake3D & FAKE3D_CLIPTOP)
|
||||||
{
|
{
|
||||||
OWallMost (wallupper, sclipTop - viewz);
|
OWallMost (wallupper, sclipTop - viewz);
|
||||||
|
|
Loading…
Reference in a new issue