@@ -1779,38 +1779,12 @@ void ViewportDoDraw(const Viewport *vp,
_vd.tile_sprites_to_draw.clear();
_vd.parent_sprites_to_draw.clear();
_vd.parent_sprites_to_sort.clear();
_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);
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;
if (left >= vp->left + vp->width) return;
@@ -1819,13 +1793,18 @@ static inline void ViewportDraw(const Vi
if (top >= vp->top + vp->height) return;
if (top < vp->top) top = vp->top;
if (bottom > vp->top + vp->height) bottom = vp->top + vp->height;
ViewportDrawChk(vp, left, top, right, bottom);
* Draw the viewport of this window.
void Window::DrawViewport() const
Status change: