changeset 14005:9205f5128efc draft

(svn r18547) -Fix [FS#3388]: missing thread synchronisation when changing the resolution for SDL via the in game menu
author rubidium <rubidium@openttd.org>
date Sat, 19 Dec 2009 19:29:01 +0000
parents 96fa151f99f9
children 777e09ee71d1
files src/video/sdl_v.cpp
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/video/sdl_v.cpp
+++ b/src/video/sdl_v.cpp
@@ -469,7 +469,7 @@
 		case SDL_VIDEORESIZE: {
 			int w = max(ev.resize.w, 64);
 			int h = max(ev.resize.h, 64);
-			ChangeResInGame(w, h);
+			CreateMainSurface(w, h);
 			break;
 		}
 	}
@@ -627,14 +627,17 @@
 
 bool VideoDriver_SDL::ChangeResolution(int w, int h)
 {
-	return CreateMainSurface(w, h);
+	if (_draw_threaded) _draw_mutex->BeginCritical();
+	bool ret = CreateMainSurface(w, h);
+	if (_draw_threaded) _draw_mutex->EndCritical();
+	return ret;
 }
 
 bool VideoDriver_SDL::ToggleFullscreen(bool fullscreen)
 {
 	_fullscreen = fullscreen;
 	GetVideoModes(); // get the list of available video modes
-	if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution.width, _cur_resolution.height)) {
+	if (_num_resolutions == 0 || !CreateMainSurface(_cur_resolution.width, _cur_resolution.height)) {
 		/* switching resolution failed, put back full_screen to original status */
 		_fullscreen ^= true;
 		return false;