[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