summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/rendlay.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-10-19 18:13:26 +1100
committer Vas Crabb <vas@vastheman.com>2020-10-19 18:13:26 +1100
commite90403a49926735f201d3438c30815fe8bb34b6d (patch)
treec8766f206f7095e1755c1a344dadbe3ac6e3df4e /src/emu/rendlay.cpp
parenta24c699d06a525b9bfe4bd73ac2864d42d4d937c (diff)
emu/rendlay.cpp: Fixed one more place where disk drawing had error accumulation issues.
Diffstat (limited to 'src/emu/rendlay.cpp')
-rw-r--r--src/emu/rendlay.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/emu/rendlay.cpp b/src/emu/rendlay.cpp
index 833d9e4e86d..7215061df15 100644
--- a/src/emu/rendlay.cpp
+++ b/src/emu/rendlay.cpp
@@ -41,7 +41,7 @@
#define LOG_DISK_DRAW (1U << 3)
#define LOG_IMAGE_LOAD (1U << 4)
-//#define VERBOSE (LOG_GROUP_BOUNDS_RESOLUTION | LOG_INTERACTIVE_ITEMS | LOG_IMAGE_LOAD)
+//#define VERBOSE (LOG_GROUP_BOUNDS_RESOLUTION | LOG_INTERACTIVE_ITEMS | LOG_DISK_DRAW | LOG_IMAGE_LOAD)
#define LOG_OUTPUT_FUNC osd_printf_verbose
#include "logmacro.h"
@@ -2167,6 +2167,7 @@ public:
// row spanning the axis
if ((maxy > y) && (float(y) < ycenter))
{
+ float const xval0 = xval1;
float const l0 = l1;
float const r0 = r1;
ycoord1 = float(y + 1) - ycenter;
@@ -2191,19 +2192,19 @@ public:
if (float(x + 1) <= l0)
val += integral((xcenter - float(x + 1)) / xradius, (std::min)((xcenter - float(x)) / xradius, 1.0F));
else if (float(x) <= l0)
- val += integral((xcenter - l0) / xradius, (std::min)((xcenter - float(x)) / xradius, 1.0F));
+ val += integral(xval0, (std::min)((xcenter - float(x)) / xradius, 1.0F));
else if (float(x) >= r0)
val += integral((float(x) - xcenter) / xradius, (std::min)((float(x + 1) - xcenter) / xradius, 1.0F));
else if (float(x + 1) >= r0)
- val += integral((r0 - xcenter) / xradius, (std::min)((float(x + 1) - xcenter) / xradius, 1.0F));
+ val += integral(xval0, (std::min)((float(x + 1) - xcenter) / xradius, 1.0F));
if (float(x + 1) <= l1)
val += integral((xcenter - float(x + 1)) / xradius, (std::min)((xcenter - float(x)) / xradius, 1.0F));
else if (float(x) <= l1)
- val += integral((xcenter - l1) / xradius, (std::min)((xcenter - float(x)) / xradius, 1.0F));
+ val += integral(xval1, (std::min)((xcenter - float(x)) / xradius, 1.0F));
else if (float(x) >= r1)
val += integral((float(x) - xcenter) / xradius, (std::min)((float(x + 1) - xcenter) / xradius, 1.0F));
else if (float(x + 1) >= r1)
- val += integral((r1 - xcenter) / xradius, (std::min)((float(x + 1) - xcenter) / xradius, 1.0F));
+ val += integral(xval1, (std::min)((float(x + 1) - xcenter) / xradius, 1.0F));
val *= scale;
val += (std::max)(((std::min)(float(x + 1), r0) - (std::max)(float(x), l0)), 0.0F) * (ycenter - float(y));
val += (std::max)(((std::min)(float(x + 1), r1) - (std::max)(float(x), l1)), 0.0F) * (float(y + 1) - ycenter);