From 57a9f56e2cba50249ee8a96533c8baed47814f92 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Fri, 10 Dec 2010 23:56:32 +0000 Subject: Fix memory leak when dynamically resizing window in true color video modes. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 2215 --- src/i_video.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/i_video.c') diff --git a/src/i_video.c b/src/i_video.c index 488c08a0..ad4d7f39 100644 --- a/src/i_video.c +++ b/src/i_video.c @@ -97,7 +97,7 @@ static SDL_Surface *screen; // This is used when we are rendering in 32-bit screen mode. // When in a real 8-bit screen mode, screenbuffer == screen. -static SDL_Surface *screenbuffer; +static SDL_Surface *screenbuffer = NULL; // palette @@ -1646,6 +1646,14 @@ static void SetVideoMode(screen_mode_t *mode, int w, int h) doompal = W_CacheLumpName(DEH_String("PLAYPAL"), PU_CACHE); + // If we are already running and in a true color mode, we need + // to free the screenbuffer surface before setting the new mode. + + if (screenbuffer != NULL && screen != screenbuffer) + { + SDL_FreeSurface(screenbuffer); + } + // Generate lookup tables before setting the video mode. if (mode != NULL && mode->InitMode != NULL) -- cgit v1.2.3