[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51310] trunk/blender/source/blender: Fixed missing display buffer and mipmaps invalidation in cases only

Sergey Sharybin sergey.vfx at gmail.com
Sun Oct 14 08:59:09 CEST 2012


Revision: 51310
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51310
Author:   nazgul
Date:     2012-10-14 06:59:01 +0000 (Sun, 14 Oct 2012)
Log Message:
-----------
Fixed missing display buffer and mipmaps invalidation in cases only
few of selected objects failed to bake.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_bake.c
    trunk/blender/source/blender/imbuf/intern/colormanagement.c
    trunk/blender/source/blender/render/intern/source/rendercore.c

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2012-10-14 04:50:43 UTC (rev 51309)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2012-10-14 06:59:01 UTC (rev 51310)
@@ -900,7 +900,7 @@
 
 		RE_bake_ibuf_filter(ibuf, (char *)ibuf->userdata, bkr->bake_filter);
 
-		ibuf->userflags |= IB_BITMAPDIRTY | IB_DISPLAY_BUFFER_INVALID;;
+		ibuf->userflags |= IB_BITMAPDIRTY | IB_DISPLAY_BUFFER_INVALID;
 
 		if (ibuf->rect_float)
 			ibuf->userflags |= IB_RECT_INVALID;
@@ -1366,20 +1366,23 @@
 		if (bkr->prev_r_raytrace == 0)
 			bkr->scene->r.mode &= ~R_RAYTRACE;
 
-
 	/* force OpenGL reload and mipmap recalc */
 	for (ima = G.main->image.first; ima; ima = ima->id.next) {
 		ImBuf *ibuf = BKE_image_get_ibuf(ima, NULL);
 
-		if (bkr->result == BAKE_RESULT_OK) {
-			if (ima->ok == IMA_OK_LOADED) {
-				if (ibuf) {
-					if (ibuf->userflags & IB_BITMAPDIRTY) {
-						ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID;
-						GPU_free_image(ima);
-						imb_freemipmapImBuf(ibuf);
-					}
+		/* some of the images could have been changed during bake,
+		 * so recreate mipmaps regardless bake result status
+		 */
+		if (ima->ok == IMA_OK_LOADED) {
+			if (ibuf) {
+				if (ibuf->userflags & IB_BITMAPDIRTY) {
+					GPU_free_image(ima);
+					imb_freemipmapImBuf(ibuf);
 				}
+
+				/* invalidate display buffers for changed images */
+				if (ibuf->userflags & IB_BITMAPDIRTY)
+					ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID;
 			}
 		}
 

Modified: trunk/blender/source/blender/imbuf/intern/colormanagement.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/colormanagement.c	2012-10-14 04:50:43 UTC (rev 51309)
+++ trunk/blender/source/blender/imbuf/intern/colormanagement.c	2012-10-14 06:59:01 UTC (rev 51310)
@@ -1822,7 +1822,7 @@
 			if (global_tot_display)
 				ibuf->display_buffer_flags = MEM_callocN(sizeof(unsigned int) * global_tot_display, "imbuf display_buffer_flags");
 		}
-		 else if (ibuf->userflags & IB_DISPLAY_BUFFER_INVALID) {
+		else if (ibuf->userflags & IB_DISPLAY_BUFFER_INVALID) {
 			/* all display buffers were marked as invalid from other areas,
 			 * now propagate this flag to internal color management routines
 			 */

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2012-10-14 04:50:43 UTC (rev 51309)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2012-10-14 06:59:01 UTC (rev 51310)
@@ -2513,7 +2513,9 @@
 						/* clear image */
 						if (R.r.bake_flag & R_BAKE_CLEAR)
 							IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? vec_alpha : vec_solid);
-					
+
+						ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID;
+
 						/* might be read by UI to set active image for display */
 						R.bakebuf= ima;
 					}				
@@ -2733,7 +2735,6 @@
 			RE_bake_ibuf_filter(ibuf, (char *)ibuf->userdata, re->r.bake_filter);
 
 			ibuf->userflags |= IB_BITMAPDIRTY;
-			if (ibuf->rect_float) IMB_rect_from_float(ibuf);
 		}
 	}
 	




More information about the Bf-blender-cvs mailing list