[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