[Scummvm-cvs-logs] SF.net SVN: scummvm:[43537] scummvm/trunk/engines/kyra

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Wed Aug 19 18:19:55 CEST 2009


Revision: 43537
          http://scummvm.svn.sourceforge.net/scummvm/?rev=43537&view=rev
Author:   lordhoto
Date:     2009-08-19 16:19:55 +0000 (Wed, 19 Aug 2009)

Log Message:
-----------
Make KYRA only call OSystem::updateScreen from inside Screen::updateScreen, when the screen really changed OR the palette changed.

Modified Paths:
--------------
    scummvm/trunk/engines/kyra/animator_lok.cpp
    scummvm/trunk/engines/kyra/animator_lok.h
    scummvm/trunk/engines/kyra/gui_lok.cpp
    scummvm/trunk/engines/kyra/kyra_v1.cpp
    scummvm/trunk/engines/kyra/screen.cpp
    scummvm/trunk/engines/kyra/screen.h
    scummvm/trunk/engines/kyra/script_lok.cpp
    scummvm/trunk/engines/kyra/sequences_lok.cpp
    scummvm/trunk/engines/kyra/text_lok.cpp

Modified: scummvm/trunk/engines/kyra/animator_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/animator_lok.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/animator_lok.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -37,7 +37,6 @@
 	_vm = vm;
 	_screen = vm->screen();
 	_initOk = false;
-	_updateScreen = false;
 	_system = system;
 	_screenObjects = _actors = _items = _sprites = _objectQueue = 0;
 	_noDrawShapesFlag = 0;
@@ -382,15 +381,11 @@
 
 				_screen->copyRegion(xpos << 3, ypos, xpos << 3, ypos, width << 3, height, 2, 0);
 				curObject->refreshFlag = 0;
-				_updateScreen = true;
 			}
 		}
 	}
 
-	if (_updateScreen) {
-		_screen->updateScreen();
-		_updateScreen = false;
-	}
+	_screen->updateScreen();
 }
 
 void Animator_LoK::updateAllObjectShapes() {

Modified: scummvm/trunk/engines/kyra/animator_lok.h
===================================================================
--- scummvm/trunk/engines/kyra/animator_lok.h	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/animator_lok.h	2009-08-19 16:19:55 UTC (rev 43537)
@@ -95,7 +95,6 @@
 	int16 fetchAnimHeight(const uint8 *shape, int16 mult);
 
 	int _noDrawShapesFlag;
-	bool _updateScreen;
 	uint16 _brandonDrawFrame;
 	int _brandonScaleX;
 	int _brandonScaleY;

Modified: scummvm/trunk/engines/kyra/gui_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/gui_lok.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/gui_lok.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -522,7 +522,6 @@
 	if (_menuRestoreScreen) {
 		restorePalette();
 		_screen->loadPageFromDisk("SEENPAGE.TMP", 0);
-		_vm->_animator->_updateScreen = true;
 	} else {
 		_screen->deletePageFromDisk(0);
 	}

Modified: scummvm/trunk/engines/kyra/kyra_v1.cpp
===================================================================
--- scummvm/trunk/engines/kyra/kyra_v1.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/kyra_v1.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -434,11 +434,8 @@
 		}
 	}
 
-	// TODO: Check whether we should really call Screen::updateScreen here.
-	// We might simply want to call OSystem::updateScreen instead, since Screen::updateScreen
-	// copies changed screen parts to the screen buffer, which might not be desired.
 	if (updateScreen)
-		screen()->updateScreen();
+		_system->updateScreen();
 }
 
 void KyraEngine_v1::removeInputTop() {

Modified: scummvm/trunk/engines/kyra/screen.cpp
===================================================================
--- scummvm/trunk/engines/kyra/screen.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/screen.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -51,6 +51,7 @@
 	memset(_fonts, 0, sizeof(_fonts));
 
 	_currentFont = FID_8_FNT;
+	_paletteChanged = true;
 }
 
 Screen::~Screen() {
@@ -206,6 +207,9 @@
 }
 
 void Screen::updateScreen() {
+	bool needRealUpdate = _forceFullUpdate || _dirtyRects.size() || _paletteChanged;
+	_paletteChanged = false;
+
 	if (_useOverlays)
 		updateDirtyRectsOvl();
 	else if (_isAmiga && _interfacePaletteEnabled)
@@ -214,13 +218,16 @@
 		updateDirtyRects();
 
 	if (_debugEnabled) {
+		needRealUpdate = true;
+
 		if (!_useOverlays)
 			_system->copyRectToScreen(getPagePtr(2), SCREEN_W, 320, 0, SCREEN_W, SCREEN_H);
 		else
 			_system->copyRectToScreen(getPagePtr(2), SCREEN_W, 640, 0, SCREEN_W, SCREEN_H);
 	}
 
-	_system->updateScreen();
+	if (needRealUpdate)
+		_system->updateScreen();
 }
 
 void Screen::updateDirtyRects() {
@@ -709,6 +716,7 @@
 		screenPal[4 * i + 3] = 0;
 	}
 
+	_paletteChanged = true;
 	_system->setPalette(screenPal, 0, pal.getNumColors());
 }
 
@@ -744,6 +752,7 @@
 		screenPal[4 * i + 3] = 0;
 	}
 
