/** * @brief Init the SDL window * @param fullscreen Start in fullscreen or not (bool value) */ static qboolean GLimp_InitGraphics (qboolean fullscreen) { int flags; int stencil_bits; #ifndef __APPLE__ int width = 0; int height = 0; #endif SDL_SysWMinfo info; SDL_VERSION(&info.version); Com_Printf("SDL version: %i.%i.%i\n", info.version.major, info.version.minor, info.version.patch); have_stencil = qfalse; #ifndef __APPLE__ /* turn off DGA mouse support: leaving it makes cursor _slow_ in fullscreen under X11 at least */ setenv("SDL_VIDEO_X11_DGAMOUSE", "0", 1); if (SDL_GetWMInfo(&info) > 0 ) { if (info.subsystem == SDL_SYSWM_X11) { info.info.x11.lock_func(); width = DisplayWidth(info.info.x11.display, DefaultScreen(info.info.x11.display)); height = DisplayHeight(info.info.x11.display, DefaultScreen(info.info.x11.display)); info.info.x11.unlock_func(); Com_Printf("Desktop resolution: %i:%i\n", width, height); } } #endif /* Just toggle fullscreen if that's all that has been changed */ if (surface && (surface->w == vid.width) && (surface->h == vid.height)) { qboolean isfullscreen = (surface->flags & SDL_FULLSCREEN) ? qtrue : qfalse; if (fullscreen != isfullscreen) SDL_WM_ToggleFullScreen(surface); isfullscreen = (surface->flags & SDL_FULLSCREEN) ? qtrue : qfalse; if (fullscreen == isfullscreen) return qtrue; } srandom(getpid()); /* free resources in use */ if (surface) SDL_FreeSurface(surface); /* let the sound and input subsystems know about the new window */ ri.Vid_NewWindow (vid.width, vid.height); 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); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); flags = SDL_OPENGL; if (fullscreen) flags |= SDL_FULLSCREEN; SetSDLIcon(); /* currently uses ufoicon.xbm data */ if ((surface = SDL_SetVideoMode(vid.width, vid.height, 0, flags)) == NULL) { Sys_Error("(SDLGL) SDL SetVideoMode failed: %s\n", SDL_GetError()); return qfalse; } SDL_WM_SetCaption(GAME_TITLE, GAME_TITLE_LONG); SDL_ShowCursor(SDL_DISABLE); if (!SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &stencil_bits)) { ri.Con_Printf(PRINT_ALL, "I: got %d bits of stencil\n", stencil_bits); if (stencil_bits >= 1) { have_stencil = qtrue; } } SDL_active = qtrue; return qtrue; }