X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FVideo.cc;h=9f6258652a374c5753d564326617176f88b42692;hp=62addb406dc804b7a31644ef586b3a43b3dd1dce;hb=837bae9f2bf7b25e1d3d2625eeaf39c1d2f48827;hpb=4f9eb9259092994de9690cf12f11437c35a6791e diff --git a/src/Moof/Video.cc b/src/Moof/Video.cc index 62addb4..9f62586 100644 --- a/src/Moof/Video.cc +++ b/src/Moof/Video.cc @@ -1,30 +1,13 @@ -/******************************************************************************* - - Copyright (c) 2009, Charles McGarvey - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*******************************************************************************/ +/*] Copyright (c) 2009-2010, Charles McGarvey [************************** +**] All rights reserved. +* +* vi:ts=4 sw=4 tw=75 +* +* Distributable under the terms and conditions of the 2-clause BSD license; +* see the file COPYING for a complete text of the license. +* +**************************************************************************/ #include "Dispatch.hh" #include "Error.hh" @@ -39,42 +22,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; } @@ -88,23 +68,40 @@ void Video::recreateContext() void Video::setOpenGLAttributes() { - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, mAttribs.colorBuffer[0]); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, mAttribs.colorBuffer[1]); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, mAttribs.colorBuffer[2]); - SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, mAttribs.colorBuffer[3]); - SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, mAttribs.frameBuffer); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, mAttribs.doubleBuffer); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, mAttribs.depthBuffer); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, mAttribs.stencilBuffer); - SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, mAttribs.accumBuffer[0]); - SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, mAttribs.accumBuffer[1]); - SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, mAttribs.accumBuffer[2]); - SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, mAttribs.accumBuffer[3]); - SDL_GL_SetAttribute(SDL_GL_STEREO, mAttribs.stereo); - 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_RED_SIZE, + mAttribs.colorBuffer[0]); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, + mAttribs.colorBuffer[1]); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, + mAttribs.colorBuffer[2]); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, + mAttribs.colorBuffer[3]); + SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, + mAttribs.frameBuffer); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, + mAttribs.doubleBuffer); + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, + mAttribs.depthBuffer); + SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, + mAttribs.stencilBuffer); + SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, + mAttribs.accumBuffer[0]); + SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, + mAttribs.accumBuffer[1]); + SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, + mAttribs.accumBuffer[2]); + SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, + mAttribs.accumBuffer[3]); + SDL_GL_SetAttribute(SDL_GL_STEREO, + mAttribs.stereo); + 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); } @@ -312,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; @@ -344,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)) { @@ -364,9 +361,10 @@ 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); + SDL_Rect** modes = SDL_ListModes(NULL, + SDL_FULLSCREEN | SDL_HWSURFACE); if (modes == (SDL_Rect**)0) { @@ -374,7 +372,8 @@ Video::Attributes::Attributes() } else if (modes == (SDL_Rect**)-1) { - Mf::logWarning("any resolution allowed; choosing default 800x600"); + Mf::logWarning("any resolution allowed; " + "choosing default 800x600"); mode[0] = 800; mode[1] = 600; } @@ -390,10 +389,8 @@ Video::Attributes::Attributes() } -Video* video = 0; +Video* video = 0; // most recently instantiated instance } // namespace Mf -/** vim: set ts=4 sw=4 tw=80: *************************************************/ -