Video::Video()
{
- init(mAttribs);
+ init();
}
-Video::Video(const Attributes& attribs)
+Video::Video(const Attributes& attribs) :
+ mAttribs(attribs)
{
- init(attribs);
+ init();
}
Video::Video(const std::string& caption, const std::string& icon)
{
- if (mAttribs.caption == "Untitled")
- {
- mAttribs.caption = caption;
- }
- if (mAttribs.icon == "")
- {
- mAttribs.icon = icon;
- }
+ mAttribs.caption = caption;
+ mAttribs.icon = icon;
- init(mAttribs);
+ init();
}
-void Video::init(const Attributes& attribs)
+void Video::init()
{
+ Error error = Backend::getError();
+ if (error) error.raise();
+
mContext = 0;
mFlags = 0;
- mAttribs = attribs;
- setFull(attribs.fullscreen);
- setResizable(attribs.resizable);
+ setFull(mAttribs.fullscreen);
+ setResizable(mAttribs.resizable);
setOpenGLAttributes();
- setCaption(attribs.caption);
+ setCaption(mAttribs.caption);
setIcon();
- setCursorVisible(attribs.cursorVisible);
- setCursorGrab(attribs.cursorGrab);
- setVideoMode(attribs.mode);
+ setCursorVisible(mAttribs.cursorVisible);
+ setCursorGrab(mAttribs.cursorGrab);
+ setVideoMode(mAttribs.mode);
video = this;
}
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, mAttribs.multisampleBuffers);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, mAttribs.multisampleSamples);
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, mAttribs.swapControl);
- SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, mAttribs.hardwareonly);
+ SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, mAttribs.hardwareOnly);
}
mAttribs.mode[1] = mode[1];
mAttribs.mode[2] = mode[2];
-#if defined(_WIN32) || defined(__WIN32__)
- // 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
- core.dispatch("video.newcontext");
+#if !defined(linux) && !defined(__linux) && !defined(__linux__)
logInfo("video context recreated");
+ core.dispatch("video.newcontext");
#endif
}
- else throw Error(Error::SDL_VIDEOMODE);
+ else Error(Error::SDL_VIDEOMODE).raise();
}
}
multisampleBuffers = 0;
multisampleSamples = 0;
swapControl = false;
- hardwareonly = false;
+ hardwareOnly = false;
mode[0] = 640;
mode[1] = 480;
mode[2] = 0;
settings.get("multiesamplebuffers", multisampleBuffers);
settings.get("multiesamplesamples", multisampleSamples);
settings.get("swapcontrol", swapControl);
- settings.get("hardwareonly", hardwareonly);
+ settings.get("hardwareonly", hardwareOnly);
if (!settings.get("caption", caption))
{
mode[0] = dimensions[0];
mode[1] = dimensions[1];
}
- else if (fullscreen)
+ else if (fullscreen && Backend::isInitialized())
{
SDL_Rect** modes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_HWSURFACE);
}
else
{
- while (*(modes + 1)) ++modes; // skip to the last
-
mode[0] = (*modes)->w;
mode[1] = (*modes)->h;
Mf::logInfo << "choosing native resolution "