+	_paletteChanged = true;
 	_system->setPalette(screenPal, 32, pal.getNumColors());
 }
 

Modified: scummvm/trunk/engines/kyra/screen.h
===================================================================
--- scummvm/trunk/engines/kyra/screen.h	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/screen.h	2009-08-19 16:19:55 UTC (rev 43537)
@@ -308,7 +308,6 @@
 	virtual bool init();
 	virtual void setResolution();
 
-
 	void updateScreen();
 
 	// debug functions
@@ -508,6 +507,7 @@
 	};
 
 	bool _forceFullUpdate;
+	bool _paletteChanged;
 	Common::List<Common::Rect> _dirtyRects;
 
 	void addDirtyRect(int x, int y, int w, int h);

Modified: scummvm/trunk/engines/kyra/script_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/script_lok.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/script_lok.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -432,7 +432,6 @@
 		const uint32 continueTime = waitTime * _tickLength + _system->getMillis();
 
 		_movieObjects[wsaIndex]->displayFrame(wsaFrame++, 0, xpos, ypos, 0, 0, 0);
-		_animator->_updateScreen = true;
 		if (wsaFrame >= _movieObjects[wsaIndex]->frames())
 			running = false;
 
@@ -454,7 +453,6 @@
 	_screen->hideMouse();
 	const uint32 continueTime = waitTime * _tickLength + _system->getMillis();
 	_movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos, 0, 0, 0);
-	_animator->_updateScreen = true;
 	delayUntil(continueTime, false, true);
 	_screen->showMouse();
 	return 0;
@@ -487,7 +485,6 @@
 	for (; startFrame <= endFrame; ++startFrame) {
 		const uint32 nextRun = _system->getMillis() + delayTime * _tickLength;
 		_movieObjects[wsaIndex]->displayFrame(startFrame, 0, xpos, ypos, 0, 0, 0);
-		_animator->_updateScreen = true;
 		delayUntil(nextRun, false, true);
 	}
 	_screen->showMouse();
@@ -576,7 +573,6 @@
 int KyraEngine_LoK::o1_loadPageFromDisk(EMCState *script) {
 	debugC(3, kDebugLevelScriptFuncs, "KyraEngine_LoK::o1_loadPageFromDisk(%p) ('%s', %d)", (const void *)script, stackPosString(0), stackPos(1));
 	_screen->loadPageFromDisk(stackPosString(0), stackPos(1));
-	_animator->_updateScreen = true;
 	return 0;
 }
 
@@ -644,7 +640,6 @@
 	int srcPage = stackPos(4);
 	int dstPage = stackPos(5);
 	_screen->copyRegion(xpos, ypos, xpos, ypos, width, height, srcPage, dstPage);
-	_animator->_updateScreen = true;
 	return 0;
 }
 
@@ -674,7 +669,6 @@
 	_screen->hideMouse();
 	const uint32 continueTime = waitTime * _tickLength + _system->getMillis();
 	_movieObjects[wsaIndex]->displayFrame(frame, 2, xpos, ypos, 0, 0, 0);
-	_animator->_updateScreen = true;
 	delayUntil(continueTime, false, true);
 	_screen->showMouse();
 
@@ -749,8 +743,6 @@
 			while (endFrame >= frame) {
 				const uint32 continueTime = waitTime * _tickLength + _system->getMillis();
 				_movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos, 0, 0, 0);
-				if (waitTime)
-					_animator->_updateScreen = true;
 				delayUntil(continueTime, false, true);
 				++frame;
 			}
@@ -759,8 +751,6 @@
 			while (endFrame <= frame) {
 				const uint32 continueTime = waitTime * _tickLength + _system->getMillis();
 				_movieObjects[wsaIndex]->displayFrame(frame, 0, xpos, ypos, 0, 0, 0);
-				if (waitTime)
-					_animator->_updateScreen = true;
 				delayUntil(continueTime, false, true);
 				--frame;
 			}
@@ -1278,8 +1268,6 @@
 				snd_playSoundEffect(0x73);
 
 			amulet->displayFrame(code, 0, 224, 152, 0, 0, 0);
-			_animator->_updateScreen = true;
-
 			delayUntil(nextTime, false, true);
 		}
 		_screen->showMouse();

Modified: scummvm/trunk/engines/kyra/sequences_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/sequences_lok.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/sequences_lok.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -1944,7 +1944,6 @@
 	}
 
 	_screen->setScreenPalette(_screen->getPalette(0));
-	_animator->_updateScreen = true;
 
 	switch (_kyragemFadingState.nextOperation) {
 	case 0:

Modified: scummvm/trunk/engines/kyra/text_lok.cpp
===================================================================
--- scummvm/trunk/engines/kyra/text_lok.cpp	2009-08-19 09:01:04 UTC (rev 43536)
+++ scummvm/trunk/engines/kyra/text_lok.cpp	2009-08-19 16:19:55 UTC (rev 43537)
@@ -97,7 +97,6 @@
 			currPage = _screen->_curPage;
 			_screen->_curPage = 2;
 			_text->printCharacterText(chatStr, charNum, _characterList[charNum].x1);
-			_animator->_updateScreen = true;
 			_screen->_curPage = currPage;
 		}
 


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