//-------------------------------------------------------------------------------------------- SDLX_video_parameters_t * SDLX_set_mode( SDLX_video_parameters_t * v_old, SDLX_video_parameters_t * v_new, bool has_valid_mode, bool make_report ) { /// @author BB /// @details let SDL try to set a new video mode. SDLX_video_parameters_t param_old, param_new; SDLX_video_parameters_t * retval = NULL; SDL_Window * surface; // initialize v_old and param_old if ( has_valid_mode ) { if ( NULL == v_old ) { SDLX_video_parameters_t::defaults( param_old ); v_old = ¶m_old; } else { param_old = *v_old; } } else { v_old = NULL; } if (v_old) throw std::invalid_argument("v_old is not null! unsupported"); // initialize v_new and param_new if ( NULL == v_new ) { SDLX_video_parameters_t::defaults( param_new ); v_new = ¶m_new; } else { param_new = *v_new; } // assume any problem with setting the graphics mode is with the multisampling surface = SDLX_CreateWindow( param_new, make_report ); if ( make_report ) { // report on the success or failure to set the mode SDLX_report_mode( surface, param_new ); } if ( NULL != surface ) { param_new.surface = surface; if ( NULL != v_new ) { *v_new = param_new; } retval = v_new; } else if ( NULL != v_old ) { surface = SDLX_CreateWindow( *v_old, make_report ); if ( NULL == surface ) { Log::get().error("could not restore the old video mode. Terminating.\n"); throw std::runtime_error("unable to restore the old video mode\n"); } else { param_old.surface = surface; if ( v_old != ¶m_old ) { *v_old = param_old; } } retval = v_old; } return retval; }
//-------------------------------------------------------------------------------------------- SDLX_video_parameters_t * SDLX_set_mode( SDLX_video_parameters_t * v_old, SDLX_video_parameters_t * v_new, SDL_bool has_valid_mode, SDL_bool make_report ) { /// @details BB@> let SDL try to set a new video mode. SDLX_video_parameters_t param_old, param_new; SDLX_video_parameters_t * retval = NULL; SDL_Surface * surface; // initialize v_old and param_old if ( has_valid_mode ) { if ( NULL == v_old ) { SDLX_video_parameters_default( ¶m_old ); v_old = ¶m_old; } else { memcpy( ¶m_old, v_old, sizeof( SDLX_video_parameters_t ) ); } } else { v_old = NULL; } // initialize v_new and param_new if ( NULL == v_new ) { SDLX_video_parameters_default( ¶m_new ); v_new = ¶m_new; } else { memcpy( ¶m_new, v_new, sizeof( SDLX_video_parameters_t ) ); } // assume any problem with setting the graphics mode is with the multisampling surface = SDLX_RequestVideoMode( ¶m_new, make_report ); if ( make_report ) { // report on the success or failure to set the mode SDLX_report_mode( surface, ¶m_new ); }; if ( NULL != surface ) { param_new.surface = surface; if ( NULL != v_new ) { memcpy( v_new, ¶m_new, sizeof( SDLX_video_parameters_t ) ); } retval = v_new; } else if ( NULL != v_old ) { surface = SDLX_RequestVideoMode( v_old, make_report ); if ( NULL == surface ) { fprintf( LOCAL_STDOUT, "Could not restore the old video mode. Terminating.\n" ); exit( -1 ); } else { param_old.surface = surface; if ( v_old != ¶m_old ) { memcpy( v_old, ¶m_old, sizeof( SDLX_video_parameters_t ) ); } } retval = v_old; } return retval; }