From 3f81dd2c9328d8ff63108c50f87ba29f838c44d5 Mon Sep 17 00:00:00 2001 From: stephena Date: Sun, 28 Dec 2008 21:01:55 +0000 Subject: [PATCH] Changed behaviour of 'gl_fsmax' argument again. It's now a boolean, which only applies to TIA mode (in fullscreen, of course). Some code/debugging cleanups across the various FrameBuffer classes. Finally fixed software rendering mode crashes. It now works just as well as OpenGL mode, with all dialog positioning working the same in both. Reactivated OpenGL filtering (GL_LINEAR and GL_NEAREST). Only the TIA image can be changed; the UI dialogs are always using GL_NEAREST). git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1579 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/docs/index.html | 4 +- stella/src/common/FrameBufferGL.cxx | 160 ++++++++------------------ stella/src/common/FrameBufferGL.hxx | 24 ++-- stella/src/common/FrameBufferSoft.cxx | 78 +++++++------ stella/src/common/FrameBufferSoft.hxx | 12 +- stella/src/common/RectList.cxx | 21 +++- stella/src/common/RectList.hxx | 5 +- stella/src/emucore/FrameBuffer.cxx | 11 +- stella/src/emucore/FrameBuffer.hxx | 11 +- stella/src/emucore/Settings.cxx | 11 +- stella/src/gui/Dialog.cxx | 4 +- stella/src/gui/DialogContainer.cxx | 7 +- stella/src/gui/DialogContainer.hxx | 12 +- stella/src/gui/OptionsDialog.cxx | 4 +- stella/src/gui/RomInfoWidget.cxx | 4 +- stella/src/gui/VideoDialog.cxx | 42 +++---- stella/src/gui/VideoDialog.hxx | 4 +- 17 files changed, 165 insertions(+), 249 deletions(-) diff --git a/stella/docs/index.html b/stella/docs/index.html index 81ea2d38b..8518caa6d 100644 --- a/stella/docs/index.html +++ b/stella/docs/index.html @@ -605,8 +605,8 @@ -
-gl_fsmax <never|always|ui|tia>
- OpenGL mode only. Stretch fullscreen image while in the given mode. +
-gl_fsmax <0|1>
+ OpenGL mode only. Stretch TIA image while in fullscreen mode. diff --git a/stella/src/common/FrameBufferGL.cxx b/stella/src/common/FrameBufferGL.cxx index ee7060560..3a131f3a3 100644 --- a/stella/src/common/FrameBufferGL.cxx +++ b/stella/src/common/FrameBufferGL.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferGL.cxx,v 1.126 2008-12-27 23:27:32 stephena Exp $ +// $Id: FrameBufferGL.cxx,v 1.127 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #ifdef DISPLAY_OPENGL @@ -74,8 +74,6 @@ FrameBufferGL::FrameBufferGL(OSystem* osystem) : FrameBuffer(osystem), myTiaSurface(NULL), myFilterParamName("GL_NEAREST"), - myWidthScaleFactor(1.0), - myHeightScaleFactor(1.0), myHaveTexRectEXT(false), myDirtyFlag(true) { @@ -188,8 +186,6 @@ bool FrameBufferGL::loadFuncs() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool FrameBufferGL::initSubsystem(VideoMode& mode) { -cerr << "FrameBufferGL::initSubsystem\n"; - mySDLFlags |= SDL_OPENGL; // Set up the OpenGL attributes @@ -244,8 +240,6 @@ string FrameBufferGL::about() const // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool FrameBufferGL::setVidMode(VideoMode& mode) { -cerr << "setVidMode: w = " << mode.screen_w << ", h = " << mode.screen_h << endl; - bool inUIMode = myOSystem->eventHandler().state() == EventHandler::S_LAUNCHER || myOSystem->eventHandler().state() == EventHandler::S_DEBUGGER; @@ -254,32 +248,19 @@ cerr << "setVidMode: w = " << mode.screen_w << ", h = " << mode.screen_h << endl uInt32 baseWidth = mode.image_w / mode.gfxmode.zoom; uInt32 baseHeight = mode.image_h / mode.gfxmode.zoom; - // FIXME - look at actual videomode type - // Normally, we just scale to the given zoom level - myWidthScaleFactor = (float) mode.gfxmode.zoom; - myHeightScaleFactor = (float) mode.gfxmode.zoom; - - // Activate aspect ratio correction in TIA mode - int iaspect = myOSystem->settings().getInt("gl_aspect"); - if(!inUIMode && iaspect < 100) + // Aspect ratio and fullscreen stretching only applies to the TIA + if(!inUIMode) { - float aspectFactor = float(iaspect) / 100.0; - myWidthScaleFactor *= aspectFactor; - mode.image_w = (uInt16)(float(mode.image_w) * aspectFactor); - } + // Aspect ratio + int aspect = myOSystem->settings().getInt("gl_aspect"); + if(aspect < 100) + mode.image_w = (uInt16)(float(mode.image_w * aspect) / 100.0); - // Activate stretching if its been requested in fullscreen mode - float stretchFactor = 1.0; - if(fullScreen() && (mode.image_w < mode.screen_w) && - (mode.image_h < mode.screen_h)) - { - const string& gl_fsmax = myOSystem->settings().getString("gl_fsmax"); - - // Only stretch in certain modes - if((gl_fsmax == "always") || - (inUIMode && gl_fsmax == "ui") || - (!inUIMode && gl_fsmax == "tia")) + // Fullscreen mode stretching + if(fullScreen() && myOSystem->settings().getBool("gl_fsmax") && + (mode.image_w < mode.screen_w) && (mode.image_h < mode.screen_h)) { + float stretchFactor = 1.0; float scaleX = float(mode.image_w) / mode.screen_w; float scaleY = float(mode.image_h) / mode.screen_h; @@ -287,14 +268,13 @@ cerr << "setVidMode: w = " << mode.screen_w << ", h = " << mode.screen_h << endl stretchFactor = float(mode.screen_w) / mode.image_w; else stretchFactor = float(mode.screen_h) / mode.image_h; + + mode.image_w = (Uint16) (stretchFactor * mode.image_w); + mode.image_h = (Uint16) (stretchFactor * mode.image_h); } } - myWidthScaleFactor *= stretchFactor; - myHeightScaleFactor *= stretchFactor; // Now re-calculate the dimensions - mode.image_w = (Uint16) (stretchFactor * mode.image_w); - mode.image_h = (Uint16) (stretchFactor * mode.image_h); if(!fullScreen()) mode.screen_w = mode.image_w; mode.image_x = (mode.screen_w - mode.image_w) >> 1; mode.image_y = (mode.screen_h - mode.image_h) >> 1; @@ -390,6 +370,7 @@ cerr << "dimensions: " << (fullScreen() ? "(full)" : "") << endl myTiaSurface = new FBSurfaceGL(*this, baseWidth>>1, baseHeight, mode.image_w, mode.image_h); myTiaSurface->setPos(mode.image_x, mode.image_y); + myTiaSurface->setFilter(myOSystem->settings().getString("gl_filter")); } // Make sure any old parts of the screen are erased @@ -474,14 +455,11 @@ void FrameBufferGL::drawMediaSource(bool fullRedraw) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FrameBufferGL::postFrameUpdate() { -//static int FCOUNT = 0; if(myDirtyFlag) { // Now show all changes made to the texture SDL_GL_SwapBuffers(); myDirtyFlag = false; -//cerr << FCOUNT++ % 2 << " : SWAP buffers" << endl; -//cerr << "--------------------------------------------------------------------" << endl; } } @@ -494,34 +472,6 @@ void FrameBufferGL::enablePhosphor(bool enable, int blend) myRedrawEntireFrame = true; } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FrameBufferGL::toggleFilter() -{ -/* - if(myBuffer.filter == GL_NEAREST) - { - myBuffer.filter = GL_LINEAR; - myOSystem->settings().setString("gl_filter", "linear"); - showMessage("Filtering: GL_LINEAR"); - } - else - { - myBuffer.filter = GL_NEAREST; - myOSystem->settings().setString("gl_filter", "nearest"); - showMessage("Filtering: GL_NEAREST"); - } - - p_glBindTexture(myBuffer.target, myBuffer.texture); - p_glTexParameteri(myBuffer.target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - p_glTexParameteri(myBuffer.target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - p_glTexParameteri(myBuffer.target, GL_TEXTURE_MAG_FILTER, myBuffer.filter); - p_glTexParameteri(myBuffer.target, GL_TEXTURE_MIN_FILTER, myBuffer.filter); - - // The filtering has changed, so redraw the entire screen - myRedrawEntireFrame = true; -*/ -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FBSurface* FrameBufferGL::createSurface(int w, int h, bool isBase) const { @@ -561,8 +511,6 @@ FBSurfaceGL::FBSurfaceGL(FrameBufferGL& buffer, myWidth(scaleWidth), myHeight(scaleHeight) { -//cerr << " FBSurfaceGL::FBSurfaceGL: w = " << baseWidth << ", h = " << baseHeight << " : " << this << endl; - // Fill buffer struct with valid data // This changes depending on the texturing used myTexCoord[0] = 0.0f; @@ -612,8 +560,6 @@ FBSurfaceGL::FBSurfaceGL(FrameBufferGL& buffer, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FBSurfaceGL::~FBSurfaceGL() { -//cerr << " FBSurfaceGL::~FBSurfaceGL(): myTexID = " << myTexID << " @ " << this << endl; - if(myTexture) SDL_FreeSurface(myTexture); @@ -720,6 +666,8 @@ void FBSurfaceGL::drawBitmap(uInt32* bitmap, Int32 tx, Int32 ty, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurfaceGL::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) { + // OpenGL mode doesn't make use of dirty rectangles + // It's faster to just update the entire surface mySurfaceIsDirty = true; } @@ -740,8 +688,6 @@ void FBSurfaceGL::setPos(uInt32 x, uInt32 y) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurfaceGL::setWidth(uInt32 w) { -//cerr << " BEFORE: w = " << myWidth <<", texcoord[2] = " << myTexCoord[2] << endl; - // This method can't be used with 'scaled' surface (aka TIA surfaces) // That shouldn't really matter, though, as all the UI stuff isn't scaled, // and it's the only thing that uses it @@ -751,15 +697,11 @@ void FBSurfaceGL::setWidth(uInt32 w) myTexCoord[2] = (GLfloat) myWidth; else myTexCoord[2] = (GLfloat) myWidth / myTexWidth; - -//cerr << " AFTER: w = " << myWidth <<", texcoord[2] = " << myTexCoord[2] << endl; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurfaceGL::setHeight(uInt32 h) { -//cerr << " BEFORE: h = " << myHeight <<", texcoord[3] = " << myTexCoord[3] << endl; - // This method can't be used with 'scaled' surface (aka TIA surfaces) // That shouldn't really matter, though, as all the UI stuff isn't scaled, // and it's the only thing that uses it @@ -769,22 +711,13 @@ void FBSurfaceGL::setHeight(uInt32 h) myTexCoord[3] = (GLfloat) myHeight; else myTexCoord[3] = (GLfloat) myHeight / myTexHeight; - -//cerr << " AFTER: h = " << myHeight <<", texcoord[3] = " << myTexCoord[3] << endl; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurfaceGL::translateCoords(Int32& x, Int32& y) const { -#if 1 - x = x - myXOrig; - y = y - myYOrig; -#else - // Wow, what a mess :) - const GUI::Rect& image = myFB.imageRect(); - x = (Int32) ((x - myXOrig - image.x()) / myWidthScaleFactor); - y = (Int32) ((y - myXOrig - image.y()) / myHeightScaleFactor); -#endif + x -= myXOrig; + y -= myYOrig; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -792,8 +725,6 @@ void FBSurfaceGL::update() { if(mySurfaceIsDirty) { -//cerr << " --> FBSurfaceGL::update(): w = " << myWidth << ", h = " << myHeight << endl; - // Texturemap complete texture to surface so we have free scaling // and antialiasing p_glBindTexture(myTexTarget, myTexID); @@ -823,8 +754,6 @@ void FBSurfaceGL::update() void FBSurfaceGL::free() { p_glDeleteTextures(1, &myTexID); - -//cerr << " ==> FBSurfaceGL::free(): myTexID = " << myTexID << " @ " << this << endl; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -839,26 +768,10 @@ void FBSurfaceGL::reload() // Basically, all that needs to be done is to re-call glTexImage2D with a // new texture ID, so that's what we do here -/* - // Create an OpenGL texture from the SDL texture - const string& filter = myOSystem->settings().getString("gl_filter"); - if(filter == "linear") - { - myBuffer.filter = GL_LINEAR; - myFilterParamName = "GL_LINEAR"; - } - else if(filter == "nearest") - { - myBuffer.filter = GL_NEAREST; - myFilterParamName = "GL_NEAREST"; - } -*/ p_glGenTextures(1, &myTexID); p_glBindTexture(myTexTarget, myTexID); p_glTexParameteri(myTexTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); p_glTexParameteri(myTexTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); -// p_glTexParameteri(myTexTarget, GL_TEXTURE_MIN_FILTER, myBuffer.filter); -// p_glTexParameteri(myTexTarget, GL_TEXTURE_MAG_FILTER, myBuffer.filter); p_glTexParameteri(myTexTarget, GL_TEXTURE_MIN_FILTER, GL_NEAREST); p_glTexParameteri(myTexTarget, GL_TEXTURE_MAG_FILTER, GL_NEAREST); @@ -868,10 +781,35 @@ void FBSurfaceGL::reload() GL_BGRA, GL_UNSIGNED_SHORT_1_5_5_5_REV, myTexture->pixels); p_glEnable(myTexTarget); - -//cerr << " ==> FBSurfaceGL::reload(): myTexID = " << myTexID << " @ " << this << endl; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FBSurfaceGL::setFilter(const string& name) +{ + // We only do GL_NEAREST or GL_LINEAR for now + GLint filter = GL_NEAREST; + if(name == "linear") + filter = GL_LINEAR; + + p_glBindTexture(myTexTarget, myTexID); + p_glTexParameteri(myTexTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + p_glTexParameteri(myTexTarget, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + p_glTexParameteri(myTexTarget, GL_TEXTURE_MIN_FILTER, filter); + p_glTexParameteri(myTexTarget, GL_TEXTURE_MAG_FILTER, filter); + + // The filtering has changed, so redraw the entire screen + mySurfaceIsDirty = true; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool FrameBufferGL::myLibraryLoaded = false; + +#endif // DISPLAY_OPENGL + + + + + #if 0 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GUI::Surface* FrameBufferGL::createSurface(int width, int height) const @@ -884,7 +822,6 @@ GUI::Surface* FrameBufferGL::createSurface(int width, int height) const return data ? new GUI::Surface(width, height, data) : NULL; } - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FrameBufferGL::drawSurface(const GUI::Surface* surface, Int32 x, Int32 y) { @@ -912,8 +849,3 @@ void FrameBufferGL::bytesToSurface(GUI::Surface* surface, int row, *pixels++ = SDL_MapRGB(s->format, data[c], data[c+1], data[c+2]); } #endif - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool FrameBufferGL::myLibraryLoaded = false; - -#endif // DISPLAY_OPENGL diff --git a/stella/src/common/FrameBufferGL.hxx b/stella/src/common/FrameBufferGL.hxx index 3e3b8a8cc..8558d43a6 100644 --- a/stella/src/common/FrameBufferGL.hxx +++ b/stella/src/common/FrameBufferGL.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferGL.hxx,v 1.65 2008-12-27 23:27:32 stephena Exp $ +// $Id: FrameBufferGL.hxx,v 1.66 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_GL_HXX @@ -35,7 +35,7 @@ class FBSurfaceGL; This class implements an SDL OpenGL framebuffer. @author Stephen Anthony - @version $Id: FrameBufferGL.hxx,v 1.65 2008-12-27 23:27:32 stephena Exp $ + @version $Id: FrameBufferGL.hxx,v 1.66 2008-12-28 21:01:55 stephena Exp $ */ class FrameBufferGL : public FrameBuffer { @@ -126,12 +126,6 @@ class FrameBufferGL : public FrameBuffer */ FBSurface* createSurface(int w, int h, bool useBase = false) const; - /** - Switches between the two filtering options in OpenGL. - Currently, these are GL_NEAREST and GL_LINEAR. - */ - void toggleFilter(); - /** This method should be called anytime the MediaSource needs to be redrawn to the screen (full indicating that a full redraw is required). @@ -168,9 +162,6 @@ class FrameBufferGL : public FrameBuffer // The name of the texture filtering to use string myFilterParamName; - // The amount by which to scale the image in each dimension in fullscreen mode - float myWidthScaleFactor, myHeightScaleFactor; - // Optional GL extensions that may increase performance bool myHaveTexRectEXT; @@ -185,7 +176,7 @@ class FrameBufferGL : public FrameBuffer A surface suitable for OpenGL rendering mode. @author Stephen Anthony - @version $Id: FrameBufferGL.hxx,v 1.65 2008-12-27 23:27:32 stephena Exp $ + @version $Id: FrameBufferGL.hxx,v 1.66 2008-12-28 21:01:55 stephena Exp $ */ class FBSurfaceGL : public FBSurface { @@ -215,6 +206,8 @@ class FBSurfaceGL : public FBSurface void reload(); private: + void setFilter(const string& name); + inline void* pixels() const { return myTexture->pixels; } inline uInt32 pitch() const { return myPitch; } @@ -231,15 +224,12 @@ class FBSurfaceGL : public FBSurface SDL_Surface* myTexture; GLuint myTexID; + GLenum myTexTarget; GLsizei myTexWidth; GLsizei myTexHeight; GLfloat myTexCoord[4]; - GLenum myTexTarget; - GLint myTexFilter; - - uInt32 myXOrig, myYOrig; - uInt32 myWidth, myHeight; + uInt32 myXOrig, myYOrig, myWidth, myHeight; bool mySurfaceIsDirty; uInt32 myPitch; }; diff --git a/stella/src/common/FrameBufferSoft.cxx b/stella/src/common/FrameBufferSoft.cxx index 06779c163..33fe2f574 100644 --- a/stella/src/common/FrameBufferSoft.cxx +++ b/stella/src/common/FrameBufferSoft.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSoft.cxx,v 1.85 2008-12-27 23:27:32 stephena Exp $ +// $Id: FrameBufferSoft.cxx,v 1.86 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #include @@ -102,19 +102,32 @@ bool FrameBufferSoft::setVidMode(VideoMode& mode) myFormat = myScreen->format; myBytesPerPixel = myFormat->BytesPerPixel; + // Make sure drawMediaSource() knows which renderer to use + switch(myBytesPerPixel) + { + case 2: // 16-bit + myPitch = myScreen->pitch >> 1; + myRenderType = myUsePhosphor ? kPhosphor_16 : kSoftZoom_16; + break; + case 3: // 24-bit + myPitch = myScreen->pitch; + myRenderType = myUsePhosphor ? kPhosphor_24 : kSoftZoom_24; + break; + case 4: // 32-bit + myPitch = myScreen->pitch >> 2; + myRenderType = myUsePhosphor ? kPhosphor_32 : kSoftZoom_32; + break; + } + myBaseOffset = mode.image_y * myPitch + mode.image_x; + // If software mode can open the given screen, it will always be in the // requested format, or not at all; we only update mode when the screen // is successfully created mode.screen_w = myScreen->w; mode.screen_h = myScreen->h; myZoomLevel = mode.gfxmode.zoom; - // FIXME - look at gfxmode directly - // Make sure drawMediaSource() knows which renderer to use - stateChanged(myOSystem->eventHandler().state()); - myBaseOffset = mode.image_y * myPitch + mode.image_x; - // Erase old rects, since they've probably been scaled for // a different sized screen myRectList->start(); @@ -376,11 +389,12 @@ void FrameBufferSoft::postFrameUpdate() { if(myTiaDirty && !myInUIMode) { - SDL_Flip(myScreen); + SDL_UpdateRect(myScreen, 0, 0, 0, 0); myTiaDirty = false; } else if(myRectList->numRects() > 0) { +//myRectList->print(myScreen->w, myScreen->h); SDL_UpdateRects(myScreen, myRectList->numRects(), myRectList->rects()); } myRectList->start(); @@ -392,37 +406,26 @@ void FrameBufferSoft::enablePhosphor(bool enable, int blend) myUsePhosphor = enable; myPhosphorBlend = blend; - stateChanged(myOSystem->eventHandler().state()); + // Make sure drawMediaSource() knows which renderer to use + switch(myBytesPerPixel) + { + case 2: // 16-bit + myRenderType = myUsePhosphor ? kPhosphor_16 : kSoftZoom_16; + break; + case 3: // 24-bit + myRenderType = myUsePhosphor ? kPhosphor_24 : kSoftZoom_24; + break; + case 4: // 32-bit + myRenderType = myUsePhosphor ? kPhosphor_32 : kSoftZoom_32; + break; + } + myRedrawEntireFrame = true; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FrameBufferSoft::stateChanged(EventHandler::State state) { - if(!myScreen) - return; - - myInUIMode = (state == EventHandler::S_LAUNCHER || - state == EventHandler::S_DEBUGGER); - - // Make sure drawMediaSource() knows which renderer to use - switch(myBytesPerPixel) - { - case 2: // 16-bit - myPitch = myScreen->pitch >> 1; - myRenderType = myUsePhosphor ? kPhosphor_16 : kSoftZoom_16; - break; - case 3: // 24-bit - myPitch = myScreen->pitch; - myRenderType = myUsePhosphor ? kPhosphor_24 : kSoftZoom_24; - break; - case 4: // 32-bit - myPitch = myScreen->pitch >> 2; - myRenderType = myUsePhosphor ? kPhosphor_32 : kSoftZoom_32; - break; - } - - // Have the changes take effect - refresh(); + myRedrawEntireFrame = true; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -594,7 +597,7 @@ void FBSurfaceSoft::drawChar(const GUI::Font* font, uInt8 chr, case 2: { // Get buffer position where upper-left pixel of the character will be drawn - uInt16* buffer = (uInt16*) mySurface->pixels + + uInt16* buffer = (uInt16*) mySurface->pixels + myBaseOffset + (ty + desc.ascent - bby - bbh) * myPitch + tx + bbx; @@ -654,7 +657,7 @@ void FBSurfaceSoft::drawChar(const GUI::Font* font, uInt8 chr, case 4: { // Get buffer position where upper-left pixel of the character will be drawn - uInt32* buffer = (uInt32*) mySurface->pixels + + uInt32* buffer = (uInt32*) mySurface->pixels + myBaseOffset + (ty + desc.ascent - bby - bbh) * myPitch + tx + bbx; @@ -702,6 +705,8 @@ void FBSurfaceSoft::drawBitmap(uInt32* bitmap, Int32 tx, Int32 ty, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurfaceSoft::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h) { +//cerr << " -> addDirtyRect: x = " << x << ", y = " << y << ", w = " << w << ", h = " << h << endl; + // Base surfaces use dirty-rectangle updates, since they can be quite // large, and updating the entire surface each frame would be too slow // Non-base surfaces are usually smaller, and can be updated entirely @@ -824,6 +829,9 @@ void FBSurfaceSoft::recalc() } + + + #if 0 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FrameBufferSoft::drawSurface(const GUI::Surface* surface, Int32 x, Int32 y) diff --git a/stella/src/common/FrameBufferSoft.hxx b/stella/src/common/FrameBufferSoft.hxx index 0f9dcd352..3090e01d6 100644 --- a/stella/src/common/FrameBufferSoft.hxx +++ b/stella/src/common/FrameBufferSoft.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBufferSoft.hxx,v 1.58 2008-12-27 23:27:32 stephena Exp $ +// $Id: FrameBufferSoft.hxx,v 1.59 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_SOFT_HXX @@ -32,7 +32,7 @@ class RectList; This class implements an SDL software framebuffer. @author Stephen Anthony - @version $Id: FrameBufferSoft.hxx,v 1.58 2008-12-27 23:27:32 stephena Exp $ + @version $Id: FrameBufferSoft.hxx,v 1.59 2008-12-28 21:01:55 stephena Exp $ */ class FrameBufferSoft : public FrameBuffer { @@ -114,12 +114,6 @@ class FrameBufferSoft : public FrameBuffer */ FBSurface* createSurface(int w, int h, bool useBase = false) const; - /** - Switches between the filtering options in software mode. - Currently, none exist. - */ - void toggleFilter() { /* No filter added yet */ } - /** This method should be called anytime the MediaSource needs to be redrawn to the screen (full indicating that a full redraw is required). @@ -172,7 +166,7 @@ class FrameBufferSoft : public FrameBuffer A surface suitable for software rendering mode. @author Stephen Anthony - @version $Id: FrameBufferSoft.hxx,v 1.58 2008-12-27 23:27:32 stephena Exp $ + @version $Id: FrameBufferSoft.hxx,v 1.59 2008-12-28 21:01:55 stephena Exp $ */ class FBSurfaceSoft : public FBSurface { diff --git a/stella/src/common/RectList.cxx b/stella/src/common/RectList.cxx index 73e0b545c..3681a53c9 100644 --- a/stella/src/common/RectList.cxx +++ b/stella/src/common/RectList.cxx @@ -13,10 +13,11 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: RectList.cxx,v 1.4 2008-02-06 13:45:19 stephena Exp $ +// $Id: RectList.cxx,v 1.5 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #include +#include "bspf.hxx" #include "RectList.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -74,3 +75,21 @@ void RectList::start() { currentRect = 0; } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void RectList::print(int boundWidth, int boundHeight) +{ + cerr << "RectList: rects = " << numRects() << endl; + for(Uint32 i = 0; i < currentRect; ++i) + { + cerr << "Rect " << i << endl + << " x = " << rectArray[i].x << endl + << " y = " << rectArray[i].y << endl + << " w = " << rectArray[i].w << endl + << " h = " << rectArray[i].h << endl; + if((rectArray[i].x + rectArray[i].w) > boundWidth || + (rectArray[i].y + rectArray[i].h) > boundHeight) + cerr << " TOO LARGE" << endl; + cerr << endl; + } +} diff --git a/stella/src/common/RectList.hxx b/stella/src/common/RectList.hxx index f369b6ce3..20ce7d983 100644 --- a/stella/src/common/RectList.hxx +++ b/stella/src/common/RectList.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: RectList.hxx,v 1.4 2008-02-06 13:45:19 stephena Exp $ +// $Id: RectList.hxx,v 1.5 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #ifndef RECTLIST_HXX @@ -24,7 +24,7 @@ class RectList { public: - RectList(Uint32 size = 512); + RectList(Uint32 size = 256); ~RectList(); void add(SDL_Rect* rect); @@ -32,6 +32,7 @@ class RectList SDL_Rect* rects(); Uint32 numRects(); void start(); + void print(int boundWidth, int boundHeight); private: Uint32 currentSize, currentRect; diff --git a/stella/src/emucore/FrameBuffer.cxx b/stella/src/emucore/FrameBuffer.cxx index b018e79dc..c73cd3fc5 100644 --- a/stella/src/emucore/FrameBuffer.cxx +++ b/stella/src/emucore/FrameBuffer.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.cxx,v 1.148 2008-12-27 23:27:32 stephena Exp $ +// $Id: FrameBuffer.cxx,v 1.149 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #include @@ -60,7 +60,6 @@ FrameBuffer::~FrameBuffer(void) // Free all allocated surfaces while(!mySurfaceList.empty()) { -//cerr << " delete id = " << (*mySurfaceList.begin()).first << ", " << (*mySurfaceList.begin()).second << endl; delete (*mySurfaceList.begin()).second; mySurfaceList.erase(mySurfaceList.begin()); } @@ -88,8 +87,6 @@ bool FrameBuffer::initialize(const string& title, uInt32 width, uInt32 height) mySDLFlags = 0; #endif -cerr << " <== FrameBuffer::initialize: w = " << width << ", h = " << height << endl; - // Set the available video modes for this framebuffer setAvailableVidModes(width, height); @@ -372,8 +369,6 @@ inline void FrameBuffer::drawMessage() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FrameBuffer::refresh() { -cerr << "FrameBuffer::refresh() : " << myOSystem->eventHandler().state() << endl; - // This method partly duplicates the behaviour in ::update() // Here, however, make sure to redraw *all* surfaces applicable to the // current EventHandler state @@ -592,8 +587,8 @@ bool FrameBuffer::changeVidMode(int direction) if(saveModeChange) myOSystem->settings().setString("tia_filter", vidmode.gfxmode.name); - myOSystem->eventHandler().handleResizeEvent(); - refresh(); // _FIXME myOSystem->eventHandler().refreshDisplay(true); + myOSystem->eventHandler().handleResizeEvent(); // FIXME - this may no longer be required + refresh(); } else return false; diff --git a/stella/src/emucore/FrameBuffer.hxx b/stella/src/emucore/FrameBuffer.hxx index 6166ae784..d0a03d39b 100644 --- a/stella/src/emucore/FrameBuffer.hxx +++ b/stella/src/emucore/FrameBuffer.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: FrameBuffer.hxx,v 1.108 2008-12-27 23:27:32 stephena Exp $ +// $Id: FrameBuffer.hxx,v 1.109 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_HXX @@ -91,7 +91,7 @@ enum { turn drawn here as well. @author Stephen Anthony - @version $Id: FrameBuffer.hxx,v 1.108 2008-12-27 23:27:32 stephena Exp $ + @version $Id: FrameBuffer.hxx,v 1.109 2008-12-28 21:01:55 stephena Exp $ */ class FrameBuffer { @@ -365,11 +365,6 @@ class FrameBuffer */ virtual FBSurface* createSurface(int w, int h, bool useBase = false) const = 0; - /** - Switches between the filtering options in the video subsystem. - */ - virtual void toggleFilter() = 0; - /** This method should be called anytime the MediaSource needs to be redrawn to the screen (full indicating that a full redraw is required). @@ -549,7 +544,7 @@ class FrameBuffer FrameBuffer type. @author Stephen Anthony - @version $Id: FrameBuffer.hxx,v 1.108 2008-12-27 23:27:32 stephena Exp $ + @version $Id: FrameBuffer.hxx,v 1.109 2008-12-28 21:01:55 stephena Exp $ */ // Text alignment modes for drawString() enum TextAlignment { diff --git a/stella/src/emucore/Settings.cxx b/stella/src/emucore/Settings.cxx index ec72556cf..fb9e0f8fe 100644 --- a/stella/src/emucore/Settings.cxx +++ b/stella/src/emucore/Settings.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Settings.cxx,v 1.149 2008-07-22 14:54:39 stephena Exp $ +// $Id: Settings.cxx,v 1.150 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #include @@ -41,7 +41,7 @@ Settings::Settings(OSystem* osystem) // OpenGL specific options setInternal("gl_filter", "nearest"); setInternal("gl_aspect", "100"); - setInternal("gl_fsmax", "never"); + setInternal("gl_fsmax", "false"); setInternal("gl_lib", "libGL.so"); setInternal("gl_vsync", "false"); setInternal("gl_texrect", "false"); @@ -226,10 +226,6 @@ void Settings::validate() i = getInt("gl_aspect"); if(i < 50 || i > 100) setInternal("gl_aspect", "100"); - - s = getString("gl_fsmax"); - if(s != "never" && s != "ui" && s != "tia" && s != "always") - setInternal("gl_fsmax", "never"); #endif #ifdef SOUND_SUPPORT @@ -287,8 +283,7 @@ void Settings::usage() << " nearest Normal scaling (GL_NEAREST)\n" << " linear Blurred scaling (GL_LINEAR)\n" << " -gl_aspect Scale the width by the given percentage\n" - << " -gl_fsmax Stretch GL image in fullscreen emulation mode\n" << " -gl_vsync <1|0> Enable synchronize to vertical blank interrupt\n" << " -gl_texrect <1|0> Enable GL_TEXTURE_RECTANGLE extension\n" << endl diff --git a/stella/src/gui/Dialog.cxx b/stella/src/gui/Dialog.cxx index af2a3314c..387e439ab 100644 --- a/stella/src/gui/Dialog.cxx +++ b/stella/src/gui/Dialog.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Dialog.cxx,v 1.72 2008-12-27 23:27:32 stephena Exp $ +// $Id: Dialog.cxx,v 1.73 2008-12-28 21:01:55 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -249,7 +249,7 @@ void Dialog::drawDialog() if(_dirty) { - cerr << "Dialog::drawDialog(): w = " << _w << ", h = " << _h << " @ " << &s << endl << endl; +// cerr << "Dialog::drawDialog(): w = " << _w << ", h = " << _h << " @ " << &s << endl << endl; s.fillRect(_x+1, _y+1, _w-2, _h-2, kDlgColor); s.box(_x, _y, _w, _h, kColor, kShadowColor); diff --git a/stella/src/gui/DialogContainer.cxx b/stella/src/gui/DialogContainer.cxx index 27f49266a..e46a05dea 100644 --- a/stella/src/gui/DialogContainer.cxx +++ b/stella/src/gui/DialogContainer.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: DialogContainer.cxx,v 1.50 2008-12-27 23:27:32 stephena Exp $ +// $Id: DialogContainer.cxx,v 1.51 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #include "OSystem.hxx" @@ -28,8 +28,7 @@ DialogContainer::DialogContainer(OSystem* osystem) : myOSystem(osystem), myBaseDialog(NULL), - myTime(0), - myRefreshFlag(false) + myTime(0) { reset(); } @@ -98,7 +97,6 @@ void DialogContainer::draw(bool full) myDialogStack[i]->setDirty(); myDialogStack[i]->drawDialog(); } - myRefreshFlag = false; } else if(!myDialogStack.empty()) { @@ -109,7 +107,6 @@ void DialogContainer::draw(bool full) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DialogContainer::addDialog(Dialog* d) { -cerr << "DialogContainer::addDialog : w = " << d->getWidth() << ", h = " << d->getHeight() << endl; myDialogStack.push(d); d->open(); diff --git a/stella/src/gui/DialogContainer.hxx b/stella/src/gui/DialogContainer.hxx index efdbe38fb..178742d79 100644 --- a/stella/src/gui/DialogContainer.hxx +++ b/stella/src/gui/DialogContainer.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: DialogContainer.hxx,v 1.25 2008-12-27 23:27:32 stephena Exp $ +// $Id: DialogContainer.hxx,v 1.26 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #ifndef DIALOG_CONTAINER_HXX @@ -36,7 +36,7 @@ class OSystem; a stack, and handles their events. @author Stephen Anthony - @version $Id: DialogContainer.hxx,v 1.25 2008-12-27 23:27:32 stephena Exp $ + @version $Id: DialogContainer.hxx,v 1.26 2008-12-28 21:01:55 stephena Exp $ */ class DialogContainer { @@ -143,11 +143,6 @@ class DialogContainer */ void reStack(); - /** - Redraw all dialogs on the stack. - */ - void refresh() { myRefreshFlag = true; } - /** Return the bottom-most dialog of this container. */ @@ -171,9 +166,6 @@ class DialogContainer // Indicates the most current time (in milliseconds) as set by updateTime() int myTime; - // Indicates a full refresh of all dialogs is required - bool myRefreshFlag; - // For continuous 'key down' events struct { int ascii; diff --git a/stella/src/gui/OptionsDialog.cxx b/stella/src/gui/OptionsDialog.cxx index bc9b9b929..6888b60ca 100644 --- a/stella/src/gui/OptionsDialog.cxx +++ b/stella/src/gui/OptionsDialog.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: OptionsDialog.cxx,v 1.74 2008-12-26 21:39:17 stephena Exp $ +// $Id: OptionsDialog.cxx,v 1.75 2008-12-28 21:01:55 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -119,7 +119,7 @@ OptionsDialog::OptionsDialog(OSystem* osystem, DialogContainer* parent, int x = 0, y = 0, w, h; // Now create all the dialogs attached to each menu button - w = 410; h = 300; + w = 410; h = 275; myVideoDialog = new VideoDialog(osystem, parent, font, x, y, w, h); w = 285; h = 200; diff --git a/stella/src/gui/RomInfoWidget.cxx b/stella/src/gui/RomInfoWidget.cxx index cf9c7b171..a875391dd 100644 --- a/stella/src/gui/RomInfoWidget.cxx +++ b/stella/src/gui/RomInfoWidget.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: RomInfoWidget.cxx,v 1.9 2008-06-19 12:01:31 stephena Exp $ +// $Id: RomInfoWidget.cxx,v 1.10 2008-12-28 21:01:55 stephena Exp $ //============================================================================ #include @@ -68,6 +68,7 @@ void RomInfoWidget::loadConfig() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RomInfoWidget::setProperties(const Properties& props) { +return; myHaveProperties = true; myProperties = props; @@ -82,6 +83,7 @@ void RomInfoWidget::setProperties(const Properties& props) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RomInfoWidget::clearProperties() { +return; myHaveProperties = myDrawSurface = false; // Decide whether the information should be shown immediately diff --git a/stella/src/gui/VideoDialog.cxx b/stella/src/gui/VideoDialog.cxx index 2b41b6131..b4f55245b 100644 --- a/stella/src/gui/VideoDialog.cxx +++ b/stella/src/gui/VideoDialog.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: VideoDialog.cxx,v 1.57 2008-12-26 21:39:17 stephena Exp $ +// $Id: VideoDialog.cxx,v 1.58 2008-12-28 21:01:55 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -109,18 +109,6 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent, wid.push_back(myGLFilterPopup); ypos += lineHeight + 4; - // GL FS stretch - items.clear(); - items.push_back("Never", "never"); - items.push_back("UI mode", "ui"); - items.push_back("TIA mode", "tia"); - items.push_back("Always", "always"); - myGLStretchPopup = new PopUpWidget(this, font, xpos, ypos, pwidth, lineHeight, - items, "GL Stretch: ", lwidth); - wid.push_back(myGLStretchPopup); - ypos += lineHeight + 4; - - // GL aspect ratio myAspectRatioSlider = new SliderWidget(this, font, xpos, ypos, pwidth, lineHeight, @@ -160,6 +148,12 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent, wid.push_back(myColorLossCheckbox); ypos += lineHeight + 4; + // GL FS stretch + myGLStretchCheckbox = new CheckboxWidget(this, font, xpos, ypos, + "GL FS Stretch"); + wid.push_back(myGLStretchCheckbox); + ypos += lineHeight + 4; + // Use sync to vblank in OpenGL myUseVSyncCheckbox = new CheckboxWidget(this, font, xpos, ypos, "GL VSync"); @@ -190,9 +184,9 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent, // Disable certain functions when we know they aren't present #ifndef DISPLAY_GL myGLFilterPopup->clearFlags(WIDGET_ENABLED); - myGLStretchPopup->clearFlags(WIDGET_ENABLED); myAspectRatioSlider->clearFlags(WIDGET_ENABLED); myAspectRatioLabel->clearFlags(WIDGET_ENABLED); + myGLStretchCheckbox->clearFlags(WIDGET_ENABLED); myUseVSyncCheckbox->clearFlags(WIDGET_ENABLED); #endif #ifndef WINDOWED_SUPPORT @@ -242,11 +236,6 @@ void VideoDialog::loadConfig() instance().settings().getString("gl_filter"), "linear"); myGLFilterPopup->setEnabled(gl); - // GL stretch setting - myGLStretchPopup->setSelected( - instance().settings().getString("gl_fsmax"), "never"); - myGLStretchPopup->setEnabled(gl); - // GL aspect ratio setting myAspectRatioSlider->setValue(instance().settings().getInt("gl_aspect")); myAspectRatioSlider->setEnabled(gl); @@ -267,6 +256,9 @@ void VideoDialog::loadConfig() // PAL color-loss effect myColorLossCheckbox->setState(instance().settings().getBool("colorloss")); + // GL stretch setting (item is enabled/disabled in ::handleFullscreenChange) + myGLStretchCheckbox->setState(instance().settings().getBool("gl_fsmax")); + // Use sync to vertical blank (GL mode only) myUseVSyncCheckbox->setState(instance().settings().getBool("gl_vsync")); myUseVSyncCheckbox->setEnabled(gl); @@ -293,9 +285,6 @@ void VideoDialog::saveConfig() // GL Filter setting instance().settings().setString("gl_filter", myGLFilterPopup->getSelectedTag()); - // GL stretch setting - instance().settings().setString("gl_fsmax", myGLStretchPopup->getSelectedTag()); - // GL aspect ratio setting instance().settings().setString("gl_aspect", myAspectRatioLabel->getLabel()); @@ -315,6 +304,9 @@ void VideoDialog::saveConfig() // PAL color-loss effect instance().settings().setBool("colorloss", myColorLossCheckbox->getState()); + // GL stretch setting + instance().settings().setBool("gl_fsmax", myGLStretchCheckbox->getState()); + // Use sync to vertical blank (GL mode only) instance().settings().setBool("gl_vsync", myUseVSyncCheckbox->getState()); @@ -338,7 +330,6 @@ void VideoDialog::setDefaults() myTIAPalettePopup->setSelected("standard", ""); myFSResPopup->setSelected("auto", ""); myGLFilterPopup->setSelected("linear", ""); - myGLStretchPopup->setSelected("never", ""); myAspectRatioSlider->setValue(100); myAspectRatioLabel->setLabel("100"); myFrameRateSlider->setValue(0); @@ -346,6 +337,7 @@ void VideoDialog::setDefaults() myFullscreenCheckbox->setState(false); myColorLossCheckbox->setState(false); + myGLStretchCheckbox->setState(false); myUseVSyncCheckbox->setState(true); myCenterCheckbox->setState(true); @@ -359,6 +351,10 @@ void VideoDialog::handleFullscreenChange(bool enable) #ifdef WINDOWED_SUPPORT myFSResPopup->setEnabled(enable); + // GL stretch is only enabled in OpenGL mode + myGLStretchCheckbox->setEnabled( + enable && instance().frameBuffer().type() == kGLBuffer); + _dirty = true; #endif } diff --git a/stella/src/gui/VideoDialog.hxx b/stella/src/gui/VideoDialog.hxx index c1ff4c387..20d48d67a 100644 --- a/stella/src/gui/VideoDialog.hxx +++ b/stella/src/gui/VideoDialog.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: VideoDialog.hxx,v 1.25 2008-12-26 21:39:17 stephena Exp $ +// $Id: VideoDialog.hxx,v 1.26 2008-12-28 21:01:55 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -56,7 +56,6 @@ class VideoDialog : public Dialog PopUpWidget* myTIAPalettePopup; PopUpWidget* myFSResPopup; PopUpWidget* myGLFilterPopup; - PopUpWidget* myGLStretchPopup; SliderWidget* myAspectRatioSlider; StaticTextWidget* myAspectRatioLabel; @@ -64,6 +63,7 @@ class VideoDialog : public Dialog StaticTextWidget* myFrameRateLabel; CheckboxWidget* myFullscreenCheckbox; CheckboxWidget* myColorLossCheckbox; + CheckboxWidget* myGLStretchCheckbox; CheckboxWidget* myUseVSyncCheckbox; CheckboxWidget* myCenterCheckbox;