]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Video.cc
new win32 deps script; using pkgconfig for openal
[chaz/yoink] / src / Moof / Video.cc
index 9f6258652a374c5753d564326617176f88b42692..9ca53c1cc46d5cfd3dc5c32963a4ed813dd81107 100644 (file)
@@ -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<Video*>(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<long> colors;
+Video::Attributes::Attributes(const Settings& settings)
+{
+       init();
+
+       std::vector<int> 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<long> accum;
+       std::vector<int> 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<long> dimensions;
+       std::vector<int> 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
This page took 0.025948 seconds and 4 git commands to generate.