Fixed bug 1364 - Fullscreen OpenGL fails in OS 10.7 if deployment target is less than 10.7

amaranth72@gmail.com 2012-01-07 01:28:40 PST
Using the latest Hg tip of SDL 1.2, SDL_SetVideoMode will fail with the
SDL_OPENGL and SDL_FULLSCREEN flags set if the computer is running Lion and the
build deployment target version is lower than 10.7.

The issue seems to be at line 840 of SDL_QuartzVideo.m, where it checks if the
minimum required version is less than 10.7. If that condition is true, then it
uses the pre-Lion fullscreen method, even though the condition doesn't seem to
say anything about whether the computer is currently running Lion or not.

I tried doing this inside the #if conditional check (pseudocode): if (isLion) {
do new Lion stuff } else { do old stuff } , and that seemed to work fine. An
"invalid fullscreen drawable" warning was still around even though fullscreen
worked with the new addition, but I think that's because Lion wants SDL to add
a new Spaces thing when it goes fullscreen.

--HG--
branch : SDL-1.2
This commit is contained in:
Sam Lantinga 2012-01-07 13:52:10 -05:00
parent 7193f7f024
commit d3cee5e03b

View file

@ -837,8 +837,12 @@ static SDL_Surface* QZ_SetVideoFullScreen (_THIS, SDL_Surface *current, int widt
/* Apparently Lion checks some version flag set by the linker /* Apparently Lion checks some version flag set by the linker
and changes API behavior. Annoying. */ and changes API behavior. Annoying. */
#if (MAC_OS_X_VERSION_MIN_REQUIRED < 1070) if ( isLion ) {
{ [ qz_window setLevel:CGShieldingWindowLevel() ];
[ gl_context setView: window_view ];
[ gl_context setFullScreen ];
[ gl_context update ];
} else {
CGLError err; CGLError err;
CGLContextObj ctx; CGLContextObj ctx;
@ -850,13 +854,7 @@ static SDL_Surface* QZ_SetVideoFullScreen (_THIS, SDL_Surface *current, int widt
SDL_SetError ("Error setting OpenGL fullscreen: %s", CGLErrorString(err)); SDL_SetError ("Error setting OpenGL fullscreen: %s", CGLErrorString(err));
goto ERR_NO_GL; goto ERR_NO_GL;
} }
} }
#else
[ qz_window setLevel:CGShieldingWindowLevel() ];
[ gl_context setView: window_view ];
[ gl_context setFullScreen ];
[ gl_context update ];
#endif
[ window_view release ]; [ window_view release ];
[ gl_context makeCurrentContext]; [ gl_context makeCurrentContext];