Navigation Menu

Skip to content

Commit

Permalink
Don't recreate the GL content in windib target if SDL_SetVideoMode() …
Browse files Browse the repository at this point in the history
…is being

 called in response to a window resize event...prevents loss of GL state and
 objects.
  • Loading branch information
icculus committed Mar 12, 2008
1 parent a3f0f38 commit 16e9d32
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/video/windib/SDL_dibvideo.c
Expand Up @@ -512,6 +512,36 @@ SDL_Surface *DIB_SetVideoMode(_THIS, SDL_Surface *current,
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 */
Expand Down

0 comments on commit 16e9d32

Please sign in to comment.