render: Clip bresenham lines against a real viewport thing.

You can't just use renderer->view->viewport, because it might be (0,0), -1x-1.

I _think_ this is more right?

Fixes #8609.
This commit is contained in:
Ryan C. Gordon
2023-11-25 01:51:35 -05:00
parent 4a40a272bd
commit 42a8139fd6

View File

@@ -2755,11 +2755,13 @@ static int RenderLineBresenham(SDL_Renderer *renderer, int x1, int y1, int x2, i
int retval; int retval;
SDL_bool isstack; SDL_bool isstack;
SDL_FPoint *points; SDL_FPoint *points;
SDL_Rect viewport;
/* the backend might clip this further to the clipping rect, but we /* the backend might clip this further to the clipping rect, but we
just want a basic safety against generating millions of points for just want a basic safety against generating millions of points for
massive lines. */ massive lines. */
if (!SDL_GetRectAndLineIntersection(&renderer->view->viewport, &x1, &y1, &x2, &y2)) { GetRenderViewportInPixels(renderer, &viewport);
if (!SDL_GetRectAndLineIntersection(&viewport, &x1, &y1, &x2, &y2)) {
return 0; return 0;
} }