diff options
author | Colin Snover | 2017-04-29 14:00:28 -0500 |
---|---|---|
committer | Colin Snover | 2017-04-29 14:31:01 -0500 |
commit | 5dd961884276cfb3f5d5ae95b3c2440582ced917 (patch) | |
tree | 59475619e88a1bb15d50c2cb8b26aa33d8f54b1f | |
parent | 75c6b1fd3bf34e37e5aa5b6b6bfce355091d2e4a (diff) | |
download | scummvm-rg350-5dd961884276cfb3f5d5ae95b3c2440582ced917.tar.gz scummvm-rg350-5dd961884276cfb3f5d5ae95b3c2440582ced917.tar.bz2 scummvm-rg350-5dd961884276cfb3f5d5ae95b3c2440582ced917.zip |
SCI32: Remove unnecessary GfxFrameout::_frameNowVisible
This flag was used in SSCI to read from VRAM instead of from the
back buffer when a mouse interrupt was received in the middle of
a back buffer update. Since ScummVM controls when mouse events
are received via polling, it is not possible to receive a mouse
event in the middle of back buffer updates, so this code is
unnecessary for the engine to work properly.
This also fixes Valgrind warnings about use of uninitialized
memory at the start of the game, caused by not filling the cursor
memory buffers because `_frameNowVisible` was false until the first
frame was rendered.
-rw-r--r-- | engines/sci/graphics/cursor32.cpp | 15 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.cpp | 16 | ||||
-rw-r--r-- | engines/sci/graphics/frameout.h | 7 |
3 files changed, 7 insertions, 31 deletions
diff --git a/engines/sci/graphics/cursor32.cpp b/engines/sci/graphics/cursor32.cpp index e8450b773e..2f74873229 100644 --- a/engines/sci/graphics/cursor32.cpp +++ b/engines/sci/graphics/cursor32.cpp @@ -287,14 +287,13 @@ void GfxCursor32::setView(const GuiResourceId viewId, const int16 loopNo, const } void GfxCursor32::readVideo(DrawRegion &target) { - if (g_sci->_gfxFrameout->_frameNowVisible) { - copy(target, _vmapRegion); - } else { - // NOTE: SSCI would read the background for the cursor directly out of - // video memory here, but this is not necessary in ScummVM because mouse - // events in ScummVM are polled so can never interrupt the renderer - // between frames - } + // NOTE: In SSCI, mouse events were received via hardware interrupt, so + // there was a separate branch here that would read from VRAM instead of + // from the game's back buffer when a mouse event was received while the + // back buffer was being updated. In ScummVM, mouse events are polled, which + // means it is not possible to receive a mouse event during a back buffer + // update, so the code responsible for handling that is removed. + copy(target, _vmapRegion); } void GfxCursor32::copy(DrawRegion &target, const DrawRegion &source) { diff --git a/engines/sci/graphics/frameout.cpp b/engines/sci/graphics/frameout.cpp index 47992763f1..259e3a01b8 100644 --- a/engines/sci/graphics/frameout.cpp +++ b/engines/sci/graphics/frameout.cpp @@ -69,7 +69,6 @@ GfxFrameout::GfxFrameout(SegManager *segMan, GfxPalette32 *palette, GfxTransitio _throttleFrameOut(true), _throttleState(0), _remapOccurred(false), - _frameNowVisible(false), _overdrawThreshold(0), _palMorphIsOn(false) { @@ -467,11 +466,6 @@ void GfxFrameout::frameOut(const bool shouldShowBits, const Common::Rect &eraseR _remapOccurred = _palette->updateForFrame(); - // NOTE: SCI engine set this to false on each loop through the - // planelist iterator below. Since that is a waste, we only set - // it once. - _frameNowVisible = false; - for (PlaneList::size_type i = 0; i < _planes.size(); ++i) { drawEraseList(eraseLists[i], *_planes[i]); drawScreenItemList(screenItemLists[i]); @@ -487,8 +481,6 @@ void GfxFrameout::frameOut(const bool shouldShowBits, const Common::Rect &eraseR showBits(); } - _frameNowVisible = true; - if (robotIsActive) { robotPlayer.frameNowVisible(); } @@ -528,7 +520,6 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, PlaneShowStyle *show } _remapOccurred = _palette->updateForFrame(); - _frameNowVisible = false; for (PlaneList::size_type i = 0; i < _planes.size(); ++i) { drawEraseList(eraseLists[i], *_planes[i]); @@ -564,8 +555,6 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, PlaneShowStyle *show showBits(); } - _frameNowVisible = true; - for (PlaneList::iterator plane = _planes.begin(); plane != _planes.end(); ++plane) { (*plane)->_redrawAllCount = getScreenCount(); } @@ -586,9 +575,6 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, PlaneShowStyle *show } _remapOccurred = _palette->updateForFrame(); - // NOTE: During this second loop, `_frameNowVisible = false` is - // inside the next loop in SCI2.1mid - _frameNowVisible = false; for (PlaneList::size_type i = 0; i < _planes.size(); ++i) { drawEraseList(eraseLists[i], *_planes[i]); @@ -599,8 +585,6 @@ void GfxFrameout::palMorphFrameOut(const int8 *styleRanges, PlaneShowStyle *show _palette->updateFFrame(); _palette->updateHardware(false); showBits(); - - _frameNowVisible = true; } /** diff --git a/engines/sci/graphics/frameout.h b/engines/sci/graphics/frameout.h index 208c5b439c..146211544c 100644 --- a/engines/sci/graphics/frameout.h +++ b/engines/sci/graphics/frameout.h @@ -307,13 +307,6 @@ private: public: /** - * Whether or not the data in the current buffer is what - * is visible to the user. During rendering updates, - * this flag is set to false. - */ - bool _frameNowVisible; - - /** * Whether palMorphFrameOut should be used instead of * frameOut for rendering. Used by kMorphOn to * explicitly enable palMorphFrameOut for one frame. |