- attempt a better video recovery when selected mode and colour bits fail

This commit is contained in:
Mark Vejvoda
2011-04-19 04:03:52 +00:00
parent ff98ad9ae5
commit 5174e33b92

View File

@@ -115,17 +115,35 @@ void PlatformContextGl::init(int colorBits, int depthBits, int stencilBits,bool
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] error [%s]\n",__FILE__,__FUNCTION__,__LINE__,msg.str().c_str());
for(int i = 32; i >= 8; i-=8) {
// try to revert to 800x600
screen = SDL_SetVideoMode(800, 600, i, flags);
if(screen == 0) {
// try to revert to 640x480
screen = SDL_SetVideoMode(640, 480, i, flags);
if(screen == 0) {
throw std::runtime_error(msg.str());
// try different color bits
screen = SDL_SetVideoMode(resW, resH, i, flags);
if(screen != 0) {
break;
}
}
if(screen == 0) {
for(int i = 32; i >= 8; i-=8) {
// try to revert to 800x600
screen = SDL_SetVideoMode(800, 600, i, flags);
if(screen != 0) {
break;
}
}
}
//throw std::runtime_error(msg.str());
if(screen == 0) {
for(int i = 32; i >= 8; i-=8) {
// try to revert to 640x480
screen = SDL_SetVideoMode(640, 480, i, flags);
if(screen != 0) {
break;
}
}
}
if(screen == 0) {
throw std::runtime_error(msg.str());
}
}
SDL_WM_GrabInput(SDL_GRAB_OFF);