From 8311a18282a90fbc671cf3dccf40a780f4c05d03 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sat, 22 Jul 2017 12:29:46 +0200 Subject: [PATCH] - Fix plane pixel center sampling bug --- src/swrenderer/plane/r_flatplane.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/swrenderer/plane/r_flatplane.cpp b/src/swrenderer/plane/r_flatplane.cpp index be0546d7f..513ce9ccc 100644 --- a/src/swrenderer/plane/r_flatplane.cpp +++ b/src/swrenderer/plane/r_flatplane.cpp @@ -108,7 +108,7 @@ namespace swrenderer planeang += M_PI / 2; double cosine = cos(planeang), sine = -sin(planeang); - x = pl->right - viewport->CenterX - 0.5; + x = pl->right - viewport->CenterX + 0.5; rightxfrac = _xscale * (cosine + x * xstep); rightyfrac = _yscale * (sine + x * ystep); x = pl->left - viewport->CenterX + 0.5; @@ -117,8 +117,16 @@ namespace swrenderer basexfrac = leftxfrac; baseyfrac = leftyfrac; - xstepscale = (rightxfrac - leftxfrac) / (pl->right - pl->left + 1); - ystepscale = (rightyfrac - leftyfrac) / (pl->right - pl->left + 1); + if (pl->left != pl->right) + { + xstepscale = (rightxfrac - leftxfrac) / (pl->right - pl->left); + ystepscale = (rightyfrac - leftyfrac) / (pl->right - pl->left); + } + else + { + xstepscale = 0; + ystepscale = 0; + } minx = pl->left; @@ -166,8 +174,8 @@ namespace swrenderer auto viewport = Thread->Viewport.get(); - double curxfrac = basexfrac + xstepscale * (x1 + 0.5 - minx); - double curyfrac = baseyfrac + ystepscale * (x1 + 0.5 - minx); + double curxfrac = basexfrac + xstepscale * (x1 - minx); + double curyfrac = baseyfrac + ystepscale * (x1 - minx); double distance = viewport->PlaneDepth(y, planeheight);