[Scummvm-cvs-logs] CVS: residual engine.cpp,1.83,1.84

Torbjörn Andersson eriktorbjorn at users.sourceforge.net
Fri Aug 12 23:51:01 CEST 2005


Update of /cvsroot/scummvm/residual
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4457

Modified Files:
	engine.cpp 
Log Message:
Applied my own patch #1258241 to decrease CPU load during SMUSH cutscenes.


Index: engine.cpp
===================================================================
RCS file: /cvsroot/scummvm/residual/engine.cpp,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -d -r1.83 -r1.84
--- engine.cpp	10 Aug 2005 08:33:45 -0000	1.83
+++ engine.cpp	13 Aug 2005 06:49:40 -0000	1.84
@@ -135,6 +135,7 @@
 	unsigned int frameCounter = 0;
 	unsigned int timeAccum = 0;
 	unsigned int frameTimeCollection = 0;
+	int prevSmushFrame = 0;
 	char fps[8] = "";
 	_savegameLoadRequest = false;
 	_savegameSaveRequest = false;
@@ -230,6 +231,8 @@
 			// Run asynchronous tasks
 			lua_runtasks();
 
+		bool doFlip = true;
+
 		if (_mode == ENGINE_MODE_SMUSH) {
 			if (g_smush->isPlaying()) {
 				_movieTime = g_smush->getMovieTime();
@@ -237,13 +240,19 @@
 					g_driver->prepareSmushFrame(g_smush->getWidth(), g_smush->getHeight(), g_smush->getDstPtr());
 					g_smush->clearUpdateNeeded();
 				}
-				if (g_smush->getFrame() > 0) {
-					g_driver->drawSmushFrame(g_smush->getX(), g_smush->getY());
-					if (SHOWFPS_GLOBAL)
-						g_driver->drawEmergString(550, 25, fps, Color(255, 255, 255));
+				int frame = g_smush->getFrame();
+				if (frame > 0) {
+					if (frame != prevSmushFrame) {
+						prevSmushFrame = g_smush->getFrame();
+						g_driver->drawSmushFrame(g_smush->getX(), g_smush->getY());
+						if (SHOWFPS_GLOBAL)
+							g_driver->drawEmergString(550, 25, fps, Color(255, 255, 255));
+					} else
+						doFlip = false;
 				}
 			}
 		} else if (_mode == ENGINE_MODE_NORMAL) {
+			prevSmushFrame = 0;
 			g_driver->clearScreen();
 
 			// Update actor costumes & sets
@@ -326,17 +335,20 @@
 		// Draw Primitives
 		for (PrimitiveListType::iterator i = _primitiveObjects.begin(); i != _primitiveObjects.end(); i++) {
 			(*i)->draw();
+			doFlip = true;
 		}
 
 		// Draw text
 		for (TextListType::iterator i = _textObjects.begin(); i != _textObjects.end(); i++) {
 			(*i)->draw();
+			doFlip = true;
 		}
 
 		g_imuse->flushTracks();
 		g_imuse->refreshScripts();
 
-		g_driver->flipBuffer();
+		if (doFlip)
+			g_driver->flipBuffer();
 
 		// don't kill CPU
 		SDL_Delay(1);
@@ -360,7 +372,7 @@
 		setMovieTime(_movieTime);
 		lua_endblock();
 
-		if (SHOWFPS_GLOBAL) {
+		if (SHOWFPS_GLOBAL && doFlip) {
 			frameCounter++;
 			timeAccum += _frameTime;
 			if (timeAccum > 1000) {





More information about the Scummvm-git-logs mailing list