diff --git a/src/emucore/tia/frame-manager/AbstractFrameManager.cxx b/src/emucore/tia/frame-manager/AbstractFrameManager.cxx index 4af10f647..0fdd50c58 100644 --- a/src/emucore/tia/frame-manager/AbstractFrameManager.cxx +++ b/src/emucore/tia/frame-manager/AbstractFrameManager.cxx @@ -18,19 +18,37 @@ #include "AbstractFrameManager.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -AbstractFrameManager::AbstractFrameManager() : - myIsRendering(false), - myVsync(false), - myVblank(false), - myCurrentFrameFinalLines(0), - myPreviousFrameFinalLines(0), - myTotalFrames(0), - myLayout(FrameLayout::ntsc), - myFrameRate(0), - myOnFrameComplete(0), - myOnFrameStart(0), - myOnRenderingStart(0) -{} +AbstractFrameManager::AbstractFrameManager() +{ + reset(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AbstractFrameManager::reset() +{ + myIsRendering = false; + myVsync = false; + myVblank = false; + myCurrentFrameTotalLines = 0; + myCurrentFrameFinalLines = 0; + myPreviousFrameFinalLines = 0; + myTotalFrames = 0; + myLayout = FrameLayout::ntsc; + myFrameRate = 0; + myOnFrameComplete = 0; + myOnFrameStart = 0; + myOnRenderingStart = 0; + + onReset(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AbstractFrameManager::nextLine() +{ + myCurrentFrameTotalLines++; + + onNextLine(); +} // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void AbstractFrameManager::setHandlers( @@ -70,10 +88,11 @@ void AbstractFrameManager::notifyFrameStart() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void AbstractFrameManager::notifyFrameComplete(uInt32 finalScanlines) +void AbstractFrameManager::notifyFrameComplete() { myPreviousFrameFinalLines = myCurrentFrameFinalLines; - myCurrentFrameFinalLines = finalScanlines; + myCurrentFrameFinalLines = myCurrentFrameTotalLines; + myCurrentFrameTotalLines = 0; myTotalFrames++; if (myOnFrameComplete) myOnFrameComplete(); diff --git a/src/emucore/tia/frame-manager/AbstractFrameManager.hxx b/src/emucore/tia/frame-manager/AbstractFrameManager.hxx index f7d1a0e6b..54fc57c70 100644 --- a/src/emucore/tia/frame-manager/AbstractFrameManager.hxx +++ b/src/emucore/tia/frame-manager/AbstractFrameManager.hxx @@ -41,6 +41,10 @@ class AbstractFrameManager : public Serializable callback renderingStartCallback ); + void reset(); + + void nextLine(); + void setVblank(bool vblank); void setVsync(bool vsync); @@ -77,10 +81,6 @@ class AbstractFrameManager : public Serializable public: - virtual void reset() = 0; - - virtual void nextLine() = 0; - virtual uInt32 height() const = 0; virtual void setFixedHeight(uInt32 height) = 0; @@ -109,6 +109,10 @@ class AbstractFrameManager : public Serializable virtual void onSetVsync() {} + virtual void onNextLine() {} + + virtual void onReset() {} + virtual bool onSave(Serializer& out) const { throw runtime_error("cannot be serialized"); } virtual bool onLoad(Serializer& in) { throw runtime_error("cannot be serialized"); } @@ -117,7 +121,7 @@ class AbstractFrameManager : public Serializable void notifyFrameStart(); - void notifyFrameComplete(uInt32 finalScanlines); + void notifyFrameComplete(); void notifyRenderingStart(); @@ -129,6 +133,8 @@ class AbstractFrameManager : public Serializable bool myVblank; + uInt32 myCurrentFrameTotalLines; + uInt32 myCurrentFrameFinalLines; uInt32 myPreviousFrameFinalLines;