[Bf-blender-cvs] [b49e6d0] master: Bake-API: small cleanup to prevent unfreed memory when there are baking errors

Dalai Felinto noreply at git.blender.org
Thu Jun 19 00:49:31 CEST 2014


Commit: b49e6d04ccb672029478d681133efae9842ba330
Author: Dalai Felinto
Date:   Wed Jun 18 19:46:34 2014 -0300
https://developer.blender.org/rBb49e6d04ccb672029478d681133efae9842ba330

Bake-API: small cleanup to prevent unfreed memory when there are baking errors

Fix to be included in 2.71

===================================================================

M	source/blender/editors/object/object_bake_api.c

===================================================================

diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c
index 6e291e4..78c037d 100644
--- a/source/blender/editors/object/object_bake_api.c
+++ b/source/blender/editors/object/object_bake_api.c
@@ -551,6 +551,13 @@ static int bake(
 	re = RE_NewRender(scene->id.name);
 	RE_SetReports(re, NULL);
 
+	RE_bake_engine_set_engine_parameters(re, bmain, scene);
+
+	if (!RE_bake_has_engine(re)) {
+		BKE_report(reports, RPT_ERROR, "Current render engine does not support baking");
+		goto cleanup;
+	}
+
 	tot_materials = ob_low->totcol;
 
 	if (uv_layer && uv_layer[0] != '\0') {
@@ -640,8 +647,6 @@ static int bake(
 		}
 	}
 
-	RE_bake_engine_set_engine_parameters(re, bmain, scene);
-
 	/* blender_test_break uses this global */
 	G.is_break = false;
 
@@ -753,35 +758,32 @@ static int bake(
 		            me_low, pixel_array_low, highpoly, tot_highpoly, num_pixels, ob_cage != NULL,
 		            cage_extrusion, ob_low->obmat, (ob_cage ? ob_cage->obmat : ob_low->obmat), me_cage)) {
 			BKE_report(reports, RPT_ERROR, "Error handling selected objects");
-			goto cleanup;
+			goto cage_cleanup;
 		}
 
 		/* the baking itself */
 		for (i = 0; i < tot_highpoly; i++) {
-			if (RE_bake_has_engine(re)) {
-				ok = RE_bake_engine(re, highpoly[i].ob, highpoly[i].pixel_array, num_pixels,
-				                    depth, pass_type, result);
-			}
-			else {
-				BKE_report(reports, RPT_ERROR, "Current render engine does not support baking");
-				goto cleanup;
+			ok = RE_bake_engine(re, highpoly[i].ob, highpoly[i].pixel_array, num_pixels,
+			                    depth, pass_type, result);
+			if (!ok) {
+				BKE_reportf(reports, RPT_ERROR, "Error baking from object \"%s\"", highpoly[i].ob->id.name + 2);
+				goto cage_cleanup;
 			}
-
-			if (!ok)
-				break;
 		}
 
+cage_cleanup:
 		/* reverting data back */
-		if (ob_cage) {
-			ob_cage->restrictflag = restrict_flag_cage;
-		}
-		else if (is_cage) {
+		if ((ob_cage == NULL) && is_cage) {
 			ob_low->modifiers = modifiers_original;
 
 			while ((md = BLI_pophead(&modifiers_tmp))) {
 				modifier_free(md);
 			}
 		}
+
+		if (!ok) {
+			goto cleanup;
+		}
 	}
 	else {
 		/* make sure low poly renders */




More information about the Bf-blender-cvs mailing list