Mercurial > sdl-ios-xcode
diff src/video/windib/SDL_dibvideo.c @ 4143:73e7e7f5b5a1 SDL-1.2
Don't recreate the GL content in windib target if SDL_SetVideoMode() is being
called in response to a window resize event...prevents loss of GL state and
objects.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Wed, 12 Mar 2008 22:01:48 +0000 |
parents | 568c9b3c0167 |
children | a1b03ba2fcd0 |
line wrap: on
line diff
--- a/src/video/windib/SDL_dibvideo.c Fri Feb 29 14:01:45 2008 +0000 +++ b/src/video/windib/SDL_dibvideo.c Wed Mar 12 22:01:48 2008 +0000 @@ -512,6 +512,36 @@ int x, y; Uint32 Rmask, Gmask, Bmask; + /* + * Special case for OpenGL windows...since the app needs to call + * SDL_SetVideoMode() in response to resize events to continue to + * function, but WGL handles the GL context details behind the scenes, + * there's no sense in tearing the context down just to rebuild it + * to what it already was...tearing it down sacrifices your GL state + * and uploaded textures. So if we're requesting the same video mode + * attributes and the width/height matches the physical window, just + * return immediately. + */ + if ( (SDL_Window != NULL) && + (current != NULL) && + (current->flags == flags) && + (current->format->BitsPerPixel == bpp) && + ((flags & SDL_FULLSCREEN) == 0) ) { /* probably not safe for fs */ + int curwidth, curheight; + RECT size; + + /* Get the current position of our window */ + GetClientRect(SDL_Window, &size); + + curwidth = (size.right - size.left); + curheight = (size.bottom - size.top); + if ((width == curwidth) && (height == curheight)) { + current->w = width; + current->h = height; + return current; /* we're already good to go. */ + } + } + prev_flags = current->flags; /* Clean up any GL context that may be hanging around */