[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56263] trunk/blender/source/blender: fix relating to r56260, when in vertex paint mode the mesh would have tessfaces allocated, which prevented baking from updating vertex colors.

Campbell Barton ideasman42 at gmail.com
Wed Apr 24 15:53:09 CEST 2013


Revision: 56263
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56263
Author:   campbellbarton
Date:     2013-04-24 13:53:09 +0000 (Wed, 24 Apr 2013)
Log Message:
-----------
fix relating to r56260, when in vertex paint mode the mesh would have tessfaces allocated, which prevented baking from updating vertex colors.
baking now clears tessfaces.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56260

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_bake.c
    trunk/blender/source/blender/render/intern/source/bake.c

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2013-04-24 13:52:17 UTC (rev 56262)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2013-04-24 13:53:09 UTC (rev 56263)
@@ -61,6 +61,8 @@
 #include "BKE_modifier.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_subsurf.h"
+#include "BKE_depsgraph.h"
+#include "BKE_mesh.h"
 
 #include "RE_pipeline.h"
 #include "RE_shader_ext.h"
@@ -607,40 +609,58 @@
 			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_acquire_ibuf(ima, NULL, NULL);
+	if ((bkr->scene->r.bake_flag & R_BAKE_VCOL) == 0) {
+		for (ima = G.main->image.first; ima; ima = ima->id.next) {
+			ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, NULL);
 
-		/* some of the images could have been changed during bake,
-		 * so recreate mipmaps regardless bake result status
-		 */
-		if (ima->ok == IMA_OK_LOADED) {
+			/* 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;
+				}
+			}
+
+			/* freed when baking is done, but if its canceled we need to free here */
 			if (ibuf) {
-				if (ibuf->userflags & IB_BITMAPDIRTY) {
-					GPU_free_image(ima);
-					imb_freemipmapImBuf(ibuf);
+				if (ibuf->userdata) {
+					BakeImBufuserData *userdata = (BakeImBufuserData *) ibuf->userdata;
+					if (userdata->mask_buffer)
+						MEM_freeN(userdata->mask_buffer);
+					if (userdata->displacement_buffer)
+						MEM_freeN(userdata->displacement_buffer);
+					MEM_freeN(userdata);
+					ibuf->userdata = NULL;
 				}
+			}
 
-				/* invalidate display buffers for changed images */
-				if (ibuf->userflags & IB_BITMAPDIRTY)
-					ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID;
-			}
+			BKE_image_release_ibuf(ima, ibuf, NULL);
 		}
+	}
 
-		/* freed when baking is done, but if its canceled we need to free here */
-		if (ibuf) {
-			if (ibuf->userdata) {
-				BakeImBufuserData *userdata = (BakeImBufuserData *) ibuf->userdata;
-				if (userdata->mask_buffer)
-					MEM_freeN(userdata->mask_buffer);
-				if (userdata->displacement_buffer)
-					MEM_freeN(userdata->displacement_buffer);
-				MEM_freeN(userdata);
-				ibuf->userdata = NULL;
+	if (bkr->scene->r.bake_flag & R_BAKE_VCOL) {
+		/* update all tagged meshes */
+		Object *ob;
+		BLI_assert(BLI_thread_is_main());
+		for (ob = G.main->object.first; ob; ob = ob->id.next) {
+			if (ob->type == OB_MESH) {
+				Mesh *me = ob->data;
+				if (me->id.flag & LIB_DOIT) {
+					DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
+					BKE_mesh_tessface_clear(me);
+				}
 			}
 		}
+	}
 
-		BKE_image_release_ibuf(ima, ibuf, NULL);
-	}
 }
 
 static void *do_bake_render(void *bake_v)

Modified: trunk/blender/source/blender/render/intern/source/bake.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/bake.c	2013-04-24 13:52:17 UTC (rev 56262)
+++ trunk/blender/source/blender/render/intern/source/bake.c	2013-04-24 13:53:09 UTC (rev 56263)
@@ -47,7 +47,6 @@
 #include "DNA_meshdata_types.h"
 
 #include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
 #include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_main.h"
@@ -1105,19 +1104,6 @@
 		}
 	}
 
-	if (R.r.bake_flag & R_BAKE_VCOL) {
-		/* update all tagged meshes */
-		Object *ob;
-		for (ob = G.main->object.first; ob; ob = ob->id.next) {
-			if (ob->type == OB_MESH) {
-				Mesh *me = ob->data;
-				if (me->id.flag & LIB_DOIT) {
-					DAG_id_tag_update(&ob->id, OB_RECALC_OB | OB_RECALC_DATA);
-				}
-			}
-		}
-	}
-
 	MEM_freeN(handles);
 	
 	BLI_end_threads(&threads);




More information about the Bf-blender-cvs mailing list