[Scummvm-cvs-logs] CVS: scummvm/scumm akos.cpp,1.75,1.76 bomp.cpp,2.5,2.6 camera.cpp,2.3,2.4 charset.cpp,2.36,2.37 costume.cpp,1.54,1.55 debugger.cpp,1.57,1.58 gfx.cpp,2.132,2.133 gfx.h,1.37,1.38 nut_renderer.cpp,1.24,1.25 scumm.h,1.233,1.234

Max Horn fingolfin at users.sourceforge.net
Sun Jun 1 07:31:13 CEST 2003


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv13867

Modified Files:
	akos.cpp bomp.cpp camera.cpp charset.cpp costume.cpp 
	debugger.cpp gfx.cpp gfx.h nut_renderer.cpp scumm.h 
Log Message:
added a getMaskBuffer method (makes it easier to read some of the code); merged setVirtscreenDirty() into updateDirtyRect(); made setDirtyRange a method of struct VirtScreen

Index: akos.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/akos.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- akos.cpp	1 Jun 2003 13:09:29 -0000	1.75
+++ akos.cpp	1 Jun 2003 14:30:24 -0000	1.76
@@ -702,7 +702,7 @@
 
 	v1.destptr = _outptr + v1.y * _outwidth + v1.x;
 
-	v1.mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + v1.y * _numStrips + _vm->_screenStartStrip;
+	v1.mask_ptr = _vm->getMaskBuffer(0, v1.y, 0);
 	v1.imgbufoffs = _vm->gdi._imgBufOffs[_zbuf];
 
 	codec1_genericDecode();
@@ -777,7 +777,7 @@
 	bdd.y = _actorY + ymoveCur;
 
 	if (_zbuf != 0) {
-		bdd.maskPtr = _vm->getResourceAddress(rtBuffer, 9) + _vm->gdi._imgBufOffs[_zbuf];
+		bdd.maskPtr = _vm->getMaskBuffer(0, 0, _zbuf);
 		_vm->drawBomp(bdd, !_mirror);
 	} else {
 		_vm->drawBomp(bdd, !_mirror);
@@ -1009,8 +1009,7 @@
 	if (_zbuf == 0) {
 		akos16Decompress(dest, pitch, _srcptr, cur_x, out_height, dir, numskip_before, numskip_after, transparency);
 	} else {
-		byte *ptr = _vm->_screenStartStrip + _vm->getResourceAddress(rtBuffer, 9) + _vm->gdi._imgBufOffs[_zbuf];
-		ptr += _numStrips * clip_top + (clip_left / 8);
+		byte *ptr = _vm->getMaskBuffer(clip_left, clip_top, _zbuf);
 		akos16DecompressMask(dest, pitch, _srcptr, cur_x, out_height, dir, numskip_before, numskip_after, transparency, ptr, clip_left / 8);
 	}
 	

Index: bomp.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/bomp.cpp,v
retrieving revision 2.5
retrieving revision 2.6
diff -u -d -r2.5 -r2.6
--- bomp.cpp	1 Jun 2003 13:09:29 -0000	2.5
+++ bomp.cpp	1 Jun 2003 14:30:24 -0000	2.6
@@ -198,7 +198,6 @@
 	byte *dst;
 	byte maskbit;
 	byte *mask = 0;
-	int mask_offset;
 	byte *charset_mask;
 	int clip_left, clip_right, clip_top, clip_bottom;
 	byte *scalingYPtr = bd.scalingYPtr;
@@ -232,15 +231,14 @@
 	src = bd.dataptr;
 	dst = bd.out + bd.y * bd.outwidth + bd.x + clip_left;
 
-	mask_offset = _screenStartStrip + (bd.y * gdi._numStrips) + ((bd.x + clip_left) >> 3);
 	maskbit = revBitMask[(bd.x + clip_left) & 7];
 
 	// Always mask against the charset mask
-	charset_mask = getResourceAddress(rtBuffer, 9) + mask_offset;
+	charset_mask = getMaskBuffer(bd.x + clip_left, bd.y, 0);
 
 	// Also mask against any additionally imposed mask
 	if (bd.maskPtr) {
-		mask = bd.maskPtr + mask_offset;
+		mask = bd.maskPtr + (bd.y * gdi._numStrips) + ((bd.x + clip_left) >> 3);
 	}
 
 	// Setup vertical scaling

Index: camera.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/camera.cpp,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -d -r2.3 -r2.4
--- camera.cpp	30 May 2003 02:01:44 -0000	2.3
+++ camera.cpp	1 Jun 2003 14:30:24 -0000	2.4
@@ -54,6 +54,7 @@
 		runScript(VAR(VAR_SCROLL_SCRIPT), 0, 0, 0);
 	}
 
