フルスクリーンから復帰時の画面の乱れについて

なんか、ゲームをまったり、バージョンアップしてみています。
どうも、SDLフルスクリーンから復帰したときに画面が乱れるのはSDLかOSかドライバかハードの問題のように思えてきました。
というのは、640x480以下の解像度から戻ったときだけ乱れてるからです。
Cで書かれたプログラムでも、乱れてる。。。
原因を調べたら、ChangeDisplaySettingsというWinAPIを使って画面モードを変えてそのあとopenglSDL_GL_SwapBuffers()を呼び出し、ChangeDisplaySettings(0,null)で復帰すると、乱れてしまうということみたいです。
SDLを使わずにopenglを呼び出してみればいいんだろうけど、そこまではやってみてません。
まぁとにかく、これ書いとけば自分所では、フルスクリーンから戻るときに画面が乱れなくて、見た目上それほど悪くなく戻ってきてくれます。

version(Windows1) {
import std.c.windows.windows;
struct DEVMODEA {
  BYTE dmDeviceName[36];
  WORD dmSize;
  BYTE dummy[118];
}
enum :uint {
	ENUM_CURRENT_SETTINGS     =  -1,
	CDS_RESET =          0x40000000,
}
extern(Windows) export BOOL EnumDisplaySettingsA(
	char* lpszDeviceName, uint iModeNum, DEVMODEA* lpDevMode);
extern(Windows) export int ChangeDisplaySettingsA(
	DEVMODEA* lpDevMode, uint dwFlags);
void closeSDL() {
	for (int i = 0; i < 2; i++) {
		glClearColor(0f, 0f, 0f, 0f);
		glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
		SDL_GL_SwapBuffers();
	}
	DEVMODEA dm;
	dm.dmSize = DEVMODEA.sizeof;
	EnumDisplaySettingsA(null, ENUM_CURRENT_SETTINGS, &dm);
	ChangeDisplaySettingsA(&dm, CDS_RESET);
	SDL_Quit();
}

} else {
void closeSDL() {
	SDL_Quit();
}
}