mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-06 11:28:15 +00:00
Fixed Cohen-Sutherland out code computation for float line intersection
Fixes https://github.com/libsdl-org/SDL/issues/10866
This commit is contained in:
@@ -297,12 +297,12 @@ static int COMPUTEOUTCODE(const RECTTYPE *rect, SCALARTYPE x, SCALARTYPE y)
|
|||||||
int code = 0;
|
int code = 0;
|
||||||
if (y < rect->y) {
|
if (y < rect->y) {
|
||||||
code |= CODE_TOP;
|
code |= CODE_TOP;
|
||||||
} else if (y >= rect->y + rect->h) {
|
} else if (y > (rect->y + rect->h - ENCLOSEPOINTS_EPSILON)) {
|
||||||
code |= CODE_BOTTOM;
|
code |= CODE_BOTTOM;
|
||||||
}
|
}
|
||||||
if (x < rect->x) {
|
if (x < rect->x) {
|
||||||
code |= CODE_LEFT;
|
code |= CODE_LEFT;
|
||||||
} else if (x >= rect->x + rect->w) {
|
} else if (x > (rect->x + rect->w - ENCLOSEPOINTS_EPSILON)) {
|
||||||
code |= CODE_RIGHT;
|
code |= CODE_RIGHT;
|
||||||
}
|
}
|
||||||
return code;
|
return code;
|
||||||
|
@@ -93,6 +93,17 @@ static int SDLCALL rect_testIntersectRectAndLineFloat(void *arg)
|
|||||||
intersected = SDL_GetRectAndLineIntersectionFloat(&rect, &x1, &y1, &x2, &y2);
|
intersected = SDL_GetRectAndLineIntersectionFloat(&rect, &x1, &y1, &x2, &y2);
|
||||||
validateIntersectRectAndLineFloatResults(intersected, true, &rect, x1, y1, x2, y2, 2.5f, 6.0f, 2.75f, 6.0f);
|
validateIntersectRectAndLineFloatResults(intersected, true, &rect, x1, y1, x2, y2, 2.5f, 6.0f, 2.75f, 6.0f);
|
||||||
|
|
||||||
|
x1 = 456.0f;
|
||||||
|
y1 = 592.0f;
|
||||||
|
x2 = 160.0f;
|
||||||
|
y2 = 670.0f;
|
||||||
|
rect.x = 300.0f;
|
||||||
|
rect.y = 592.0f;
|
||||||
|
rect.w = 64.0f;
|
||||||
|
rect.h = 64.0f;
|
||||||
|
intersected = SDL_GetRectAndLineIntersectionFloat(&rect, &x1, &y1, &x2, &y2);
|
||||||
|
validateIntersectRectAndLineFloatResults(intersected, true, &rect, x1, y1, x2, y2, 364.0f, 616.243225f, 300.0f, 633.108093f);
|
||||||
|
|
||||||
return TEST_COMPLETED;
|
return TEST_COMPLETED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user