[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.311,2.312

Travis Howell kirben at users.sourceforge.net
Mon Sep 20 06:42:03 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4682/scumm

Modified Files:
	gfx.cpp 
Log Message:

Clean up.


Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.311
retrieving revision 2.312
diff -u -d -r2.311 -r2.312
--- gfx.cpp	19 Sep 2004 21:14:51 -0000	2.311
+++ gfx.cpp	20 Sep 2004 13:41:36 -0000	2.312
@@ -1596,98 +1596,106 @@
 }
 
 void Gdi::decompressAuxImage(uint8 *dst1, uint8 *dst2, int dstPitch, const Common::Rect *dstRect, const uint8 *src, const Common::Rect *srcRect) {
-  	uint8 *dstCur2, *dstCur1;
-  	const uint8 *srcCur;
+	const uint8 *dataPtr, *dataPtrNext;
+	uint8 *dst1Ptr, *dst2Ptr, *dst1PtrNext, *dst2PtrNext;
+	int h, w, xoff;
+	uint16 off;
   	uint8 code;
   
-  	int w = srcRect->right - srcRect->left + 1;
-  	int h = srcRect->bottom - srcRect->top + 1;
-  	int off = dstRect->top * dstPitch + dstRect->left;
-
-  	dst1 += off;
-  	dst2 += off;
-
-  	int n = srcRect->top;
-  	while (n--) {
-		src += READ_LE_UINT16(src) + 2;
-  	}
+	dst1Ptr = dst1 + dstRect->left + dstRect->top * dstPitch;
+	dst2Ptr = dst2 + dstRect->left + dstRect->top * dstPitch;
+	dataPtr = src;
+	
+	// Skip over the first 'srcRect->top' lines in the data
+	h = srcRect->top;
+	while (h--) {
+		dataPtr += READ_LE_UINT16(dataPtr) + 2;
+	}
+	h = srcRect->bottom - srcRect->top + 1;
+	if (h <= 0)
+		return;
+	w = srcRect->right - srcRect->left + 1;
+	if (w <= 0)
+		return;
 
   	while (h--) {
-  		uint16 var_8 = READ_LE_UINT16(src);
-		src += 2;
-  		if (var_8) {
-  			int rw = w;
-  			int xoff = srcRect->left;
-  			srcCur = src;
-  			dstCur1 = dst1;
-  			dstCur2 = dst2;
+		xoff = srcRect->left;
+ 		off = READ_LE_UINT16(dataPtr);
+		w = srcRect->right - srcRect->left + 1;
+		dst1PtrNext = dstPitch + dst1Ptr;
+		dst2PtrNext = dstPitch + dst2Ptr;
+		dataPtrNext = off + 2 + dataPtr;
+		dataPtr += 2;
+		if (off == 0)
+			goto dec_next;
 
-			// Skip over the leftmost 'srcRect->left' pixels.
-			// TODO: This code could be merged (at a loss of efficency) with the
-			// loop below which does the actual drawing.
-  			while (xoff > 0) {
-				code = *srcCur++;
-				if (code & 1) {
-					code >>= 1;
-					if (code > xoff) {
-						code -= xoff;
-						goto dec_sub1;
-					}
-					xoff -= code;
-				} else if (code & 2) {
-					code = (code >> 2) + 1;
-					if (code > xoff) {
-						code -= xoff;
-						goto dec_sub2;
-					}
-					xoff -= code;
-					++srcCur;
-				} else {
-					code = (code >> 2) + 1;
-					if (code > xoff) {
-						code -= xoff;
-						srcCur += xoff;
-						goto dec_sub3;
-					}
-					xoff -= code;
-					srcCur += code;
+		// Skip over the leftmost 'srcRect->left' pixels.
+		// TODO: This code could be merged (at a loss of efficency) with the
+		// loop below which does the actual drawing.
+		while (xoff > 0) {
+			code = *dataPtr++;
+			if (code & 1) {
+				code >>= 1;
+				if (code > xoff) {
+					code -= xoff;
+					goto dec_sub1;
 				}
-  			}
-			while (rw > 0) {
-				code = *srcCur++;
-				if (code & 1) {
-					code >>= 1;
-dec_sub1:			dstCur1 += code;
-					dstCur2 += code;
-					rw -= code;					
-				} else if (code & 2) {
-					code = (code >> 2) + 1;
-dec_sub2:			rw -= code;
-					if (rw >= 0) {
-						memset(dstCur1, *srcCur++, code);
-						dstCur1 += code;
-						dstCur2 += code;
-					} else {
-						code += rw;
-						memset(dstCur1, *srcCur, code);
-					}
+				xoff -= code;
+			} else if (code & 2) {
+				code = (code >> 2) + 1;
+				if (code > xoff) {
+					code -= xoff;
+					goto dec_sub2;
+				}
+				xoff -= code;
+				++dataPtr;
+			} else {
+				code = (code >> 2) + 1;
+				if (code > xoff) {
+					code -= xoff;
+					dataPtr += xoff;
+					goto dec_sub3;
+				}
+				xoff -= code;
+				dataPtr += code;
+			}
+		}
+		while (w > 0) {
+			code = *dataPtr++;
+			if (code & 1) {
+				code >>= 1;
+dec_sub1:		dst1Ptr += code;
+				dst2Ptr += code;
+				w -= code;					
+			} else if (code & 2) {
+				code = (code >> 2) + 1;
+dec_sub2:			w -= code;
+				if (w >= 0) {
+					memset(dst1Ptr, *dataPtr++, code);
+					dst1Ptr += code;
+					dst2Ptr += code;
 				} else {
-					code = (code >> 2) + 1;
-dec_sub3:			rw -= code;
-					if (rw >= 0) {
-						memcpy(dstCur1, dstCur2, code);
-						dstCur1 += code;
-						dstCur2 += code;
-					} else {
-						code += rw;
-						memcpy(dstCur1, dstCur2, code);
-					}								
+					code += w;
+					memset(dst1Ptr, *dataPtr, code);
 				}
+			} else {
+				code = (code >> 2) + 1;
+dec_sub3:		w -= code;
+				if (w >= 0) {
+					memcpy(dst1Ptr, dst2Ptr, code);
+					dst1Ptr += code;
+					dst2Ptr += code;
+				} else {
+					code += w;
+					memcpy(dst1Ptr, dst2Ptr, code);
+				}								
 			}
-			src += var_8;
 		}
-		dst1 += dstPitch;
-		dst2 += dstPitch;
+		
+dec_next:
+		dataPtr = dataPtrNext;
+		dst1Ptr = dst1PtrNext;
+		dst2Ptr = dst2PtrNext;
 	}
 }
 





More information about the Scummvm-git-logs mailing list