+	// If the camera moved and text is visible, remove it
 	if (camera._cur.x != camera._last.x && _charset->_hasMask)
 		stopTalk();
 }

Index: charset.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/charset.cpp,v
retrieving revision 2.36
retrieving revision 2.37
diff -u -d -r2.36 -r2.37
--- charset.cpp	1 Jun 2003 14:07:14 -0000	2.36
+++ charset.cpp	1 Jun 2003 14:30:24 -0000	2.37
@@ -560,7 +560,7 @@
 
 	char_ptr = _fontPtr + chr * 8;
 	dest_ptr = vs->screenPtr + vs->xstart + (_top - vs->topline) * _vm->_screenWidth + _left;
-	mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + _vm->_screenStartStrip + (_top - vs->topline) * _vm->gdi._numStrips + _left / 8;
+	mask_ptr = _vm->getMaskBuffer(_left, _top - vs->topline, 0);
 	useMask = (vs->number == 0 && !_ignoreCharsetMask);
 
 	_vm->updateDirtyRect(vs->number, _left, _left + w, _top - vs->topline, _top - vs->topline + h, 0);
@@ -711,9 +711,7 @@
 
 	_charPtr += 4;
 
-	byte *mask = _vm->getResourceAddress(rtBuffer, 9)
-		+ drawTop * _vm->gdi._numStrips + _left / 8 + _vm->_screenStartStrip;
-
+	byte *mask = _vm->getMaskBuffer(_left, drawTop, 0);
 	byte *dst = vs->screenPtr + vs->xstart + drawTop * _vm->_screenWidth + _left;
 
 	if (_blitAlso) {

Index: costume.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/costume.cpp,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -d -r1.54 -r1.55
--- costume.cpp	1 Jun 2003 01:00:44 -0000	1.54
+++ costume.cpp	1 Jun 2003 14:30:24 -0000	1.55
@@ -247,7 +247,7 @@
 
 	v1.destptr = _outptr + v1.y * _outwidth + v1.x;
 
-	v1.mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + v1.y * _numStrips + _vm->_screenStartStrip;
+	v1.mask_ptr = _vm->getMaskBuffer(0, v1.y, 0);
 	v1.imgbufoffs = _vm->gdi._imgBufOffs[_zbuf];
 
 	CHECK_HEAP

Index: debugger.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/debugger.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- debugger.cpp	31 May 2003 14:32:35 -0000	1.57
+++ debugger.cpp	1 Jun 2003 14:30:25 -0000	1.58
@@ -895,7 +895,7 @@
 
 	VirtScreen *vs = _s->findVirtScreen(coords.ul.y);
 	if (vs != NULL)
-		_s->setVirtscreenDirty(vs, 0, 0, _s->_screenWidth, _s->_screenHeight);
+		_s->updateDirtyRect(vs->number, 0, _s->_screenWidth, 0, _s->_screenHeight, 0);
 	_s->drawDirtyScreenParts();
 	_s->_system->update_screen();
 }

Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.132
retrieving revision 2.133
diff -u -d -r2.132 -r2.133
--- gfx.cpp	1 Jun 2003 01:02:34 -0000	2.132
+++ gfx.cpp	1 Jun 2003 14:30:26 -0000	2.133
@@ -188,7 +188,7 @@
 		VAR(VAR_PERFORMANCE_1) = 0;
 
 	for (i = 10; i != 0; i--) {
-		setDirtyRange(0, 0, _screenHeight);	//ender
+		virtscr[0].setDirtyRange(0, _screenHeight);	//ender
 		drawDirtyScreenParts();
 	}
 
