[Scummvm-cvs-logs] CVS: scummvm/scumm/smush scumm_renderer.cpp,1.22,1.23 scumm_renderer.h,1.8,1.9
Pawel Kolodziejski
aquadran at users.sourceforge.net
Sat Jan 25 11:03:03 CET 2003
Update of /cvsroot/scummvm/scummvm/scumm/smush
In directory sc8-pr-cvs1:/tmp/cvs-serv29444
Modified Files:
scumm_renderer.cpp scumm_renderer.h
Log Message:
applied patch: [ 674566 ] CMI: Further smush syncing
Index: scumm_renderer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/scumm_renderer.cpp,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- scumm_renderer.cpp 25 Dec 2002 00:48:13 -0000 1.22
+++ scumm_renderer.cpp 25 Jan 2003 19:02:44 -0000 1.23
@@ -199,7 +199,8 @@
ScummRenderer::ScummRenderer(Scumm * scumm, uint32 speed) :
_scumm(scumm),
_smixer(0),
- _insaneSpeed(speed) {
+ _insaneSpeed(speed),
+ _pending_updates(0) {
}
static ScummRenderer * s_renderer;
@@ -239,9 +240,12 @@
}
bool ScummRenderer::wait(int32 ms) {
- while(_wait) {
- _scumm->waitForTimer(1);
- }
+ // Because waitForTimer() also is the function that checks for user
+ // input we always want to call it at least once between frames, or
+ // the user may become unable to interrupt the movie.
+ do {
+ _scumm->waitForTimer(1);
+ } while(_pending_updates <= 0);
return true;
}
@@ -276,20 +280,25 @@
int width = MIN(getWidth(), _scumm->_realWidth);
int height = MIN(getHeight(), _scumm->_realHeight);
- _scumm->_system->copy_rect((const byte *)data(), getWidth(), 0, 0, width, height);
- _scumm->_system->update_screen();
+
+ // In theory, this will always be true. In reality, there may be
+ // several pending updates because the computer wasn't fast enough to
+ // process them all. In that case, skip the frame to catch up.
+ if (--_pending_updates <= 0) {
+ _scumm->_system->copy_rect((const byte *)data(), getWidth(), 0, 0, width, height);
+ _scumm->_system->update_screen();
+ } else {
+ warning("ScummRenderer: Skipping frame %d to catch up", getFrame());
+ }
_scumm->processKbd();
- _wait = true;
}
bool ScummRenderer::prematureClose() {
-
return _scumm->_videoFinished || _scumm->_saveLoadFlag;
-
}
bool ScummRenderer::update() {
- _wait = false;
+ _pending_updates++;
return true;
}
Index: scumm_renderer.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/smush/scumm_renderer.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- scumm_renderer.h 18 Sep 2002 08:06:15 -0000 1.8
+++ scumm_renderer.h 25 Jan 2003 19:02:44 -0000 1.9
@@ -45,7 +45,7 @@
Scumm * _scumm;
ScummMixer * _smixer;
uint32 _insaneSpeed;
- volatile bool _wait;
+ volatile int _pending_updates;
public:
ScummRenderer(Scumm * scumm, uint32 speed);
virtual ~ScummRenderer();
More information about the Scummvm-git-logs
mailing list