[Scummvm-cvs-logs] SF.net SVN: scummvm:[38839] scummvm/trunk/engines/sci/gfx/gfx_driver.cpp

waltervn at users.sourceforge.net waltervn at users.sourceforge.net
Tue Feb 24 13:01:29 CET 2009


Revision: 38839
          http://scummvm.svn.sourceforge.net/scummvm/?rev=38839&view=rev
Author:   waltervn
Date:     2009-02-24 12:01:28 +0000 (Tue, 24 Feb 2009)

Log Message:
-----------
SCI: call updateScreen after every copyRectToScreen; removed internal front visual buffer

Modified Paths:
--------------
    scummvm/trunk/engines/sci/gfx/gfx_driver.cpp

Modified: scummvm/trunk/engines/sci/gfx/gfx_driver.cpp
===================================================================
--- scummvm/trunk/engines/sci/gfx/gfx_driver.cpp	2009-02-24 11:20:45 UTC (rev 38838)
+++ scummvm/trunk/engines/sci/gfx/gfx_driver.cpp	2009-02-24 12:01:28 UTC (rev 38839)
@@ -35,11 +35,10 @@
 
 struct _scummvm_driver_state {
 	gfx_pixmap_t *priority[2];
-	byte *visual[3];
+	byte *visual[2];
 	uint8 *pointer_data;
 	int xsize, ysize;
 	//int buckystate;
-	bool update_screen;
 	bool update_mouse;
 };
 
@@ -68,7 +67,7 @@
 		}
 	}
 	// create the visual buffers
-	for (i = 0; i < 3; i++) {
+	for (i = 0; i < 2; i++) {
 		S->visual[i] = NULL;
 		S->visual[i] = new byte[S->xsize * S->ysize];
 		if (!S->visual[i]) {
@@ -95,7 +94,7 @@
 			S->priority[i] = NULL;
 		}
 
-		for (i = 0; i < 3; i++) {
+		for (i = 0; i < 2; i++) {
 			delete[] S->visual[i];
 			S->visual[i] = NULL;
 		}
@@ -112,7 +111,7 @@
 
 static void drawProc(int x, int y, int c, void *data) {
 	gfx_driver_t *drv = (gfx_driver_t *)data;
-	uint8 *p = S->visual[1];
+	uint8 *p = S->visual[0];
 	p[y * 320*drv->mode->xfact + x] = c;
 }
 
@@ -151,7 +150,7 @@
 	gfx_rectangle_fill_t shade_mode) {
 	if (color1.mask & GFX_MASK_VISUAL) {
 		for (int i = rect.y; i < rect.y + rect.yl; i++) {
-			memset(S->visual[1] + i * S->xsize + rect.x, color1.visual.global_index, rect.xl);
+			memset(S->visual[0] + i * S->xsize + rect.x, color1.visual.global_index, rect.xl);
 		}
 	}
 
@@ -165,8 +164,7 @@
 
 static int scummvm_draw_pixmap(gfx_driver_t *drv, gfx_pixmap_t *pxm, int priority,
 							   rect_t src, rect_t dest, gfx_buffer_t buffer) {
-	int bufnr = (buffer == GFX_BUFFER_STATIC) ? 2 : 1;
-	int pribufnr = bufnr - 1;
+	int bufnr = (buffer == GFX_BUFFER_STATIC) ? 1 : 0;
 
 	if (dest.xl != src.xl || dest.yl != src.yl) {
 		printf("Attempt to scale pixmap (%dx%d)->(%dx%d): Not supported\n", src.xl, src.yl, dest.xl, dest.yl);
@@ -174,7 +172,7 @@
 	}
 
 	gfx_crossblit_pixmap(drv->mode, pxm, priority, src, dest, S->visual[bufnr], S->xsize,
-	                     S->priority[pribufnr]->index_data, S->priority[pribufnr]->index_xl, 1, 0);
+	                     S->priority[bufnr]->index_data, S->priority[bufnr]->index_xl, 1, 0);
 
 	return GFX_OK;
 }
@@ -196,7 +194,7 @@
 		pxm->xl = src.xl;
 		pxm->yl = src.yl;
 		for (int i = 0; i < src.yl; i++) {
-			memcpy(pxm->data + i * src.xl, S->visual[1] + (i + src.y) * S->xsize + src.x, src.xl);
+			memcpy(pxm->data + i * src.xl, S->visual[0] + (i + src.y) * S->xsize + src.x, src.xl);
 		}
 		break;
 
@@ -216,8 +214,6 @@
 
 static int scummvm_update(gfx_driver_t *drv, rect_t src, Common::Point dest, gfx_buffer_t buffer) {
 	//TODO
-	int data_source = (buffer == GFX_BUFFER_BACK) ? 2 : 1;
-	int data_dest = data_source - 1;
 
 	/*
 	if (src.x != dest.x || src.y != dest.y) {
@@ -229,24 +225,17 @@
 
 	switch (buffer) {
 	case GFX_BUFFER_BACK:
-		//memcpy(S->visual[data_dest], S->visual[data_source],
-		//	S->xsize * S->ysize);
 		for (int i = 0; i < src.yl; i++) {
-			memcpy(S->visual[data_dest] + (dest.y + i) * S->xsize + dest.x,
-			       S->visual[data_source] + (src.y + i) * S->xsize + src.x, src.xl);
+			memcpy(S->visual[0] + (dest.y + i) * S->xsize + dest.x,
+			       S->visual[1] + (src.y + i) * S->xsize + src.x, src.xl);
 		}
 
 		if ((src.x == dest.x) && (src.y == dest.y))
 			gfx_copy_pixmap_box_i(S->priority[0], S->priority[1], src);
 		break;
 	case GFX_BUFFER_FRONT:
-		memcpy(S->visual[data_dest], S->visual[data_source], S->xsize * S->ysize);
-
-		g_system->copyRectToScreen(S->visual[data_dest] + src.x + src.y * S->xsize, S->xsize, dest.x, dest.y, src.xl, src.yl);
-		/*
-		g_system->copyRectToScreen(S->visual[data_dest], S->xsize, 0, 0, S->xsize, S->ysize);
-		*/
-		S->update_screen = true;
+		g_system->copyRectToScreen(S->visual[0] + src.x + src.y * S->xsize, S->xsize, dest.x, dest.y, src.xl, src.yl);
+		g_system->updateScreen();
 		break;
 	default:
 		GFXERROR("Invalid buffer %d in update!\n", buffer);
@@ -257,10 +246,7 @@
 }
 
 static int scummvm_set_static_buffer(gfx_driver_t *drv, gfx_pixmap_t *pic, gfx_pixmap_t *priority) {
-	memcpy(S->visual[2], pic->data, S->xsize * S->ysize);
-	/*gfx_crossblit_pixmap(drv->mode, pic, 0, rect, rect, S->visual[2], S->xsize, S->priority[1]->index_data,
-							S->priority[1]->index_xl, 1, 0);*/
-
+	memcpy(S->visual[1], pic->data, S->xsize * S->ysize);
 	gfx_copy_pixmap_box_i(S->priority[1], priority, gfx_rect(0, 0, S->xsize, S->ysize));
 
 	return GFX_OK;
@@ -349,9 +335,8 @@
 	// Update the screen here, since it's called very often
 	if (S->update_mouse)
 		g_system->warpMouse(drv->pointer_x, drv->pointer_y);
-	if (S->update_screen || S->update_mouse) {
+	if (S->update_mouse) {
 		g_system->updateScreen();
-		S->update_screen = false;
 		S->update_mouse = false;
 	}
 


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