[Bf-blender-cvs] [9982ae2] experimental-build: Revert "Bake-API: reduce memory footprint when baking more than one object [test"

Dalai Felinto noreply at git.blender.org
Tue Feb 10 18:07:31 CET 2015


Commit: 9982ae284f241e71b574cfa141e3a8fe4d011d09
Author: Dalai Felinto
Date:   Tue Feb 10 15:07:01 2015 -0200
Branches: experimental-build
https://developer.blender.org/rB9982ae284f241e71b574cfa141e3a8fe4d011d09

Revert "Bake-API: reduce memory footprint when baking more than one object [test"

This reverts commit 087ee57dbaa2f90354f985cfc3b8320c1ce3df90.

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

M	intern/cycles/blender/blender_session.cpp
M	source/blender/editors/object/object_bake_api.c
M	source/blender/makesrna/intern/rna_render.c
M	source/blender/render/extern/include/RE_bake.h
M	source/blender/render/intern/include/render_types.h
M	source/blender/render/intern/source/bake_api.c
M	source/blender/render/intern/source/external_engine.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 5835cc8..eb3f54a 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -498,13 +498,13 @@ void BlenderSession::render()
 	sync = NULL;
 }
 
-static void populate_bake_data(BL::RenderEngine b_engine, BakeData *data, BL::BakePixel pixel_array, const int num_pixels)
+static void populate_bake_data(BakeData *data, BL::BakePixel pixel_array, const int num_pixels)
 {
 	BL::BakePixel bp = pixel_array;
 
 	int i;
 	for(i=0; i < num_pixels; i++) {
-		data->set(i, bp.primitive_id(b_engine), bp.uv(), bp.du_dx(), bp.du_dy(), bp.dv_dx(), bp.dv_dy());
+		data->set(i, bp.primitive_id(), bp.uv(), bp.du_dx(), bp.du_dy(), bp.dv_dx(), bp.dv_dy());
 		bp = bp.next();
 	}
 }
