Add pad checks for visplanes; invalidate invalid columns from visplanes (visplane renderer and column renderers don't speak exactly the same language).

The visplane portal top boundary offset has been restored since all known bugs involving it have been fixed.
This commit is contained in:
Nev3r 2019-06-06 11:26:13 +02:00
parent 5284817259
commit 0d77e8afaf
1 changed files with 13 additions and 1 deletions

View File

@ -200,7 +200,14 @@ static void Portal_ClipVisplane (const visplane_t* plane, portal_t* portal)
for (i = 0; i < end - start; i++)
{
portal->ceilingclip[i] = plane->top[i + start];
// Invalid column.
if (plane->top[i + start] == 65535)
{
portal->ceilingclip[i] = -1;
portal->floorclip[i] = -1;
continue;
}
portal->ceilingclip[i] = plane->top[i + start] - 1;
portal->floorclip[i] = plane->bottom[i + start] + 1;
portal->frontscale[i] = INT32_MAX;
}
@ -220,6 +227,11 @@ void Portal_AddSkybox (const visplane_t* plane)
mapheader_t *mh;
portal_t* portal;
// Visplanes have 1-px pads on their sides (extra columns).
// Trim them, else it may render out of bounds.
if (end > viewwidth)
end = viewwidth;
if (!(start < end))
return;