X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FMoof%2FVideo.cc;h=e0716091fcc7a4e4ce1d07a48328d9a1a77a66e3;hb=e973a129b5b83b628ba3f09e8c95682fc74080cd;hp=9e74acbf2b75dae0b09cb53f17883ed1eb4063b8;hpb=987971a961454d97082c6448fdc0bbeb540281bb;p=chaz%2Fyoink diff --git a/src/Moof/Video.cc b/src/Moof/Video.cc index 9e74acb..e071609 100644 --- a/src/Moof/Video.cc +++ b/src/Moof/Video.cc @@ -39,42 +39,39 @@ namespace Mf { 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; } @@ -104,7 +101,7 @@ void Video::setOpenGLAttributes() 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); } @@ -131,15 +128,12 @@ void Video::setVideoMode(const long mode[3]) 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(); } } @@ -315,7 +309,7 @@ Video::Attributes::Attributes() multisampleBuffers = 0; multisampleSamples = 0; swapControl = false; - hardwareonly = false; + hardwareOnly = false; mode[0] = 640; mode[1] = 480; mode[2] = 0; @@ -347,7 +341,7 @@ Video::Attributes::Attributes() 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)) { @@ -367,7 +361,7 @@ Video::Attributes::Attributes() 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); @@ -383,8 +377,6 @@ Video::Attributes::Attributes() } else { - while (*(modes + 1)) ++modes; // skip to the last - mode[0] = (*modes)->w; mode[1] = (*modes)->h; Mf::logInfo << "choosing native resolution "