X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FOpenGL_Windows.cpp;h=5a5b0f10bc7b8481649b32633c44ef89bc31931c;hb=253b1aa9cfce1e8b1fc12b74d96a7808f615d783;hp=cc8103ce8e80e7cfbbf61f4093006d0c421c3aea;hpb=bbf8873b80baf3cb468ac12b3f62b0938320fef1;p=lugaru.git diff --git a/Source/OpenGL_Windows.cpp b/Source/OpenGL_Windows.cpp index cc8103c..5a5b0f1 100644 --- a/Source/OpenGL_Windows.cpp +++ b/Source/OpenGL_Windows.cpp @@ -45,6 +45,8 @@ extern "C" { #endif } +using namespace Game; + static bool load_image(const char * fname, TGAImageRec & tex); static bool load_png(const char * fname, TGAImageRec & tex); static bool load_jpg(const char * fname, TGAImageRec & tex); @@ -99,10 +101,8 @@ static SDL_Rect *hardcoded_resolutions[] = { NULL }; -void DrawGL(Game & game); - -Boolean SetUp (Game & game); -void DoUpdate (Game & game); +Boolean SetUp (); +void DoUpdate (); void CleanUp (void); @@ -163,8 +163,6 @@ int kContextHeight; Boolean gDone = false; -Game * pgame = 0; - #ifndef __MINGW32__ static int _argc = 0; static char **_argv = NULL; @@ -239,57 +237,54 @@ void initGL(){ } static void toggleFullscreen(){ - SDL_Surface* screen=SDL_GetVideoSurface(); - Uint32 flags=screen->flags; - screen=SDL_SetVideoMode(0,0,0,flags^SDL_FULLSCREEN); - if(!screen) - screen=SDL_SetVideoMode(0,0,0,flags); - if(!screen) - exit(1); - //reload opengl state - initGL(); - for(std::vector::iterator it=Game::textures.begin(); it!=Game::textures.end(); it++){ - it->load(); + if(!SDL_WM_ToggleFullScreen(SDL_GetVideoSurface())){ + SDL_Surface* screen=SDL_GetVideoSurface(); + Uint32 flags=screen->flags; + screen=SDL_SetVideoMode(0,0,0,flags^SDL_FULLSCREEN); + if(!screen) + screen=SDL_SetVideoMode(0,0,0,flags); + if(!screen) + exit(1); + //reload opengl state + initGL(); + Texture::reloadAll(); + if(text) + text->BuildFont(); + if(firstload){ + screentexture=0; + LoadScreenTexture(); + } + screentexture2=0; } - pgame->text.BuildFont(); - pgame->LoadScreenTexture(); } -static void sdlEventProc(const SDL_Event &e, Game &game){ - switch(e.type){ +static void sdlEventProc(const SDL_Event &e) +{ + switch(e.type) { case SDL_MOUSEMOTION: - game.deltah += e.motion.xrel; - game.deltav += e.motion.yrel; + deltah += e.motion.xrel; + deltav += e.motion.yrel; break; + case SDL_KEYDOWN: if ((e.key.keysym.sym == SDLK_g) && - (e.key.keysym.mod & KMOD_CTRL) && - !(SDL_GetVideoSurface()->flags & SDL_FULLSCREEN) ) { - SDL_WM_GrabInput( ((SDL_WM_GrabInput(SDL_GRAB_QUERY)==SDL_GRAB_ON) ? SDL_GRAB_OFF:SDL_GRAB_ON) ); - } else if ( (e.key.keysym.sym == SDLK_RETURN) && (e.key.keysym.mod & KMOD_ALT) ) { - toggleFullscreen(); - } - break; - case SDL_ACTIVEEVENT: - if(e.active.state&SDL_APPINPUTFOCUS){ - if(e.active.gain){ - SDL_WM_GrabInput(SDL_GRAB_ON); - gameFocused=true; - }else{ - SDL_WM_GrabInput(SDL_GRAB_OFF); - gameFocused=false; - } + (e.key.keysym.mod & KMOD_CTRL) && + !(SDL_GetVideoSurface()->flags & SDL_FULLSCREEN) ) { + SDL_WM_GrabInput( ((SDL_WM_GrabInput(SDL_GRAB_QUERY)==SDL_GRAB_ON) ? SDL_GRAB_OFF:SDL_GRAB_ON) ); + } else if ( (e.key.keysym.sym == SDLK_RETURN) && (e.key.keysym.mod & KMOD_ALT) ) { + toggleFullscreen(); } break; } } + // -------------------------------------------------------------------------- static Point gMidPoint; -Boolean SetUp (Game & game) +Boolean SetUp () { char string[10]; @@ -302,7 +297,7 @@ Boolean SetUp (Game & game) slomofreq=8012; numplayers=1; - DefaultSettings(game); + DefaultSettings(); if (!SDL_WasInit(SDL_INIT_VIDEO)) if (SDL_Init(SDL_INIT_VIDEO) == -1) @@ -310,9 +305,9 @@ Boolean SetUp (Game & game) fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError()); return false; } - if(!LoadSettings(game)) { + if(!LoadSettings()) { fprintf(stderr, "Failed to load config, creating default\n"); - SaveSettings(game); + SaveSettings(); } if(kBitsPerPixel!=32&&kBitsPerPixel!=16){ kBitsPerPixel=16; @@ -362,9 +357,9 @@ Boolean SetUp (Game & game) } Uint32 sdlflags = SDL_OPENGL; - //TODO: commented out temporarily - //if (!cmdline("windowed")) - //sdlflags |= SDL_FULLSCREEN; + + if (!cmdline("windowed")) + sdlflags |= SDL_FULLSCREEN; SDL_WM_SetCaption("Lugaru", "Lugaru"); @@ -422,33 +417,33 @@ Boolean SetUp (Game & game) screenwidth=width; screenheight=height; - game.newdetail=detail; - game.newscreenwidth=screenwidth; - game.newscreenheight=screenheight; + newdetail=detail; + newscreenwidth=screenwidth; + newscreenheight=screenheight; - game.InitGame(); + InitGame(); return true; } -static void DoMouse(Game & game) +static void DoMouse() { - if(mainmenu|| ( (abs(game.deltah)<10*realmultiplier*1000) && (abs(game.deltav)<10*realmultiplier*1000) )) + if(mainmenu|| ( (abs(deltah)<10*realmultiplier*1000) && (abs(deltav)<10*realmultiplier*1000) )) { - game.deltah *= usermousesensitivity; - game.deltav *= usermousesensitivity; - game.mousecoordh += game.deltah; - game.mousecoordv += game.deltav; - if (game.mousecoordh < 0) - game.mousecoordh = 0; - else if (game.mousecoordh >= kContextWidth) - game.mousecoordh = kContextWidth - 1; - if (game.mousecoordv < 0) - game.mousecoordv = 0; - else if (game.mousecoordv >= kContextHeight) - game.mousecoordv = kContextHeight - 1; + deltah *= usermousesensitivity; + deltav *= usermousesensitivity; + mousecoordh += deltah; + mousecoordv += deltav; + if (mousecoordh < 0) + mousecoordh = 0; + else if (mousecoordh >= kContextWidth) + mousecoordh = kContextWidth - 1; + if (mousecoordv < 0) + mousecoordv = 0; + else if (mousecoordv >= kContextHeight) + mousecoordv = kContextHeight - 1; } } @@ -489,7 +484,7 @@ void DoFrameRate (int update) } -void DoUpdate (Game & game) +void DoUpdate () { static float sps=200; static int count; @@ -498,7 +493,7 @@ void DoUpdate (Game & game) DoFrameRate(1); if(multiplier>.6)multiplier=.6; - game.fps=1/multiplier; + fps=1/multiplier; count = multiplier*sps; if(count<2)count=2; @@ -508,22 +503,22 @@ void DoUpdate (Game & game) if(difficulty==1)multiplier*=.9; if(difficulty==0)multiplier*=.8; - if(game.loading==4)multiplier*=.00001; + if(loading==4)multiplier*=.00001; if(slomo&&!mainmenu)multiplier*=slomospeed; oldmult=multiplier; multiplier/=(float)count; - DoMouse(game); + DoMouse(); - game.TickOnce(); + TickOnce(); for(int i=0;i