@@ -565,7 +565,7 @@ void BlenderSession::bake(BL::Object b_object, const string& pass_type, BL::Bake
 
 	BakeData *bake_data = scene->bake_manager->init(object, tri_offset, num_pixels);
 
-	populate_bake_data(b_engine, bake_data, pixel_array, num_pixels);
+	populate_bake_data(bake_data, pixel_array, num_pixels);
 
 	/* set number of samples */
 	session->tile_manager.set_samples(session_params.samples);
diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c
index 344d3bd..fca527f 100644
--- a/source/blender/editors/object/object_bake_api.c
+++ b/source/blender/editors/object/object_bake_api.c
@@ -571,7 +571,6 @@ static int bake(
 	float *result = NULL;
 
 	BakePixel *pixel_array_low = NULL;
-	BakePixel *pixel_array_high = NULL;
 
 	const bool is_save_internal = (save_mode == R_BAKE_SAVE_INTERNAL);
 	const bool is_noncolor = is_noncolor_pass(pass_type);
@@ -680,7 +679,6 @@ static int bake(
 	}
 
 	pixel_array_low = MEM_mallocN(sizeof(BakePixel) * num_pixels, "bake pixels low poly");
-	pixel_array_high = MEM_mallocN(sizeof(BakePixel) * num_pixels, "bake pixels high poly");
 	result = MEM_callocN(sizeof(float) * depth * num_pixels, "bake return pixels");
 
 	/* get the mesh as it arrives in the renderer */
@@ -748,6 +746,8 @@ static int bake(
 			/* initialize highpoly_data */
 			highpoly[i].ob = ob_iter;
 			highpoly[i].restrict_flag = ob_iter->restrictflag;
+			highpoly[i].pixel_array = MEM_mallocN(sizeof(BakePixel) * num_pixels, "bake pixels high poly");
+
 
 			/* triangulating so BVH returns the primitive_id that will be used for rendering */
 			highpoly[i].tri_mod = ED_object_modifier_add(
@@ -779,7 +779,7 @@ static int bake(
 
 		/* populate the pixel arrays with the corresponding face data for each high poly object */
 		if (!RE_bake_pixels_populate_from_objects(
-		            me_low, pixel_array_low, pixel_array_high, highpoly, tot_highpoly, num_pixels, ob_cage != NULL,
+		            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");
@@ -788,8 +788,7 @@ static int bake(
 
 		/* the baking itself */
 		for (i = 0; i < tot_highpoly; i++) {
-			RE_bake_object_id_set(re, i);
-			ok = RE_bake_engine(re, highpoly[i].ob, pixel_array_high, num_pixels,
+			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);
@@ -816,7 +815,6 @@ cage_cleanup:
 		ob_low->restrictflag &= ~OB_RESTRICT_RENDER;
 
 		if (RE_bake_has_engine(re)) {
-			RE_bake_object_id_set(re, 0);
 			ok = RE_bake_engine(re, ob_low, pixel_array_low, num_pixels, depth, pass_type, result);
 		}
 		else {
@@ -979,6 +977,9 @@ cleanup:
 		for (i = 0; i < tot_highpoly; i++) {
 			highpoly[i].ob->restrictflag = highpoly[i].restrict_flag;
 
+			if (highpoly[i].pixel_array)
+				MEM_freeN(highpoly[i].pixel_array);
+
 			if (highpoly[i].tri_mod)
 				ED_object_modifier_remove(reports, bmain, highpoly[i].ob, highpoly[i].tri_mod);
 
@@ -996,9 +997,6 @@ cleanup:
 	if (pixel_array_low)
 		MEM_freeN(pixel_array_low);
 
-	if (pixel_array_high)
-		MEM_freeN(pixel_array_high);
-
 	if (bake_images.data)
 		MEM_freeN(bake_images.data);
 
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 67e0ba7..124a83a 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -31,8 +31,6 @@
 #include "BLI_utildefines.h"
 #include "BLI_path_util.h"
 
-#include "BKE_global.h"
-
 #include "RNA_define.h"
 #include "RNA_enum_types.h"
 
@@ -386,14 +384,6 @@ static PointerRNA rna_BakePixel_next_get(PointerRNA *ptr)
 	return rna_pointer_inherit_refine(ptr, &RNA_BakePixel, bp + 1);
 }
 
-static int rna_BakePixel_primitive_id_get(BakePixel *bp, RenderEngine *engine)
-{
-	if (RE_bake_object_id_get(engine->re) == bp->object_id)
-		return bp->primitive_id;
-	else
-		return -1;
-}
-
 #else /* RNA_RUNTIME */
 
 static void rna_def_render_engine(BlenderRNA *brna)
@@ -750,14 +740,16 @@ static void rna_def_render_bake_pixel(BlenderRNA *brna)
 {
 	StructRNA *srna;
 	PropertyRNA *prop;
-	FunctionRNA *func;
-	PropertyRNA *parm;
 
 	srna = RNA_def_struct(brna, "BakePixel", NULL);
 	RNA_def_struct_ui_text(srna, "Bake Pixel", "");
 
 	RNA_define_verify_sdna(0);
 
+	prop = RNA_def_property(srna, "primitive_id", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "primitive_id");
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
 	prop = RNA_def_property(srna, "uv", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_array(prop, 2);
 	RNA_def_property_float_sdna(prop, NULL, "uv");
@@ -784,12 +776,6 @@ static void rna_def_render_bake_pixel(BlenderRNA *brna)
 	RNA_def_property_pointer_funcs(prop, "rna_BakePixel_next_get", NULL, NULL, NULL);
 	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
 
-	func = RNA_def_function(srna, "primitive_id", "rna_BakePixel_primitive_id_get");
-	RNA_def_function_ui_description(func, "Get the primitive id for the current Bake Pixel");
-	parm = RNA_def_pointer(func, "engine", "RenderEngine", "", "Render Engine");
-	parm = RNA_def_int(func, "object_id", 0, -1, INT_MAX, "Object ID", "", -1, INT_MAX);
-	RNA_def_function_return(func, parm);
-
 	RNA_define_verify_sdna(1);
 }
 
diff --git a/source/blender/render/extern/include/RE_bake.h b/source/blender/render/extern/include/RE_bake.h
index 518a1fc..481da45 100644
--- a/source/blender/render/extern/include/RE_bake.h
+++ b/source/blender/render/extern/include/RE_bake.h
@@ -49,13 +49,14 @@ typedef struct BakeImages {
 } BakeImages;
 
 typedef struct BakePixel {
-	int primitive_id, object_id;
+	int primitive_id;
 	float uv[2];
 	float du_dx, du_dy;
 	float dv_dx, dv_dy;
 } BakePixel;
 
 typedef struct BakeHighPolyData {
+	struct BakePixel *pixel_array;
 	struct Object *ob;
 	struct ModifierData *tri_mod;
 	struct Mesh *me;
@@ -68,8 +69,6 @@ typedef struct BakeHighPolyData {
 
 /* external_engine.c */
 bool RE_bake_has_engine(struct Render *re);
-void RE_bake_object_id_set(struct Render *re, int object_id);
-int RE_bake_object_id_get(struct Render *re);
 
 bool RE_bake_engine(
         struct Render *re, struct Object *object, const BakePixel pixel_array[],
@@ -82,7 +81,7 @@ bool RE_bake_internal(
         const size_t num_pixels, const int depth, const ScenePassType pass_type, float result[]);
 
 bool RE_bake_pixels_populate_from_objects(
-        struct Mesh *me_low, BakePixel pixel_array_from[], BakePixel pixel_array_to[],
+        struct Mesh *me_low, BakePixel pixel_array_from[],
         BakeHighPolyData highpoly[], const int tot_highpoly, const size_t num_pixels, const bool is_custom_cage,
         const float cage_extrusion, float mat_low[4][4], float mat_cage[4][4], struct Mesh *me_cage);
 
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 575e436..8d92fb9 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -275,9 +275,6 @@ struct Render
 
 	struct ImagePool *pool;
 	struct EvaluationContext *eval_ctx;
-
-	/* current object being baked - used by Bake API only */
-	int baking_object_id;
 };
 
 /* ------------------------------------------------------------------------- */
diff --git a/source/blender/render/intern/source/bake_api.c b/source/blender/render/intern/source/bake_api.c
index fff050e..48ef291 100644
--- a/source/blender/render/intern/source/bake_api.c
+++ b/source/blender/render/intern/source/bake_api.c
@@ -132,7 +132,6 @@ static void store_bake_pixel(void *handle, int x, int y, float u, float v)
 	pixel->du_dy = bd->du_dy;
 	pixel->dv_dx = bd->dv_dx;
 	pixel->dv_dy = bd->dv_dy;
-	pixel->object_id = 0;
 }
 
 void RE_bake_mask_fill(const BakePixel pixel_array[], const size_t num_pixels, char *mask)
@@ -272,7 +271,7 @@ static void calc_barycentric_from_point(
  * This function populates pixel_array and returns TRUE if things are correct
  */
 static bool cast_ray_highpoly(
-        BVHTreeFromMesh *treeData, TriTessFace *triangles[], BakePixel *pixel_array, BakeHighPolyData *highpoly,
+        BVHTreeFromMesh *treeData, TriTessFace *triangles[], BakeHighPolyData *highpoly,
         const float co[3], const float dir[3], const int pixel_id, const int tot_highpoly,
         const float du_dx, const float du_dy, const float dv_dx, const float dv_dy)
 {
@@ -323,22 +322,22 @@ static bool cast_ray_highpoly(
 		}
 	}
 
-	if (hit_mesh != -1) {
-		calc_barycentric_from_point(triangles[hit_mesh], hits[hit_mesh].index, hits[hit_mesh].co, &primitive_id, uv);
-		pixel_array[pixel_id].primitive_id = primitive_id;
-		pixel_array[pixel_id].object_id = hit_mesh;
-		copy_v2_v2(pixel_array[pixel_id].uv, uv);
-
-		/* the differentials are relative to the UV/image space, so the highpoly differentials
-		 * are the same as the low poly differentials */
-		pixel_array[pixel_id].du_dx = du_dx;
-		pixel_array[pixel_id].du_dy = du_dy;
-		pixel_array[pixel_id].dv_dx = dv_dx;
-		pixel_array[pixel_id].dv_dy = dv_dy;
-	}
-	else {
-		pixel_array[pixel_id].primitive_id = -1;
-		pixel_arra

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list