X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FOpenGL_Windows.cpp;h=a50c24ff99d7f2f5ac4ae6446f0c60c313c57c01;hb=a4422339d9aefd773d8edc7689f0c50e99438016;hp=226025a7a7a9dba7a193da91fc4cf2ad112cc088;hpb=2a33aa48d0529a058becd257e744d6a5fef301c6;p=lugaru.git diff --git a/Source/OpenGL_Windows.cpp b/Source/OpenGL_Windows.cpp index 226025a..a50c24f 100644 --- a/Source/OpenGL_Windows.cpp +++ b/Source/OpenGL_Windows.cpp @@ -1,10 +1,29 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + #ifdef WIN32 #include #endif -#include "Game.h" - #ifndef USE_DEVIL # ifdef WIN32 # define USE_DEVIL @@ -15,13 +34,13 @@ #include "IL/il.h" #include "IL/ilu.h" #include "IL/ilut.h" + #include "Game.h" #else - // just use libpng and libjpg directly; it's lighter-weight and easier - // to manage the dependencies on Linux... - extern "C" { - #include "png.h" - #include "jpeglib.h" - } + + #include + #include + #include + #include "Game.h" 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); @@ -247,7 +266,7 @@ bool cmdline(const char *cmd) char *arg = _argv[i]; while (*arg == '-') arg++; - if (stricmp(arg, cmd) == 0) + if (strcasecmp(arg, cmd) == 0) return true; } @@ -470,6 +489,7 @@ static inline int clamp_sdl_mouse_button(Uint8 button) static void sdlEventProc(const SDL_Event &e, Game &game) { int val; + bool skipkey = false; SDLMod mod; switch(e.type) @@ -508,6 +528,7 @@ static void sdlEventProc(const SDL_Event &e, Game &game) { if (e.key.keysym.mod & KMOD_CTRL) { + skipkey = true; SDL_GrabMode mode = SDL_GRAB_ON; if ((SDL_GetVideoSurface()->flags & SDL_FULLSCREEN) == 0) { @@ -518,23 +539,16 @@ static void sdlEventProc(const SDL_Event &e, Game &game) } } - #if (defined(__APPLE__) && defined(__MACH__)) - if (e.key.keysym.sym == SDLK_q) - { - if (e.key.keysym.mod & KMOD_META) - { - gDone=true; - } - } - #endif - else if (e.key.keysym.sym == SDLK_RETURN) { if (e.key.keysym.mod & KMOD_ALT) + { + skipkey = true; SDL_WM_ToggleFullScreen(SDL_GetVideoSurface()); + } } - if (e.key.keysym.sym < SDLK_LAST) + if ((!skipkey) && (e.key.keysym.sym < SDLK_LAST)) { if (KeyTable[e.key.keysym.sym] != 0xffff) SetKey(KeyTable[e.key.keysym.sym]); @@ -545,6 +559,8 @@ static void sdlEventProc(const SDL_Event &e, Game &game) SetKey(MAC_CONTROL_KEY); if (mod & KMOD_ALT) SetKey(MAC_OPTION_KEY); + if (mod & KMOD_META) + SetKey(MAC_COMMAND_KEY); if (mod & KMOD_SHIFT) SetKey(MAC_SHIFT_KEY); if (mod & KMOD_CAPS) @@ -936,6 +952,8 @@ Boolean SetUp (Game & game) SDL_ShowCursor(0); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + if (SDL_SetVideoMode(kContextWidth, kContextHeight, 0, sdlflags) == NULL) { fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError()); @@ -955,6 +973,14 @@ Boolean SetUp (Game & game) } } + int dblbuf = 0; + if ((SDL_GL_GetAttribute(SDL_GL_DOUBLEBUFFER, &dblbuf) == -1) || (!dblbuf)) + { + fprintf(stderr, "Failed to get double buffered GL context!\n"); + SDL_Quit(); + return false; + } + if (!lookup_all_glsyms()) { SDL_Quit(); @@ -1494,7 +1520,7 @@ char *calcBaseDir(const char *argv0) char *retval; char *envr; - char *ptr = strrchr(argv0, '/'); + char *ptr = strrchr((char *)argv0, '/'); if (strchr(argv0, '/')) { retval = strdup(argv0); @@ -1548,7 +1574,6 @@ int main(int argc, char **argv) LOGFUNC; #ifndef WIN32 // this is in WinMain, too. - logger.start(true); memset( &g_theKeys, 0, sizeof( KeyMap)); #endif @@ -1679,7 +1704,7 @@ int main(int argc, char **argv) std::string e = "Caught exception: "; e += error.what(); - LOG(e, Logger::LOG_ERR); + LOG(e); MessageBox(g_windowHandle, error.what(), "ERROR", MB_OK | MB_ICONEXCLAMATION); } @@ -2338,8 +2363,6 @@ int main(int argc, char **argv) } } - logger.start(true); - memset( &g_theKeys, 0, sizeof( KeyMap)); unsigned int i = 0; @@ -2548,12 +2571,12 @@ int main(int argc, char **argv) #if !USE_DEVIL static bool load_image(const char *file_name, TGAImageRec &tex) { - char *ptr = strrchr(file_name, '.'); + char *ptr = strrchr((char *)file_name, '.'); if (ptr) { - if (stricmp(ptr+1, "png") == 0) + if (strcasecmp(ptr+1, "png") == 0) return load_png(file_name, tex); - else if (stricmp(ptr+1, "jpg") == 0) + else if (strcasecmp(ptr+1, "jpg") == 0) return load_jpg(file_name, tex); } @@ -2653,7 +2676,7 @@ static bool load_png(const char *file_name, TGAImageRec &tex) png_init_io(png_ptr, fp); png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_16 | PNG_TRANSFORM_PACKING, - png_voidp_NULL); + NULL); png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); @@ -2703,7 +2726,7 @@ static bool load_png(const char *file_name, TGAImageRec &tex) retval = true; png_done: - png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); if (fp) fclose(fp); return (retval); @@ -2712,10 +2735,10 @@ png_done: static bool save_image(const char *file_name) { - char *ptr = strrchr(file_name, '.'); + char *ptr = strrchr((char *)file_name, '.'); if (ptr) { - if (stricmp(ptr+1, "png") == 0) + if (strcasecmp(ptr+1, "png") == 0) return save_png(file_name); }