diff --git a/src/blitter/32bpp_anim.cpp b/src/blitter/32bpp_anim.cpp
index ef42ee0a34..42fbe3fe92 100644
--- a/src/blitter/32bpp_anim.cpp
+++ b/src/blitter/32bpp_anim.cpp
@@ -202,14 +202,6 @@ void Blitter_32bppAnim::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomL
 		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<uint8>(_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<BM_NORMAL>      (bp, zoom); return;
@@ -448,3 +440,14 @@ Blitter::PaletteAnimation Blitter_32bppAnim::UsePaletteAnimation()
 {
 	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<uint8>(_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
index 29f8a8d413..9063bf14ce 100644
--- 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 <BlitterMode mode> void Draw(const Blitter::BlitterParams *bp, ZoomLevel zoom);
 };
diff --git a/src/blitter/base.hpp b/src/blitter/base.hpp
index 9046bca5ef..278f3b7c8d 100644
--- 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
index d1717f9b1a..dac11071e2 100644
--- a/src/video/allegro_v.cpp
+++ b/src/video/allegro_v.cpp
@@ -221,6 +221,8 @@ static bool CreateMainSurface(uint w, uint h)
 	_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
index 0a0834686a..7589420b02 100644
--- 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
index 7c39bdba09..3168cf3e88 100644
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -251,6 +251,9 @@ static bool CreateMainSurface(uint w, uint h)
 	_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
index 57108f355c..15dc4c7eb1 100644
--- a/src/video/win32_v.cpp
+++ b/src/video/win32_v.cpp
@@ -160,6 +160,9 @@ static void ClientSizeChanged(int w, int h)
 		/* 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
 }