mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-13 07:10:57 +00:00
Feature #7962: Improve rendering of large viewports
This commit is contained in:
parent
5ca8a0bda9
commit
e82333cf77
@ -1782,32 +1782,6 @@ void ViewportDoDraw(const Viewport *vp, int left, int top, int right, int bottom
|
||||
_vd.child_screen_sprites_to_draw.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure we don't draw a too big area at a time.
|
||||
* If we do, the sprite memory will overflow.
|
||||
*/
|
||||
static void ViewportDrawChk(const Viewport *vp, int left, int top, int right, int bottom)
|
||||
{
|
||||
if ((int64)ScaleByZoom(bottom - top, vp->zoom) * (int64)ScaleByZoom(right - left, vp->zoom) > (int64)(180000 * ZOOM_LVL_BASE * ZOOM_LVL_BASE)) {
|
||||
if ((bottom - top) > (right - left)) {
|
||||
int t = (top + bottom) >> 1;
|
||||
ViewportDrawChk(vp, left, top, right, t);
|
||||
ViewportDrawChk(vp, left, t, right, bottom);
|
||||
} else {
|
||||
int t = (left + right) >> 1;
|
||||
ViewportDrawChk(vp, left, top, t, bottom);
|
||||
ViewportDrawChk(vp, t, top, right, bottom);
|
||||
}
|
||||
} else {
|
||||
ViewportDoDraw(vp,
|
||||
ScaleByZoom(left - vp->left, vp->zoom) + vp->virtual_left,
|
||||
ScaleByZoom(top - vp->top, vp->zoom) + vp->virtual_top,
|
||||
ScaleByZoom(right - vp->left, vp->zoom) + vp->virtual_left,
|
||||
ScaleByZoom(bottom - vp->top, vp->zoom) + vp->virtual_top
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
static inline void ViewportDraw(const Viewport *vp, int left, int top, int right, int bottom)
|
||||
{
|
||||
if (right <= vp->left || bottom <= vp->top) return;
|
||||
@ -1822,7 +1796,12 @@ static inline void ViewportDraw(const Viewport *vp, int left, int top, int right
|
||||
if (top < vp->top) top = vp->top;
|
||||
if (bottom > vp->top + vp->height) bottom = vp->top + vp->height;
|
||||
|
||||
ViewportDrawChk(vp, left, top, right, bottom);
|
||||
ViewportDoDraw(vp,
|
||||
ScaleByZoom(left - vp->left, vp->zoom) + vp->virtual_left,
|
||||
ScaleByZoom(top - vp->top, vp->zoom) + vp->virtual_top,
|
||||
ScaleByZoom(right - vp->left, vp->zoom) + vp->virtual_left,
|
||||
ScaleByZoom(bottom - vp->top, vp->zoom) + vp->virtual_top
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user