示例#1
0
//--------------------------------------------------------------------------------------------
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 = &param_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 = &param_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 != &param_old )
            {
                *v_old = param_old;
            }
        }

        retval = v_old;
    }

    return retval;
}
示例#2
0
//--------------------------------------------------------------------------------------------
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( &param_old );
            v_old = &param_old;
        }
        else
        {
            memcpy( &param_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( &param_new );
        v_new = &param_new;
    }
    else
    {
        memcpy( &param_new, v_new, sizeof( SDLX_video_parameters_t ) );
    }

    // assume any problem with setting the graphics mode is with the multisampling
    surface = SDLX_RequestVideoMode( &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 )
        {
            memcpy( v_new, &param_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 != &param_old )
            {
                memcpy( v_old, &param_old, sizeof( SDLX_video_parameters_t ) );
            }
        }

        retval = v_old;
    }

    return retval;
}