diff --git a/rc.c b/rc.c index e2bfa82..ce2fd72 100644 --- a/rc.c +++ b/rc.c @@ -11013,6 +11013,7 @@ void togglepause(void) { } void togglefullscreen(void) { + int vidargs; // close window //SDL_Quit(); @@ -11023,10 +11024,17 @@ void togglefullscreen(void) { fullscreen = B_TRUE; } + vidargs = SDL_SWSURFACE|(fullscreen?SDL_FULLSCREEN:0); #ifdef OPENGL - realscreen=SDL_SetVideoMode(realscreen->w,realscreen->h,realscreen->format->BitsPerPixel,SDL_SWSURFACE|SDL_OPENGL|(fullscreen?SDL_FULLSCREEN:0)); + vidargs |= SDL_OPENGL; + #endif + + #ifdef OPENGL + preinitgl(); + realscreen=SDL_SetVideoMode(realscreen->w,realscreen->h,realscreen->format->BitsPerPixel,vidargs); + initgl(); #else - screen=SDL_SetVideoMode(screen->w,screen->h,screen->format->BitsPerPixel,SDL_SWSURFACE|(screen->flags&SDL_FULLSCREEN?0:SDL_FULLSCREEN)); + screen=SDL_SetVideoMode(screen->w,screen->h,screen->format->BitsPerPixel,vidargs); #endif // set title bar if required @@ -11041,11 +11049,24 @@ void togglefullscreen(void) { SDL_setFramerate(&manager, WANTFPS); } + flip(B_CLEAR); +/* gengl(screen); + blittoscreen(); +*/ } #ifdef OPENGL +void preinitgl(void) { + SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); + SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); + SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); + + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); + SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); +} + void initgl(void) { glClearColor( 0, 0, 0, 0 ); glDisable(GL_DEPTH_TEST); @@ -11076,27 +11097,19 @@ void initsdl(void) { } #ifdef OPENGL - SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 ); - SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 ); - SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 ); + preinitgl(); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); - //SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); - SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); - //screen = SDL_SetVideoMode(SCREENW,SCREENH,16,SDL_SWSURFACE|SDL_OPENGLBLIT|vidargs); realscreen = SDL_SetVideoMode(SCREENW,SCREENH,wantbpp,SDL_SWSURFACE|SDL_OPENGL|vidargs); - screen = SDL_CreateRGBSurface(SDL_SWSURFACE, realscreen->w, realscreen->h, wantbpp, rm, gm, bm ,am); + SDL_SetAlpha(screen, SDL_SRCALPHA, 0); #else //screen = SDL_SetVideoMode(SCREENW,SCREENH,16,SDL_SWSURFACE|SDL_DOUBLEBUF|vidargs); // Try for 16 bit mode, but SDL_ANYFORMAT means that 32 bit is acceptable. screen = SDL_SetVideoMode(SCREENW,SCREENH,wantbpp,SDL_SWSURFACE|SDL_ANYFORMAT|vidargs); - #endif - // set drawpixel function based on what depth we ended up with if (realscreen->format->BitsPerPixel == 32) { drawpixel = drawpixel32; diff --git a/rc.h b/rc.h index c31f917..36ee9bf 100644 --- a/rc.h +++ b/rc.h @@ -76,6 +76,7 @@ int getmonjumpspeed(sprite_t *s); int getjumpdelay(int mid); void togglepause(void); void togglefullscreen(void); +void preinitgl(void); void initgl(void); void initsdl(void); void getfruit(sprite_t *giveto, sprite_t *fruit, int multiplier); diff --git a/todo b/todo index 5295c90..317a1c1 100644 --- a/todo +++ b/todo @@ -1,9 +1,4 @@ -- On spike school, allow 40 more seconds before hurryup. - -- Convert to openGL so it will run properly in non-fullsecreen mode. - *initial conversion - - cloud isn't being cleared properly during level transition +- fullscreen mode not working with open - get it working not super slow while in non-fullscreen mode.