[Scummvm-cvs-logs] SF.net SVN: scummvm:[33944] residual/trunk/engine

aquadran at users.sourceforge.net aquadran at users.sourceforge.net
Sat Aug 16 19:54:14 CEST 2008


Revision: 33944
          http://scummvm.svn.sourceforge.net/scummvm/?rev=33944&view=rev
Author:   aquadran
Date:     2008-08-16 17:54:14 +0000 (Sat, 16 Aug 2008)

Log Message:
-----------
changed code for limit speed for main loop

Modified Paths:
--------------
    residual/trunk/engine/engine.cpp
    residual/trunk/engine/engine.h

Modified: residual/trunk/engine/engine.cpp
===================================================================
--- residual/trunk/engine/engine.cpp	2008-08-16 15:24:52 UTC (rev 33943)
+++ residual/trunk/engine/engine.cpp	2008-08-16 17:54:14 UTC (rev 33944)
@@ -69,7 +69,7 @@
 	_textSpeed = 7;
 	_mode = _previousMode = ENGINE_MODE_IDLE;
 	_flipEnable = true;
-	_lastUpdateTime = 0;
+	_speedLimitMs = 33;
 	_refreshDrawNeeded = true;
 	g_fslist = NULL;
 	g_fsdir = NULL;
@@ -232,8 +232,6 @@
 		_frameStart = newStart;
 		return;
 	}
-	if (newStart - _frameStart < 30)
-		return;
 	_frameTime = newStart - _frameStart;
 	_frameStart = newStart;
 
@@ -256,17 +254,6 @@
 }
 
 void Engine::updateDisplayScene() {
-	uint32 newTime = g_driver->getMillis();
-	if (newTime < _lastUpdateTime) {
-		_lastUpdateTime = newTime;
-		_doFlip = false;
-	}
-	if (newTime - _lastUpdateTime < 30) {
-		_doFlip = false;
-		return;
-	}
-	_lastUpdateTime = newTime;
-
 	_doFlip = true;
 
 	if (_mode == ENGINE_MODE_SMUSH) {
@@ -387,13 +374,10 @@
 	if (_doFlip && _flipEnable)
 		g_driver->flipBuffer();
 
-	// don't kill CPU
-	g_driver->delayMillis(10);
-
 	if (SHOWFPS_GLOBAL && _doFlip && _mode != ENGINE_MODE_DRAW) {
 		_frameCounter++;
 		_timeAccum += _frameTime;
-		if (_timeAccum > 1000) {
+		if (_timeAccum > 500) {
 			sprintf(_fps, "%7.2f", (double)(_frameCounter * 1000) / (double)_timeAccum );
 			_frameCounter = 0;
 			_timeAccum = 0;
@@ -415,6 +399,8 @@
 	_refreshShadowMask = false;
 
 	for (;;) {
+		uint32 startTime = g_driver->getMillis();
+
 		if (_savegameLoadRequest) {
 			savegameRestore();
 		}
@@ -425,8 +411,11 @@
 		g_imuse->flushTracks();
 		g_imuse->refreshScripts();
 
-		if (_mode == ENGINE_MODE_IDLE)
+		if (_mode == ENGINE_MODE_IDLE) {
+			// don't kill CPU
+			g_driver->delayMillis(10);
 			continue;
+		}
 
 		// Process events
 		Driver::Event event;
@@ -458,6 +447,15 @@
 			g_imuse->setMusicState(g_imuseState);
 			g_imuseState = -1;
 		}
+
+		uint32 endTime = g_driver->getMillis();
+		if (startTime > endTime)
+			continue;
+		uint32 diffTime = endTime - startTime;
+		if (diffTime < _speedLimitMs) {
+			uint32 delayTime = _speedLimitMs - diffTime;
+			g_driver->delayMillis(delayTime);
+		}
 	}
 }
 

Modified: residual/trunk/engine/engine.h
===================================================================
--- residual/trunk/engine/engine.h	2008-08-16 15:24:52 UTC (rev 33943)
+++ residual/trunk/engine/engine.h	2008-08-16 17:54:14 UTC (rev 33944)
@@ -194,7 +194,6 @@
 	int _speechMode;
 	int _textSpeed;
 	bool _flipEnable;
-	uint32 _lastUpdateTime;
 	bool _refreshDrawNeeded;
 	char _fps[8];
 	bool _doFlip;
@@ -205,6 +204,7 @@
 	int _prevSmushFrame;
 	unsigned int _frameCounter;
 	unsigned int _timeAccum;
+	unsigned _speedLimitMs;
 
 	bool *_controlsEnabled;
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list