mirror of https://github.com/stella-emu/stella.git
OK, another large FrameBuffer-related change so that fullscreen,
double-buffered modes don't have flicker. Basically, the core FrameBuffer class has been modified to draw dialogs multiple times when necessary, above and beyond when changes are made (ie, if a new surface is to be overlaid, all surfaces underneath must be drawn to BOTH buffers in double-buffered mode first). Software rendering is currently broken in fullscreen mode, but I know why. It's basically the optimizations I try to make for large software surfaces (the 'isBase' functionality). This is going to disappear before the next release. And in case I haven't mentioned it for a while; I REALLY HATE software mode. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1577 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
4051b523d8
commit
5b4f9f3781
|
@ -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.125 2008-12-27 15:56:35 stephena Exp $
|
||||
// $Id: FrameBufferGL.cxx,v 1.126 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifdef DISPLAY_OPENGL
|
||||
|
@ -401,7 +401,7 @@ cerr << "dimensions: " << (fullScreen() ? "(full)" : "") << endl
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferGL::drawMediaSource()
|
||||
void FrameBufferGL::drawMediaSource(bool fullRedraw)
|
||||
{
|
||||
MediaSource& mediasrc = myOSystem->console().mediaSource();
|
||||
|
||||
|
@ -427,7 +427,7 @@ void FrameBufferGL::drawMediaSource()
|
|||
uInt8 v = currentFrame[bufofs];
|
||||
uInt8 w = previousFrame[bufofs];
|
||||
|
||||
if(v != w || myRedrawEntireFrame)
|
||||
if(v != w || fullRedraw)
|
||||
{
|
||||
// If we ever get to this point, we know the current and previous
|
||||
// buffers differ. In that case, make sure the changes are
|
||||
|
@ -445,7 +445,7 @@ void FrameBufferGL::drawMediaSource()
|
|||
else
|
||||
{
|
||||
// Phosphor mode always implies a dirty update,
|
||||
// so we don't care about myRedrawEntireFrame
|
||||
// so we don't care about fullRedraw
|
||||
myDirtyFlag = true;
|
||||
|
||||
uInt32 bufofsY = 0;
|
||||
|
@ -792,6 +792,8 @@ 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);
|
||||
|
|
|
@ -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.64 2008-12-21 19:51:35 stephena Exp $
|
||||
// $Id: FrameBufferGL.hxx,v 1.65 2008-12-27 23:27:32 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.64 2008-12-21 19:51:35 stephena Exp $
|
||||
@version $Id: FrameBufferGL.hxx,v 1.65 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class FrameBufferGL : public FrameBuffer
|
||||
{
|
||||
|
@ -134,9 +134,9 @@ class FrameBufferGL : public FrameBuffer
|
|||
|
||||
/**
|
||||
This method should be called anytime the MediaSource needs to be redrawn
|
||||
to the screen.
|
||||
to the screen (full indicating that a full redraw is required).
|
||||
*/
|
||||
void drawMediaSource();
|
||||
void drawMediaSource(bool full);
|
||||
|
||||
/**
|
||||
This method is called to provide information about the FrameBuffer.
|
||||
|
@ -185,7 +185,7 @@ class FrameBufferGL : public FrameBuffer
|
|||
A surface suitable for OpenGL rendering mode.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBufferGL.hxx,v 1.64 2008-12-21 19:51:35 stephena Exp $
|
||||
@version $Id: FrameBufferGL.hxx,v 1.65 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class FBSurfaceGL : public FBSurface
|
||||
{
|
||||
|
|
|
@ -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.84 2008-12-26 20:05:16 stephena Exp $
|
||||
// $Id: FrameBufferSoft.cxx,v 1.85 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <sstream>
|
||||
|
@ -123,7 +123,7 @@ bool FrameBufferSoft::setVidMode(VideoMode& mode)
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferSoft::drawMediaSource()
|
||||
void FrameBufferSoft::drawMediaSource(bool fullRedraw)
|
||||
{
|
||||
MediaSource& mediasrc = myOSystem->console().mediaSource();
|
||||
|
||||
|
@ -155,7 +155,7 @@ void FrameBufferSoft::drawMediaSource()
|
|||
uInt8 v = currentFrame[bufofs];
|
||||
uInt8 w = previousFrame[bufofs];
|
||||
|
||||
if(v != w || myRedrawEntireFrame)
|
||||
if(v != w || fullRedraw)
|
||||
{
|
||||
while(xstride--)
|
||||
{
|
||||
|
@ -195,7 +195,7 @@ void FrameBufferSoft::drawMediaSource()
|
|||
uInt8 v = currentFrame[bufofs];
|
||||
uInt8 w = previousFrame[bufofs];
|
||||
|
||||
if(v != w || myRedrawEntireFrame)
|
||||
if(v != w || fullRedraw)
|
||||
{
|
||||
uInt32 pixel = myDefPalette[v];
|
||||
uInt8 r = (pixel & myFormat->Rmask) >> myFormat->Rshift;
|
||||
|
@ -240,7 +240,7 @@ void FrameBufferSoft::drawMediaSource()
|
|||
uInt8 v = currentFrame[bufofs];
|
||||
uInt8 w = previousFrame[bufofs];
|
||||
|
||||
if(v != w || myRedrawEntireFrame)
|
||||
if(v != w || fullRedraw)
|
||||
{
|
||||
while(xstride--)
|
||||
{
|
||||
|
@ -422,7 +422,7 @@ void FrameBufferSoft::stateChanged(EventHandler::State state)
|
|||
}
|
||||
|
||||
// Have the changes take effect
|
||||
myOSystem->eventHandler().refreshDisplay();
|
||||
refresh();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -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.57 2008-12-20 23:32:46 stephena Exp $
|
||||
// $Id: FrameBufferSoft.hxx,v 1.58 2008-12-27 23:27:32 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.57 2008-12-20 23:32:46 stephena Exp $
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.58 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class FrameBufferSoft : public FrameBuffer
|
||||
{
|
||||
|
@ -122,9 +122,9 @@ class FrameBufferSoft : public FrameBuffer
|
|||
|
||||
/**
|
||||
This method should be called anytime the MediaSource needs to be redrawn
|
||||
to the screen.
|
||||
to the screen (full indicating that a full redraw is required).
|
||||
*/
|
||||
void drawMediaSource();
|
||||
void drawMediaSource(bool full);
|
||||
|
||||
/**
|
||||
This method is called after any drawing is done (per-frame).
|
||||
|
@ -172,7 +172,7 @@ class FrameBufferSoft : public FrameBuffer
|
|||
A surface suitable for software rendering mode.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.57 2008-12-20 23:32:46 stephena Exp $
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.58 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class FBSurfaceSoft : public FBSurface
|
||||
{
|
||||
|
|
|
@ -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: TiaOutputWidget.cxx,v 1.20 2008-12-23 18:54:05 stephena Exp $
|
||||
// $Id: TiaOutputWidget.cxx,v 1.21 2008-12-27 23:27:32 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -139,8 +139,9 @@ void TiaOutputWidget::handleCommand(CommandSender* sender, int cmd, int data, in
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void TiaOutputWidget::drawWidget(bool hilite)
|
||||
{
|
||||
return;
|
||||
/*
|
||||
// FIXME - check if we're in 'greyed out mode' and act accordingly
|
||||
instance().frameBuffer().refresh();
|
||||
instance().frameBuffer().drawMediaSource();
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -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: EventHandler.cxx,v 1.228 2008-07-22 14:54:38 stephena Exp $
|
||||
// $Id: EventHandler.cxx,v 1.229 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <sstream>
|
||||
|
@ -157,36 +157,6 @@ void EventHandler::reset(State state)
|
|||
myOSystem->state().reset();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::refreshDisplay(bool forceUpdate)
|
||||
{
|
||||
switch(myState)
|
||||
{
|
||||
case S_EMULATE:
|
||||
case S_PAUSE:
|
||||
if(&myOSystem->frameBuffer())
|
||||
myOSystem->frameBuffer().refresh();
|
||||
break;
|
||||
|
||||
case S_MENU: // fall through to next case
|
||||
case S_CMDMENU:
|
||||
if(&myOSystem->frameBuffer())
|
||||
myOSystem->frameBuffer().refresh();
|
||||
case S_LAUNCHER:
|
||||
case S_DEBUGGER:
|
||||
if(myOverlay)
|
||||
myOverlay->refresh();
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
if(forceUpdate && &myOSystem->frameBuffer())
|
||||
myOSystem->frameBuffer().update();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void EventHandler::setupJoysticks()
|
||||
{
|
||||
|
@ -622,7 +592,7 @@ void EventHandler::poll(uInt32 time)
|
|||
break; // SDL_QUIT
|
||||
|
||||
case SDL_VIDEOEXPOSE:
|
||||
refreshDisplay();
|
||||
myOSystem->frameBuffer().refresh();
|
||||
break; // SDL_VIDEOEXPOSE
|
||||
|
||||
#ifdef JOYSTICK_SUPPORT
|
||||
|
@ -1968,8 +1938,6 @@ void EventHandler::setEventState(State state)
|
|||
myOSystem->stateChanged(myState);
|
||||
if(&myOSystem->frameBuffer())
|
||||
myOSystem->frameBuffer().stateChanged(myState);
|
||||
|
||||
refreshDisplay();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -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: EventHandler.hxx,v 1.111 2008-05-30 19:07:55 stephena Exp $
|
||||
// $Id: EventHandler.hxx,v 1.112 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef EVENTHANDLER_HXX
|
||||
|
@ -61,7 +61,7 @@ enum EventMode {
|
|||
mapping can take place.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: EventHandler.hxx,v 1.111 2008-05-30 19:07:55 stephena Exp $
|
||||
@version $Id: EventHandler.hxx,v 1.112 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class EventHandler
|
||||
{
|
||||
|
@ -171,14 +171,6 @@ class EventHandler
|
|||
*/
|
||||
void reset(State state);
|
||||
|
||||
/**
|
||||
Refresh display according to the current state
|
||||
|
||||
@param forceUpdate Do a framebuffer update right away, instead
|
||||
of waiting for the next frame
|
||||
*/
|
||||
void refreshDisplay(bool forceUpdate = false);
|
||||
|
||||
/**
|
||||
This method indicates that the system should terminate.
|
||||
*/
|
||||
|
|
|
@ -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.147 2008-12-27 15:56:35 stephena Exp $
|
||||
// $Id: FrameBuffer.cxx,v 1.148 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -119,9 +119,6 @@ cerr << " <== FrameBuffer::initialize: w = " << width << ", h = " << height << e
|
|||
else
|
||||
return false;
|
||||
|
||||
// And refresh the display
|
||||
myOSystem->eventHandler().refreshDisplay();
|
||||
|
||||
// Enable unicode so we can see translated key events
|
||||
// (lowercase vs. uppercase characters)
|
||||
SDL_EnableUNICODE(1);
|
||||
|
@ -134,7 +131,7 @@ cerr << " <== FrameBuffer::initialize: w = " << width << ", h = " << height << e
|
|||
myStatsMsg.w = myOSystem->consoleFont().getStringWidth("000 LINES %00.00 FPS");
|
||||
myStatsMsg.h = myOSystem->consoleFont().getFontHeight();
|
||||
|
||||
if(myStatsMsg.surface == NULL)
|
||||
if(myStatsMsg.surface == NULL)
|
||||
{
|
||||
myStatsMsg.surfaceID = allocateSurface(myStatsMsg.w, myStatsMsg.h);
|
||||
myStatsMsg.surface = surface(myStatsMsg.surfaceID);
|
||||
|
@ -169,7 +166,7 @@ void FrameBuffer::update()
|
|||
myOSystem->console().fry();
|
||||
|
||||
// And update the screen
|
||||
drawMediaSource();
|
||||
drawMediaSource(myRedrawEntireFrame);
|
||||
|
||||
// Show frame statistics
|
||||
if(myStatsMsg.enabled)
|
||||
|
@ -193,7 +190,7 @@ void FrameBuffer::update()
|
|||
{
|
||||
// Only update the screen if it's been invalidated
|
||||
if(myRedrawEntireFrame)
|
||||
drawMediaSource();
|
||||
drawMediaSource(true);
|
||||
|
||||
// Show a pause message every 5 seconds
|
||||
if(myPausedCount++ >= 7*myOSystem->frameRate())
|
||||
|
@ -206,20 +203,12 @@ void FrameBuffer::update()
|
|||
|
||||
case EventHandler::S_MENU:
|
||||
{
|
||||
// Only update the screen if it's been invalidated
|
||||
if(myRedrawEntireFrame)
|
||||
drawMediaSource();
|
||||
|
||||
myOSystem->menu().draw();
|
||||
break; // S_MENU
|
||||
}
|
||||
|
||||
case EventHandler::S_CMDMENU:
|
||||
{
|
||||
// Only update the screen if it's been invalidated
|
||||
if(myRedrawEntireFrame)
|
||||
drawMediaSource();
|
||||
|
||||
myOSystem->commandMenu().draw();
|
||||
break; // S_CMDMENU
|
||||
}
|
||||
|
@ -262,7 +251,7 @@ void FrameBuffer::showMessage(const string& message, MessagePosition position,
|
|||
if(myMsg.counter > 0)
|
||||
{
|
||||
myRedrawEntireFrame = true;
|
||||
myOSystem->eventHandler().refreshDisplay();
|
||||
refresh();
|
||||
}
|
||||
|
||||
// Precompute the message coordinates
|
||||
|
@ -335,7 +324,7 @@ void FrameBuffer::showFrameStats(bool enable)
|
|||
{
|
||||
myOSystem->settings().setBool("stats", enable);
|
||||
myStatsMsg.enabled = enable;
|
||||
myOSystem->eventHandler().refreshDisplay();
|
||||
refresh();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -354,8 +343,7 @@ void FrameBuffer::enableMessages(bool enable)
|
|||
// Erase old messages on the screen
|
||||
myMsg.counter = 0;
|
||||
|
||||
myOSystem->eventHandler().refreshDisplay(true); // Do this twice for
|
||||
// myOSystem->eventHandler().refreshDisplay(true); // double-buffered modes
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -373,7 +361,7 @@ inline void FrameBuffer::drawMessage()
|
|||
// Either erase the entire message (when time is reached),
|
||||
// or show again this frame
|
||||
if(myMsg.counter == 0) // Force an immediate update
|
||||
myOSystem->eventHandler().refreshDisplay(true);
|
||||
refresh();
|
||||
else
|
||||
{
|
||||
myMsg.surface->addDirtyRect(0, 0, 0, 0); // force a full draw
|
||||
|
@ -384,7 +372,72 @@ inline void FrameBuffer::drawMessage()
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBuffer::refresh()
|
||||
{
|
||||
myRedrawEntireFrame = true;
|
||||
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
|
||||
// We also check for double-buffered modes, and when present
|
||||
// update both buffers accordingly
|
||||
//
|
||||
// This method is in essence a FULL refresh, putting all rendering
|
||||
// buffers in a known, fully redrawn state
|
||||
|
||||
bool doubleBuffered = (type() == kGLBuffer);
|
||||
switch(myOSystem->eventHandler().state())
|
||||
{
|
||||
case EventHandler::S_EMULATE:
|
||||
case EventHandler::S_PAUSE:
|
||||
drawMediaSource(true);
|
||||
if(doubleBuffered)
|
||||
drawMediaSource(true);
|
||||
break;
|
||||
|
||||
case EventHandler::S_MENU:
|
||||
drawMediaSource(true);
|
||||
myOSystem->menu().draw(true);
|
||||
if(doubleBuffered)
|
||||
{
|
||||
postFrameUpdate();
|
||||
drawMediaSource(true);
|
||||
myOSystem->menu().draw(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case EventHandler::S_CMDMENU:
|
||||
drawMediaSource(true);
|
||||
myOSystem->commandMenu().draw(true);
|
||||
if(doubleBuffered)
|
||||
{
|
||||
postFrameUpdate();
|
||||
drawMediaSource(true);
|
||||
myOSystem->commandMenu().draw(true);
|
||||
}
|
||||
break;
|
||||
|
||||
case EventHandler::S_LAUNCHER:
|
||||
myOSystem->launcher().draw(true);
|
||||
if(doubleBuffered)
|
||||
{
|
||||
postFrameUpdate();
|
||||
myOSystem->launcher().draw(true);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef DEBUGGER_SUPPORT
|
||||
case EventHandler::S_DEBUGGER:
|
||||
myOSystem->debugger().draw(true);
|
||||
if(doubleBuffered)
|
||||
{
|
||||
postFrameUpdate();
|
||||
myOSystem->debugger().draw(true);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -533,13 +586,14 @@ bool FrameBuffer::changeVidMode(int direction)
|
|||
|
||||
if(!inUIMode)
|
||||
{
|
||||
myOSystem->eventHandler().handleResizeEvent();
|
||||
myOSystem->eventHandler().refreshDisplay(true);
|
||||
setCursorState();
|
||||
showMessage(vidmode.gfxmode.description);
|
||||
}
|
||||
if(saveModeChange)
|
||||
myOSystem->settings().setString("tia_filter", vidmode.gfxmode.name);
|
||||
|
||||
myOSystem->eventHandler().handleResizeEvent();
|
||||
refresh(); // _FIXME myOSystem->eventHandler().refreshDisplay(true);
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
|
|
@ -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.107 2008-12-20 23:32:46 stephena Exp $
|
||||
// $Id: FrameBuffer.hxx,v 1.108 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef FRAMEBUFFER_HXX
|
||||
|
@ -91,7 +91,7 @@ enum {
|
|||
turn drawn here as well.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBuffer.hxx,v 1.107 2008-12-20 23:32:46 stephena Exp $
|
||||
@version $Id: FrameBuffer.hxx,v 1.108 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class FrameBuffer
|
||||
{
|
||||
|
@ -187,8 +187,8 @@ class FrameBuffer
|
|||
inline const GUI::Rect& screenRect() const { return myScreenRect; }
|
||||
|
||||
/**
|
||||
Indicates that the TIA area is dirty, and certain areas need
|
||||
to be redrawn.
|
||||
Refresh display according to the current state, taking single vs.
|
||||
double-buffered modes into account, and redrawing accordingly.
|
||||
*/
|
||||
void refresh();
|
||||
|
||||
|
@ -372,14 +372,14 @@ class FrameBuffer
|
|||
|
||||
/**
|
||||
This method should be called anytime the MediaSource needs to be redrawn
|
||||
to the screen.
|
||||
to the screen (full indicating that a full redraw is required).
|
||||
*/
|
||||
virtual void drawMediaSource() = 0;
|
||||
virtual void drawMediaSource(bool full) = 0;
|
||||
|
||||
/**
|
||||
This method is called after any drawing is done (per-frame).
|
||||
*/
|
||||
virtual void postFrameUpdate() = 0;
|
||||
virtual void postFrameUpdate() = 0;
|
||||
|
||||
/**
|
||||
This method is called to provide information about the FrameBuffer.
|
||||
|
@ -549,7 +549,7 @@ class FrameBuffer
|
|||
FrameBuffer type.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBuffer.hxx,v 1.107 2008-12-20 23:32:46 stephena Exp $
|
||||
@version $Id: FrameBuffer.hxx,v 1.108 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
// Text alignment modes for drawString()
|
||||
enum TextAlignment {
|
||||
|
|
|
@ -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: OSystem.cxx,v 1.134 2008-12-26 20:05:17 stephena Exp $
|
||||
// $Id: OSystem.cxx,v 1.135 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cassert>
|
||||
|
@ -275,7 +275,7 @@ void OSystem::setUIPalette()
|
|||
int palette = mySettings->getInt("uipalette") - 1;
|
||||
if(palette < 0 || palette >= kNumUIPalettes) palette = 0;
|
||||
myFrameBuffer->setUIPalette(&ourGUIColors[palette][0]);
|
||||
myEventHandler->refreshDisplay();
|
||||
myFrameBuffer->refresh();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -477,7 +477,7 @@ bool OSystem::createLauncher()
|
|||
}
|
||||
myLauncher->reStack();
|
||||
myFrameBuffer->setCursorState();
|
||||
myEventHandler->refreshDisplay();
|
||||
myFrameBuffer->refresh();
|
||||
|
||||
setFramerate(60);
|
||||
resetLoopTiming();
|
||||
|
|
|
@ -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: CommandDialog.cxx,v 1.21 2008-12-26 20:05:17 stephena Exp $
|
||||
// $Id: CommandDialog.cxx,v 1.22 2008-12-27 23:27:32 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -177,7 +177,7 @@ void CommandDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
|
||||
case kSnapshotCmd:
|
||||
instance().eventHandler().leaveMenuMode();
|
||||
instance().eventHandler().refreshDisplay(true);
|
||||
instance().frameBuffer().refresh();
|
||||
instance().eventHandler().handleEvent(Event::TakeSnapshot, 1);
|
||||
break;
|
||||
|
||||
|
@ -211,6 +211,7 @@ void CommandDialog::handleCommand(CommandSender* sender, int cmd,
|
|||
instance().console().switches().update();
|
||||
instance().console().mediaSource().update();
|
||||
instance().eventHandler().handleEvent(event, 0);
|
||||
instance().frameBuffer().refresh();
|
||||
}
|
||||
else if(stateCmd)
|
||||
{
|
||||
|
|
|
@ -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.71 2008-12-27 15:56:36 stephena Exp $
|
||||
// $Id: Dialog.cxx,v 1.72 2008-12-27 23:27:32 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);
|
||||
|
|
|
@ -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.49 2008-12-21 19:51:35 stephena Exp $
|
||||
// $Id: DialogContainer.cxx,v 1.50 2008-12-27 23:27:32 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "OSystem.hxx"
|
||||
|
@ -87,10 +87,10 @@ void DialogContainer::updateTime(uInt32 time)
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void DialogContainer::draw()
|
||||
void DialogContainer::draw(bool full)
|
||||
{
|
||||
// Draw all the dialogs on the stack when we want a full refresh
|
||||
if(myRefreshFlag)
|
||||
if(full)
|
||||
{
|
||||
for(int i = 0; i < myDialogStack.size(); i++)
|
||||
{
|
||||
|
@ -109,10 +109,11 @@ void DialogContainer::draw()
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void DialogContainer::addDialog(Dialog* d)
|
||||
{
|
||||
cerr << "DialogContainer::addDialog : w = " << d->getWidth() << ", h = " << d->getHeight() << endl;
|
||||
myDialogStack.push(d);
|
||||
|
||||
d->open();
|
||||
d->setDirty(); // Next update() will take care of drawing
|
||||
|
||||
myOSystem->frameBuffer().refresh();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -124,7 +125,7 @@ void DialogContainer::removeDialog()
|
|||
|
||||
// We need to redraw the entire screen contents, since we don't know
|
||||
// what was obscured
|
||||
myOSystem->eventHandler().refreshDisplay();
|
||||
myOSystem->frameBuffer().refresh();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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.24 2008-02-06 13:45:23 stephena Exp $
|
||||
// $Id: DialogContainer.hxx,v 1.25 2008-12-27 23:27:32 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.24 2008-02-06 13:45:23 stephena Exp $
|
||||
@version $Id: DialogContainer.hxx,v 1.25 2008-12-27 23:27:32 stephena Exp $
|
||||
*/
|
||||
class DialogContainer
|
||||
{
|
||||
|
@ -124,9 +124,9 @@ class DialogContainer
|
|||
void handleResizeEvent();
|
||||
|
||||
/**
|
||||
Draw the stack of menus.
|
||||
Draw the stack of menus (full indicates to redraw all items).
|
||||
*/
|
||||
void draw();
|
||||
void draw(bool full = false);
|
||||
|
||||
/**
|
||||
Add a dialog box to the stack.
|
||||
|
|
Loading…
Reference in New Issue