qboolean VID_CreateWindow( int width, int height, qboolean fullscreen ) { #ifdef XASH_SDL static string wndname; Uint32 wndFlags = SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; Q_strncpy( wndname, GI->title, sizeof( wndname )); host.hWnd = SDL_CreateWindow(wndname, r_xpos->integer, r_ypos->integer, width, height, wndFlags); if( !host.hWnd ) { MsgDev( D_ERROR, "VID_CreateWindow: couldn't create '%s': %s\n", wndname, SDL_GetError()); return false; } if( fullscreen ) { SDL_DisplayMode want, got; want.w = width; want.h = height; want.driverdata = NULL; want.format = want.refresh_rate = 0; // don't care if( !SDL_GetClosestDisplayMode(0, &want, &got) ) return false; MsgDev(D_NOTE, "Got closest display mode: %ix%i@%i\n", got.w, got.h, got.refresh_rate); if( SDL_SetWindowDisplayMode(host.hWnd, &got) == -1 ) return false; if( SDL_SetWindowFullscreen(host.hWnd, SDL_WINDOW_FULLSCREEN) == -1 ) return false; } host.window_center_x = width / 2; host.window_center_y = height / 2; #if defined(_WIN32) { HICON ico; SDL_SysWMinfo info; if( FS_FileExists( GI->iconpath, true ) ) { char localPath[MAX_PATH]; Q_snprintf( localPath, sizeof( localPath ), "%s/%s", GI->gamedir, GI->iconpath ); ico = LoadImage( NULL, localPath, IMAGE_ICON, 0, 0, LR_LOADFROMFILE|LR_DEFAULTSIZE ); if( !ico ) { MsgDev( D_INFO, "Extract %s from pak if you want to see it.\n", GI->iconpath ); ico = LoadIcon( host.hInst, MAKEINTRESOURCE( 101 ) ); } } else ico = LoadIcon( host.hInst, MAKEINTRESOURCE( 101 ) ); if( SDL_GetWindowWMInfo( host.hWnd, &info ) ) { // info.info.info.info.info... Holy shit, SDL? SetClassLong( info.info.win.window, GCL_HICON, ico ); } } #endif SDL_ShowWindow( host.hWnd ); #else host.hWnd = 1; //fake window host.window_center_x = width / 2; host.window_center_y = height / 2; #endif if( !glw_state.initialized ) { if( !GL_CreateContext( )) return false; VID_StartupGamma(); } else { if( !GL_UpdateContext( )) return false; } return true; }
qboolean VID_CreateWindow( int width, int height, qboolean fullscreen ) { #ifdef XASH_SDL static string wndname; Uint32 wndFlags = SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; Q_strncpy( wndname, GI->title, sizeof( wndname )); host.hWnd = SDL_CreateWindow(wndname, r_xpos->integer, r_ypos->integer, width, height, wndFlags); if( !host.hWnd ) { MsgDev( D_ERROR, "VID_CreateWindow: couldn't create '%s': %s\n", wndname, SDL_GetError()); // remove MSAA, if it present, because // window creating may fail on GLX visual choose if( gl_msaa->integer ) { Cvar_Set("gl_msaa", "0"); GL_SetupAttributes(); // re-choose attributes // try again return VID_CreateWindow( width, height, fullscreen ); } return false; } if( fullscreen ) { SDL_DisplayMode want, got; want.w = width; want.h = height; want.driverdata = NULL; want.format = want.refresh_rate = 0; // don't care if( !SDL_GetClosestDisplayMode(0, &want, &got) ) return false; MsgDev(D_NOTE, "Got closest display mode: %ix%i@%i\n", got.w, got.h, got.refresh_rate); if( SDL_SetWindowDisplayMode(host.hWnd, &got) == -1 ) return false; if( SDL_SetWindowFullscreen(host.hWnd, SDL_WINDOW_FULLSCREEN) == -1 ) return false; } host.window_center_x = width / 2; host.window_center_y = height / 2; SDL_ShowWindow( host.hWnd ); #else host.hWnd = 1; //fake window host.window_center_x = width / 2; host.window_center_y = height / 2; #endif if( !glw_state.initialized ) { if( !GL_CreateContext( ) ) { return false; } VID_StartupGamma(); } else { if( !GL_UpdateContext( )) return false; } return true; }