// on win32, creating a new context via SDL_SetVideoMode will wipe
// out the GL state, so we gotta notify everyone to reload their
// state after the change
- Engine::getInstance().dispatch("video.newcontext");
+ engine.dispatch("video.newcontext");
logInfo("video context recreated");
#endif
}
settings.get("icon", icon);
+ settings.get("fullscreen", fullscreen);
+ settings.get("resizable", resizable);
+ settings.get("showcursor", cursorVisible);
+ settings.get("grab", cursorGrab);
+
std::vector<long> dimensions;
settings.get("videomode", dimensions);
if (dimensions.size() > 1)
mode[0] = dimensions[0];
mode[1] = dimensions[1];
}
- if (dimensions.size() > 2) mode[2] = dimensions[2];
+ else if (fullscreen)
+ {
+ SDL_Rect** modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE);
- settings.get("fullscreen", fullscreen);
- settings.get("resizable", resizable);
- settings.get("showcursor", cursorVisible);
- settings.get("grab", cursorGrab);
+ if (modes == (SDL_Rect**)0)
+ {
+ Mf::logError("no native video mode");
+ }
+ else if (modes == (SDL_Rect**)-1)
+ {
+ Mf::logWarning("any resolution allowed; choosing default 800x600");
+ mode[0] = 800;
+ mode[1] = 600;
+ }
+ else
+ {
+ while (*(modes + 1)) ++modes; // skip to the last
+
+ mode[0] = (*modes)->w;
+ mode[1] = (*modes)->h;
+ Mf::logInfo << "choosing native resolution "
+ << mode[0] << "x" << mode[1] << std::endl;
+ }
+ }
+ if (dimensions.size() > 2) mode[2] = dimensions[2];
}