[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40772] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: Fix #27532: Undo test texture after painting gives black blocks.

Sergey Sharybin g.ulairi at gmail.com
Mon Oct 3 15:01:24 CEST 2011


Revision: 40772
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40772
Author:   nazgul
Date:     2011-10-03 13:01:24 +0000 (Mon, 03 Oct 2011)
Log Message:
-----------
Fix #27532: Undo test texture after painting gives black blocks.

- Do not apply undo tiles on image if source or generated type was changed.
- Added null-check in own recent commit in this area.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2011-10-03 12:56:33 UTC (rev 40771)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2011-10-03 13:01:24 UTC (rev 40772)
@@ -360,6 +360,9 @@
 
 	void *rect;
 	int x, y;
+
+	short source;
+	char gen_type;
 } UndoImageTile;
 
 static ImagePaintPartialRedraw imapaintpartial = {0, 0, 0, 0, 0};
@@ -390,8 +393,9 @@
 	int allocsize;
 
 	for(tile=lb->first; tile; tile=tile->next)
-		if(tile->x == x_tile && tile->y == y_tile && strcmp(tile->idname, ima->id.name)==0 && strcmp(tile->ibufname, ibuf->name)==0)
-			return tile->rect;
+		if(tile->x == x_tile && tile->y == y_tile && ima->gen_type == tile->gen_type && ima->source == tile->source)
+			if(strcmp(tile->idname, ima->id.name)==0 && strcmp(tile->ibufname, ibuf->name)==0)
+				return tile->rect;
 	
 	if (*tmpibuf==NULL)
 		*tmpibuf = IMB_allocImBuf(IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, 32, IB_rectfloat|IB_rect);
@@ -407,6 +411,9 @@
 
 	strcpy(tile->ibufname, ibuf->name);
 
+	tile->gen_type= ima->gen_type;
+	tile->source= ima->source;
+
 	undo_copy_tile(tile, *tmpibuf, ibuf, 0);
 	undo_paint_push_count_alloc(UNDO_PAINT_IMAGE, allocsize);
 
@@ -436,7 +443,7 @@
 
 		ibuf= BKE_image_get_ibuf(ima, NULL);
 
-		if(ima && strcmp(tile->ibufname, ibuf->name)!=0) {
+		if(ima && ibuf && strcmp(tile->ibufname, ibuf->name)!=0) {
 			/* current ImBuf filename was changed, probably current frame
 			   was changed when paiting on image sequence, rather than storing
 			   full image user (which isn't so obvious, btw) try to find ImBuf with
@@ -448,6 +455,9 @@
 		if (!ima || !ibuf || !(ibuf->rect || ibuf->rect_float))
 			continue;
 
+		if (ima->gen_type != tile->gen_type || ima->source != tile->source)
+			continue;
+
 		undo_copy_tile(tile, tmpibuf, ibuf, 1);
 
 		GPU_free_image(ima); /* force OpenGL reload */




More information about the Bf-blender-cvs mailing list