X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=vid_sdl.c;h=c2ece5914dd0b132ed901be4e774ce3f706e8676;hp=b4765400f1abc5f85d37db1f806ef609388b6ad4;hb=0c1bf945ba583a260c98feb2d5ae1ec2513f834f;hpb=3f93e1c3074a97c2f15292bf8ff43e9dc1f93e53 diff --git a/vid_sdl.c b/vid_sdl.c index b4765400..c2ece591 100644 --- a/vid_sdl.c +++ b/vid_sdl.c @@ -195,7 +195,7 @@ static unsigned int tbl_sdltoquake[] = #undef fiftyoh #undef hundredoh -static int MapKey( int sdlkey ) +static int MapKey( unsigned int sdlkey ) { if( sdlkey > sizeof(tbl_sdltoquake)/ sizeof(int) ) return 0; @@ -218,28 +218,30 @@ void IN_Commands (void) { } -static void IN_MouseMove (usercmd_t *cmd) +static void IN_MouseMove (void) { int x, y; if( !vid_usingmouse ) { - IN_Mouse( cmd, 0, 0 ); + IN_Mouse( 0, 0 ); return; } SDL_GetRelativeMouseState( &x, &y ); - IN_Mouse( cmd, x, y ); + IN_Mouse( x, y ); } -void IN_Move( usercmd_t *cmd ) +void IN_Move( void ) { - IN_MouseMove( cmd ); + IN_MouseMove(); } static void IN_Init( void ) { // init keyboard SDL_EnableUNICODE( SDL_ENABLE ); + // enable key repeat since everyone expects it + SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); // init mouse vid_usingmouse = false; @@ -277,14 +279,16 @@ void Sys_SendKeyEvents( void ) break; case SDL_KEYDOWN: case SDL_KEYUP: - Key_Event( MapKey( event.key.keysym.sym ), event.key.keysym.unicode, (event.key.state == SDL_PRESSED) ); + Key_Event( MapKey( event.key.keysym.sym ), (char)event.key.keysym.unicode, (event.key.state == SDL_PRESSED) ); break; case SDL_ACTIVEEVENT: if( event.active.state == SDL_APPACTIVE ) + { if( event.active.gain ) vid_hidden = false; else vid_hidden = true; + } break; case SDL_MOUSEBUTTONDOWN: if( event.button.button == SDL_BUTTON_MIDDLE ) @@ -357,7 +361,7 @@ static void VID_OutputVersion() { const SDL_version *version; version = SDL_Linked_Version(); - Con_DPrintf( "Linked against SDL version %d.%d.%d\n" + Con_Printf( "Linked against SDL version %d.%d.%d\n" "Using SDL library version %d.%d.%d\n", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL, version->major, version->minor, version->patch ); @@ -376,22 +380,20 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp) We cant switch from one OpenGL video mode to another. Thus we first switch to some stupid 2D mode and then back to OpenGL. */ +#ifndef MACOSX SDL_SetVideoMode( 0, 0, 0, 0 ); - -#ifdef WIN32 - drivername = "opengl32.dll"; -#elif defined(__APPLE__) && defined(__MACH__) - drivername = "OpenGL.framework"; -#else - drivername = "libGL.so.1"; #endif + // SDL usually knows best + drivername = NULL; + +// COMMANDLINEOPTION: SDL GL: -gl_driver selects a GL driver library, default is whatever SDL recommends, useful only for 3dfxogl.dll/3dfxvgl.dll or fxmesa or similar, if you don't know what this is for, you don't need it i = COM_CheckParm("-gl_driver"); if (i && i < com_argc - 1) drivername = com_argv[i + 1]; - if (SDL_GL_LoadLibrary(drivername)) + if (SDL_GL_LoadLibrary(drivername) < 0) { - Con_Printf("Unable to load GL driver \"%s\": ", drivername, SDL_GetError()); + Con_Printf("Unable to load GL driver \"%s\": %s\n", drivername, SDL_GetError()); return false; } @@ -412,11 +414,23 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp) vid_isfullscreen = true; } - SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 1); - SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 1); - SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 1); - SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); + if (bpp >= 32) + { + SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 8); + SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 24); + SDL_GL_SetAttribute (SDL_GL_STENCIL_SIZE, 8); + } + else + { + SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 1); + SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 1); + SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 1); + SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 16); + } screen = SDL_SetVideoMode(width, height, bpp, flags); if (screen == NULL)