@@ -266,7 +266,7 @@
 	}
 
 	if (slot != 3) {
-		setDirtyRange(slot, 0, height);
+		virtscr[slot].setDirtyRange(0, height);
 	}
 }
 
@@ -317,12 +317,9 @@
 			setGfxUsageBit(lp, dirtybit);
 	}
 
-	setVirtscreenDirty(vs, left, top, right, bottom);
-}
-
-void Scumm::setVirtscreenDirty(VirtScreen *vs, int left, int top, int right, int bottom) {
-	int lp = left >> 3;
-	int rp = right >> 3;
+	// The following code used to be in the seperate method setVirtscreenDirty
+	lp = left >> 3;
+	rp = right >> 3;
 
 	if ((lp >= gdi._numStrips) || (rp < 0))
 		return;
@@ -340,15 +337,6 @@
 	}
 }
 
-void Scumm::setDirtyRange(int slot, int top, int bottom) {
-	int i;
-	VirtScreen *vs = &virtscr[slot];
-	for (i = 0; i < gdi._numStrips; i++) {
-		vs->tdirty[i] = top;
-		vs->bdirty[i] = bottom;
-	}
-}
-
 void Scumm::drawDirtyScreenParts() {
 	int i;
 	VirtScreen *vs;
@@ -477,10 +465,10 @@
 	if (bottom > vs->bdirty[strip])
 		vs->bdirty[strip] = bottom;
 
-	offs = (top * _numStrips + _vm->_screenStartStrip + strip);
-	byte *mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + offs;
-	bgbak_ptr = _vm->getResourceAddress(rtBuffer, 5) + (offs << 3);
-	backbuff_ptr = vs->screenPtr + (offs << 3);
+	offs = (top * _numStrips + _vm->_screenStartStrip + strip) << 3;
+	byte *mask_ptr = _vm->getMaskBuffer(strip * 8, top, 0);
+	bgbak_ptr = _vm->getResourceAddress(rtBuffer, 5) + offs;
+	backbuff_ptr = vs->screenPtr + offs;
 
 	numLinesToProcess = bottom - top;
 	if (numLinesToProcess) {
@@ -840,7 +828,7 @@
 			if (rect.right & 0x07)
 				mask_width++;
 
-			mask = getResourceAddress(rtBuffer, 9) + rect.top * gdi._numStrips + (rect.left >> 3) + _screenStartStrip;
+			mask = getMaskBuffer(rect.left, rect.top, 0);
 			if (vs->number == 0)
 				mask += vs->topline * gdi._numStrips;
 
@@ -871,35 +859,12 @@
 			&& right >= gdi._mask.left;
 }
 
-bool Scumm::isMaskActiveAt(int l, int t, int r, int b, byte *mem) {
-	int w, h, i;
-
-	l >>= 3;
-	if (l < 0)
-		l = 0;
-	if (t < 0)
-		t = 0;
-
-	r >>= 3;
-	if (r > gdi._numStrips - 1)
-		r = gdi._numStrips - 1;
-
-	mem += l + t * gdi._numStrips;
-
-	w = r - l;
-	h = b - t + 1;
-
-	do {
-		for (i = 0; i <= w; i++)
-			if (mem[i]) {
-				return true;
-			}
-		mem += gdi._numStrips;
-	} while (--h);
-
-	return false;
+byte *Scumm::getMaskBuffer(int x, int y, int z) {
+	return getResourceAddress(rtBuffer, 9)
+			+ _screenStartStrip + (x / 8) + y * gdi._numStrips + gdi._imgBufOffs[z];
 }
 
+
 #pragma mark -
 #pragma mark --- Image drawing ---
 #pragma mark -
@@ -1237,7 +1202,7 @@
 #if 0
 		// HACK: blit mask(s) onto normal screen. Useful to debug masking 
 		for (i = 0; i < numzbuf; i++) {
-			mask_ptr = _vm->getResourceAddress(rtBuffer, 9) + y * _numStrips + x + _imgBufOffs[i];
+			mask_ptr = _vm->getMaskBuffer(x, y, i);
 			byte *dst = backbuff_ptr;
 			byte *dst2 = bgbak_ptr;
 			for (int h = 0; h < height; h++) {
@@ -2026,7 +1991,7 @@
 void Scumm::fadeOut(int effect) {
 	VirtScreen *vs;
 
-	setDirtyRange(0, 0, 0);
+	virtscr[0].setDirtyRange(0, 0);
 	if (!(_features & GF_AFTER_V7))
 		camera._last.x = camera._cur.x;
 
@@ -2049,7 +2014,7 @@
 			break;
 		case 129:
 			// Just blit screen 0 to the display (i.e. display will be black)
-			setDirtyRange(0, 0, vs->height);
+			virtscr[0].setDirtyRange(0, vs->height);
 			updateDirtyScreen(0);
 			break;
 		case 134:

Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -d -r1.37 -r1.38
--- gfx.h	1 Jun 2003 01:02:35 -0000	1.37
+++ gfx.h	1 Jun 2003 14:30:26 -0000	1.38
@@ -53,6 +53,13 @@
 	uint16 bdirty[80];
 	byte *screenPtr;
 	byte *backBuf;
+
+	void setDirtyRange(int top, int bottom) {
+		for (int i = 0; i < 80; i++) {
+			tdirty[i] = top;
+			bdirty[i] = bottom;
+		}
+	}
 };
 
 struct ColorCycle {		/** Palette cycles */

Index: nut_renderer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/nut_renderer.cpp,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- nut_renderer.cpp	27 May 2003 15:31:12 -0000	1.24
+++ nut_renderer.cpp	1 Jun 2003 14:30:26 -0000	1.25
@@ -197,8 +197,7 @@
 		color = cTable[i];
 	
 		dst = _vm->virtscr[0].screenPtr + y * _vm->_screenWidth + x + _vm->virtscr[0].xstart;
-		mask = _vm->getResourceAddress(rtBuffer, 9)
-						+ (y * _vm->_screenWidth + x) / 8 + _vm->_screenStartStrip;
+		mask = _vm->getMaskBuffer(x, y, 0);
 	
 		src = _tmpCodecBuffer;
 	

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.233
retrieving revision 1.234
diff -u -d -r1.233 -r1.234
--- scumm.h	1 Jun 2003 13:09:28 -0000	1.233
+++ scumm.h	1 Jun 2003 14:30:26 -0000	1.234
@@ -868,17 +868,12 @@
 public:
 	void updateDirtyRect(int virt, int left, int right, int top, int bottom, int dirtybit);
 protected:
-	void setDirtyRange(int slot, int a, int height);
 	void drawDirtyScreenParts();
 	void updateDirtyScreen(int slot);
 
 public:
 	VirtScreen *findVirtScreen(int y);
-protected:
-	void setVirtscreenDirty(VirtScreen *vs, int left, int top, int right, int bottom);
-
-public:
-	bool isMaskActiveAt(int l, int t, int r, int b, byte *mem);
+	byte *getMaskBuffer(int x, int y, int z);
 
 protected:
 	void drawFlashlight();





More information about the Scummvm-git-logs mailing list