[Scummvm-cvs-logs] CVS: scummvm/sky screen.cpp,1.24,1.25 screen.h,1.7,1.8

Robert G?ffringmann lavosspawn at users.sourceforge.net
Tue Jun 3 11:11:09 CEST 2003


Update of /cvsroot/scummvm/scummvm/sky
In directory sc8-pr-cvs1:/tmp/cvs-serv3095/sky

Modified Files:
	screen.cpp screen.h 
Log Message:
reduced number of copy_rects() during sequences.

Index: screen.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/screen.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- screen.cpp	2 Jun 2003 21:43:45 -0000	1.24
+++ screen.cpp	3 Jun 2003 18:10:31 -0000	1.25
@@ -399,11 +399,11 @@
 void SkyScreen::processSequence(void) {
 
 	uint32 screenPos = 0;
-	uint32 rectX, rectY, oldScreenPos;
 
 	_seqInfo.delay--;
 	if (_seqInfo.delay == 0) {
 		_seqInfo.delay = SEQ_DELAY;
+		memset(_seqGrid, 0, 12 * 20);
 
         uint8 nrToSkip, nrToDo, cnt;
 		do {
@@ -416,26 +416,41 @@
 				nrToDo = _seqInfo.seqDataPos[0];
 				_seqInfo.seqDataPos++;
 
-				rectX = screenPos % GAME_SCREEN_WIDTH;
-				rectY = screenPos / GAME_SCREEN_WIDTH;
-				oldScreenPos = screenPos;
-
+				uint8 gridSta = (uint8)((screenPos / (GAME_SCREEN_WIDTH * 16))*20 + ((screenPos % GAME_SCREEN_WIDTH) >> 4));
+				uint8 gridEnd = (uint8)(((screenPos+nrToDo+15) / (GAME_SCREEN_WIDTH * 16))*20 + (((screenPos+nrToDo+15) % GAME_SCREEN_WIDTH) >> 4));
+                for (cnt = gridSta; cnt <= gridEnd; cnt++)
+					_seqGrid[cnt] = 1;
 				for (cnt = 0; cnt < nrToDo; cnt++) {
 					_currentScreen[screenPos] = _seqInfo.seqDataPos[0];
 					_seqInfo.seqDataPos++;
 					screenPos++;
 				}
-				if (nrToDo > 0) {
-					if (rectX + nrToDo <= GAME_SCREEN_WIDTH)
-	                    _system->copy_rect(_currentScreen + oldScreenPos, GAME_SCREEN_WIDTH, rectX, rectY, nrToDo, 1);
-					else {
-						_system->copy_rect(_currentScreen + oldScreenPos, GAME_SCREEN_WIDTH, rectX, rectY, 320 - rectX, 1);
-						oldScreenPos += 320 - rectX;
-						_system->copy_rect(_currentScreen + oldScreenPos, GAME_SCREEN_WIDTH, 0, rectY + 1, nrToDo - (320 - rectX), 1);
-					}
-				}
 			} while (nrToDo == 0xFF);
 		} while (screenPos < (GAME_SCREEN_WIDTH * GAME_SCREEN_HEIGHT));
+		uint8 *gridPtr = _seqGrid; uint8 *scrPtr = _currentScreen; uint8 *rectPtr;
+		uint8 rectWid = 0, rectX, rectY;
+		for (uint8 cnty = 0; cnty < 12; cnty++) {
+			for (uint8 cntx = 0; cntx < 20; cntx++) {
+				if (*gridPtr) {
+					if (!rectWid) {
+						rectX = cntx;
+						rectY = cnty;
+						rectPtr = scrPtr;
+					}
+					rectWid++;
+				} else if (rectWid) {
+					_system->copy_rect(rectPtr, GAME_SCREEN_WIDTH, rectX << 4, rectY << 4, rectWid << 4, 16);
+					rectWid = 0;
+				}
+				scrPtr += 16;
+				gridPtr++;
+			}
+			if (rectWid) {
+				_system->copy_rect(rectPtr, GAME_SCREEN_WIDTH, rectX << 4, rectY << 4, rectWid << 4, 16);
+				rectWid = 0;
+			}
+			scrPtr += 15 * GAME_SCREEN_WIDTH;
+		}
 		_system->update_screen();
 		_seqInfo.framesLeft--;
 	}

Index: screen.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sky/screen.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- screen.h	2 Jun 2003 06:48:36 -0000	1.7
+++ screen.h	3 Jun 2003 18:10:32 -0000	1.8
@@ -87,6 +87,7 @@
 	static uint8 _top16Colours[16*3];
 	uint8 _palette[1024];
 	uint32 _currentPalette;
+	uint8 _seqGrid[20 * 12];
 
 	bool volatile _gotTick;
 	void waitForTimer(void);
@@ -96,7 +97,6 @@
 	uint8 *_currentScreen;
 	uint8 *_scrollScreen;
 	uint8 *_backScreen;
-	//uint32 *_scriptVariables;
 	struct {
 		uint32 framesLeft;
 		uint32 delay;





More information about the Scummvm-git-logs mailing list