[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