X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FVideo.cc;h=195f4130765a683ce4dbdf52dba423fa2f01e650;hp=9f6258652a374c5753d564326617176f88b42692;hb=e0c0a3b5e7337cde55e520801d2e59e03dc97d9c;hpb=ed5fcf5f1357fc42749408f705e9ec55531ff006 diff --git a/src/Moof/Video.cc b/src/Moof/Video.cc index 9f62586..195f413 100644 --- a/src/Moof/Video.cc +++ b/src/Moof/Video.cc @@ -9,7 +9,6 @@ * **************************************************************************/ -#include "Dispatch.hh" #include "Error.hh" #include "Image.hh" #include "Log.hh" @@ -20,25 +19,19 @@ namespace Mf { -Video::Video() +Video::Video() : + mDispatch(Dispatch::global()) { init(); } Video::Video(const Attributes& attribs) : - mAttribs(attribs) + mAttribs(attribs), + mDispatch(Dispatch::global()) { 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 +49,7 @@ void Video::init() setCursorGrab(mAttribs.cursorGrab); setVideoMode(mAttribs.mode); - video = this; + if (!gCurrentVideo) makeCurrent(); } void Video::recreateContext() @@ -109,11 +102,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,7 +123,7 @@ void Video::setVideoMode(const long mode[3]) #if !defined(linux) && !defined(__linux) && !defined(__linux__) logInfo("video context recreated"); - core.dispatch("video.newcontext"); + mDispatch.dispatch("video.newcontext"); #endif } else Error(Error::SDL_VIDEOMODE).raise(); @@ -145,7 +138,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 +283,28 @@ int Video::getHeight() const } +void Video::makeCurrent() const +{ + gCurrentVideo = const_cast(this); +} + + +void Video::setDispatch(Dispatch& dispatch) +{ + mDispatch = dispatch; +} + + 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 +316,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 +340,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 +374,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