I'm also curious about this part:
Another thing can be happen:
when your display (monitor) first time using these WxH settings sometimes it could do some shift&scale operation which produces strange screen results...
If this was happend, on LCD\LED monitors do: Menu->Settings->Reset:true
I'm on a laptop, I'm not sure if I have these settings.
From my own experience:
When I'm launching game application which enters to full-screen mode (640x480) on my monitors (LG FLATRONs 1920x1080 & 1680x1050) some part of game's screen becomes outside display or not fully stretched to entire display (some parts of screen are not used). If I would set Menu->Settings->Reset:true (on 640x480 mode) it would automatically, correctly changed (as I expect) and saves in monitor's memory (to load next time shift/scale settings when switching to 640x480 again, this settings are customized and located in each resolution mode).
Labtops have some settings for display (accessed with 'fn' key) but I'm not sure do they have these settings.
If you tested some full-screen applications (with modes:960x540, 1024x576, 1200x675) and they were correctly showed, so this is not a display issue.
I have no experience work with SDL(sorry) but I'm curious about this lines (from your code):
static void ChangeResolution(SDL_Surface* Screen,int Width,int Height, bool FullScreen) .......... Screen = SDL_SetVideoMode(...)Is your 'Screen' an output variable too? If yes, you need to change from:
SDL_Surface* Screen // when calling a function with this argument instruct a pointer (which holds an address) would be dublicatedto:
SDL_Surface* &Screen // with this your variable is now linked to input pointer
Best wishes, FXACE.