X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FVideo.cc;h=9ca53c1cc46d5cfd3dc5c32963a4ed813dd81107;hp=9f6258652a374c5753d564326617176f88b42692;hb=00612586426be6d9a976f141a25ffc1f0d284501;hpb=837bae9f2bf7b25e1d3d2625eeaf39c1d2f48827 diff --git a/src/Moof/Video.cc b/src/Moof/Video.cc index 9f62586..9ca53c1 100644 --- a/src/Moof/Video.cc +++ b/src/Moof/Video.cc @@ -31,14 +31,6 @@ Video::Video(const Attributes& attribs) : init(); } -Video::Video(const std::string& caption, const std::string& icon) -{ - mAttribs.caption = caption; - mAttribs.icon = icon; - - init(); -} - void Video::init() { Error error = Backend::getError(); @@ -56,7 +48,7 @@ void Video::init() setCursorGrab(mAttribs.cursorGrab); setVideoMode(mAttribs.mode); - video = this; + if (!gCurrentVideo) makeCurrent(); } void Video::recreateContext() @@ -109,11 +101,11 @@ Video::~Video() { SDL_FreeSurface(mContext); - if (video == this) video = 0; + if (gCurrentVideo == this) gCurrentVideo = 0; } -void Video::setVideoMode(const long mode[3]) +void Video::setVideoMode(const int mode[3]) { if (mode != mAttribs.mode || !mContext) { @@ -130,14 +122,14 @@ void Video::setVideoMode(const long mode[3]) #if !defined(linux) && !defined(__linux) && !defined(__linux__) logInfo("video context recreated"); - core.dispatch("video.newcontext"); + Dispatch::global().dispatch("video.newcontext"); #endif } else Error(Error::SDL_VIDEOMODE).raise(); } } -Video::Attributes Video::getAttributes() const +Video::Attributes Video::attributes() const { return mAttribs; } @@ -145,7 +137,7 @@ Video::Attributes Video::getAttributes() const void Video::resize(int width, int height) { - long mode[] = {width, height, mAttribs.mode[2]}; + int mode[] = {width, height, mAttribs.mode[2]}; setVideoMode(mode); } @@ -290,35 +282,22 @@ int Video::getHeight() const } +void Video::makeCurrent() const +{ + gCurrentVideo = const_cast(this); +} + + Video::Attributes::Attributes() { - // set some sane GL and window defaults (see SDL_video.c:217) - colorBuffer[0] = 3; - colorBuffer[1] = 3; - colorBuffer[2] = 2; - colorBuffer[3] = 0; - frameBuffer = 0; - doubleBuffer = true; - depthBuffer = 16; - stencilBuffer = 0; - accumBuffer[0] = 0; - accumBuffer[1] = 0; - accumBuffer[2] = 0; - accumBuffer[3] = 0; - stereo = false; - multisampleBuffers = 0; - multisampleSamples = 0; - swapControl = false; - hardwareOnly = false; - mode[0] = 640; - mode[1] = 480; - mode[2] = 0; - fullscreen = false; - resizable = false; - cursorVisible = true; - cursorGrab = false; + init(); +} - std::vector colors; +Video::Attributes::Attributes(const Settings& settings) +{ + init(); + + std::vector colors; settings.get("colorbuffers", colors); if (colors.size() > 0) colorBuffer[0] = colors[0]; if (colors.size() > 1) colorBuffer[1] = colors[1]; @@ -330,7 +309,7 @@ Video::Attributes::Attributes() settings.get("depthbuffer", depthBuffer); settings.get("stencilbuffer", stencilBuffer); - std::vector accum; + std::vector accum; settings.get("accumbuffers", accum); if (accum.size() > 0) accumBuffer[0] = accum[0]; if (accum.size() > 1) accumBuffer[1] = accum[1]; @@ -354,7 +333,7 @@ Video::Attributes::Attributes() settings.get("showcursor", cursorVisible); settings.get("grab", cursorGrab); - std::vector dimensions; + std::vector dimensions; settings.get("videomode", dimensions); if (dimensions.size() > 1) { @@ -388,8 +367,37 @@ Video::Attributes::Attributes() if (dimensions.size() > 2) mode[2] = dimensions[2]; } +void Video::Attributes::init() +{ + // set some sane GL and window defaults (see SDL_video.c:217) + colorBuffer[0] = 3; + colorBuffer[1] = 3; + colorBuffer[2] = 2; + colorBuffer[3] = 0; + frameBuffer = 0; + doubleBuffer = true; + depthBuffer = 16; + stencilBuffer = 0; + accumBuffer[0] = 0; + accumBuffer[1] = 0; + accumBuffer[2] = 0; + accumBuffer[3] = 0; + stereo = false; + multisampleBuffers = 0; + multisampleSamples = 0; + swapControl = false; + hardwareOnly = false; + mode[0] = 640; + mode[1] = 480; + mode[2] = 0; + fullscreen = false; + resizable = false; + cursorVisible = true; + cursorGrab = false; +} + -Video* video = 0; // most recently instantiated instance +Video* Video::gCurrentVideo = 0; // most recently instantiated instance } // namespace Mf