diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp --- a/src/blitter/32bpp_anim.cpp +++ b/src/blitter/32bpp_anim.cpp @@ -202,14 +202,6 @@ void Blitter_32bppAnim::Draw(Blitter::Bl return; } - if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) { - /* The size of the screen changed; we can assume we can wipe all data from our buffer */ - free(this->anim_buf); - this->anim_buf = CallocT(_screen.width * _screen.height); - this->anim_buf_width = _screen.width; - this->anim_buf_height = _screen.height; - } - switch (mode) { default: NOT_REACHED(); case BM_NORMAL: Draw (bp, zoom); return; @@ -448,3 +440,14 @@ Blitter::PaletteAnimation Blitter_32bppA { return Blitter::PALETTE_ANIMATION_BLITTER; } + +void Blitter_32bppAnim::PostResize() +{ + if (_screen.width != this->anim_buf_width || _screen.height != this->anim_buf_height) { + /* The size of the screen changed; we can assume we can wipe all data from our buffer */ + free(this->anim_buf); + this->anim_buf = CallocT(_screen.width * _screen.height); + this->anim_buf_width = _screen.width; + this->anim_buf_height = _screen.height; + } +} diff --git a/src/blitter/32bpp_anim.hpp b/src/blitter/32bpp_anim.hpp --- a/src/blitter/32bpp_anim.hpp +++ b/src/blitter/32bpp_anim.hpp @@ -42,6 +42,7 @@ public: /* virtual */ const char *GetName() { return "32bpp-anim"; } /* virtual */ int GetBytesPerPixel() { return 5; } + /* virtual */ void PostResize(); template void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom); }; diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp --- a/src/blitter/base.hpp +++ b/src/blitter/base.hpp @@ -200,6 +200,11 @@ public: */ virtual int GetBytesPerPixel() = 0; + /** + * Post resize event + */ + virtual void PostResize() { }; + virtual ~Blitter() { } }; diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -221,6 +221,8 @@ static bool CreateMainSurface(uint w, ui _cursor.pos.x = mouse_x; _cursor.pos.y = mouse_y; + BlitterFactoryBase::GetCurrentBlitter()->PostResize(); + InitPalette(); char caption[32]; diff --git a/src/video/cocoa/cocoa_v.mm b/src/video/cocoa/cocoa_v.mm --- a/src/video/cocoa/cocoa_v.mm +++ b/src/video/cocoa/cocoa_v.mm @@ -197,6 +197,8 @@ void QZ_GameSizeChanged() _screen.dst_ptr = _cocoa_subdriver->GetPixelBuffer(); _fullscreen = _cocoa_subdriver->IsFullscreen(); + BlitterFactoryBase::GetCurrentBlitter()->PostResize(); + GameSizeChanged(); } diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -251,6 +251,9 @@ static bool CreateMainSurface(uint w, ui _screen.pitch = newscreen->pitch / (bpp / 8); _screen.dst_ptr = newscreen->pixels; _sdl_screen = newscreen; + + BlitterFactoryBase::GetCurrentBlitter()->PostResize(); + InitPalette(); snprintf(caption, sizeof(caption), "OpenTTD %s", _openttd_revision); diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -160,6 +160,9 @@ static void ClientSizeChanged(int w, int /* mark all palette colors dirty */ _pal_first_dirty = 0; _pal_count_dirty = 256; + + BlitterFactoryBase::GetCurrentBlitter()->PostResize(); + GameSizeChanged(); /* redraw screen */ @@ -302,6 +305,9 @@ static bool MakeWindow(bool full_screen) ShowWindow(_wnd.main_wnd, showstyle); } } + + BlitterFactoryBase::GetCurrentBlitter()->PostResize(); + GameSizeChanged(); // invalidate all windows, force redraw return true; // the request succedded }