1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-19 12:39:11 +00:00

Fix: Off-by-one in Blitter::DrawLineGeneric

This commit is contained in:
Jonathan G Rennison
2025-08-17 13:33:02 +01:00
committed by Peter Nelson
parent 2d60b9d7b9
commit 80f72d3722

View File

@@ -90,13 +90,14 @@ void Blitter::DrawLineGeneric(int x1, int y1, int x2, int y2, int screen_width,
if (x1 < 0) { if (x1 < 0) {
dash_count = (-x1) % (dash + gap); dash_count = (-x1) % (dash + gap);
auto adjust_frac = [&](int64_t frac, int &y_bound) -> int { auto adjust_frac = [&](int64_t frac, int &y_bound) -> int {
frac -= ((int64_t) dy) * ((int64_t) x1); frac -= ((int64_t) dy) * ((int64_t) (x1 + 1));
if (frac >= 0) { if (frac >= 0) {
int quotient = frac / dx; int quotient = frac / dx;
int remainder = frac % dx; int remainder = frac % dx;
y_bound += (1 + quotient) * stepy; y_bound += (1 + quotient) * stepy;
frac = remainder - dx; frac = remainder - dx;
} }
frac += dy;
return frac; return frac;
}; };
frac_low = adjust_frac(frac_low, y_low); frac_low = adjust_frac(frac_low, y_low);
@@ -152,13 +153,14 @@ void Blitter::DrawLineGeneric(int x1, int y1, int x2, int y2, int screen_width,
if (y1 < 0) { if (y1 < 0) {
dash_count = (-y1) % (dash + gap); dash_count = (-y1) % (dash + gap);
auto adjust_frac = [&](int64_t frac, int &x_bound) -> int { auto adjust_frac = [&](int64_t frac, int &x_bound) -> int {
frac -= ((int64_t) dx) * ((int64_t) y1); frac -= ((int64_t) dx) * ((int64_t) (y1 + 1));
if (frac >= 0) { if (frac >= 0) {
int quotient = frac / dy; int quotient = frac / dy;
int remainder = frac % dy; int remainder = frac % dy;
x_bound += (1 + quotient) * stepx; x_bound += (1 + quotient) * stepx;
frac = remainder - dy; frac = remainder - dy;
} }
frac += dx;
return frac; return frac;
}; };
frac_low = adjust_frac(frac_low, x_low); frac_low = adjust_frac(frac_low, x_low);