[Bf-blender-cvs] [10961fa] soc-2013-depsgraph_mt: Temporary remove derivedRender

Sergey Sharybin noreply at git.blender.org
Wed Dec 11 11:28:28 CET 2013


Commit: 10961faa924a281c8c50deae3cf074a9d89b557d
Author: Sergey Sharybin
Date:   Tue Dec 10 17:19:22 2013 +0600
http://developer.blender.org/rB10961faa924a281c8c50deae3cf074a9d89b557d

Temporary remove derivedRender

Couldn't say the idea was wrong, but some nasty bugs were
discovered with the approach and to make life simpler for
now it's easier to do hacks needed for boolean modifier
from the render pipeline by tagging needed operands for
the update.

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

M	source/blender/blenkernel/BKE_DerivedMesh.h
M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/constraint.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/shrinkwrap.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/modifiers/intern/MOD_util.c
M	source/blender/render/intern/source/convertblender.c
M	source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index 28a78e9..f5f6cab 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -642,8 +642,6 @@ DerivedMesh *mesh_get_derived_deform(struct Scene *scene, struct Object *ob,
 DerivedMesh *mesh_create_derived_for_modifier(struct Scene *scene, struct Object *ob,
                                               struct ModifierData *md, int build_shapekey_layers);
 
-DerivedMesh *mesh_get_derived_render(struct Scene *scene, struct Object *ob,
-                                     CustomDataMask dataMask);
 DerivedMesh *mesh_create_derived_render(struct Scene *scene, struct Object *ob,
                                         CustomDataMask dataMask);
 
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index becd843..7766593 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -67,7 +67,6 @@ void BKE_object_update_base_layer(struct Scene *scene, struct Object *ob);
 
 void BKE_object_free(struct Object *ob);
 void BKE_object_free_derived_caches(struct Object *ob);
-void BKE_object_free_derivedRender_caches(struct Object *ob);
 
 void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData *hmd);
 
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index ddb8a34..fa0f6e3 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2324,21 +2324,6 @@ void makeDerivedMesh(Scene *scene, Object *ob, BMEditMesh *em,
 	}
 }
 
-void makeDerivedMeshRender(Scene *scene, Object *ob, CustomDataMask dataMask)
-{
-	if (ob->derivedRender) {
-		ob->derivedRender->needsFree = 1;
-		ob->derivedRender->release(ob->derivedRender);
-	}
-
-	mesh_calc_modifiers(scene, ob, NULL, NULL, &ob->derivedRender, 1, 1, 0, dataMask, -1, 0, 0);
-
-	ob->derivedRender->needsFree = 0;
-	ob->lastRenderDataMask = dataMask;
-
-	BLI_assert(!(ob->derivedRender->dirty & DM_DIRTY_NORMALS));
-}
-
 /***/
 
 DerivedMesh *mesh_get_derived_final(Scene *scene, Object *ob, CustomDataMask dataMask)
@@ -2368,22 +2353,13 @@ DerivedMesh *mesh_get_derived_deform(Scene *scene, Object *ob, CustomDataMask da
 	return ob->derivedDeform;
 }
 
-DerivedMesh *mesh_get_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
-{
-	if (!ob->derivedRender || (dataMask & ob->lastRenderDataMask) != dataMask) {
-		makeDerivedMeshRender(scene, ob, dataMask);
-	}
-
-	return ob->derivedRender;
-}
-
 DerivedMesh *mesh_create_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
 {
-	if (!ob->derivedRender || (dataMask & ob->lastRenderDataMask) != dataMask) {
-		makeDerivedMeshRender(scene, ob, dataMask);
-	}
+	DerivedMesh *final;
+    
+	mesh_calc_modifiers(scene, ob, NULL, NULL, &final, 1, 1, 0, dataMask, -1, 0, 0);
 
-	return ob->derivedRender;
+	return final;
 }
 
 DerivedMesh *mesh_create_derived_index_render(Scene *scene, Object *ob, CustomDataMask dataMask, int index)
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index f57c3ce..8c34aa4 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -367,7 +367,8 @@ static void contarget_get_mesh_mat(Object *ob, const char *substring, float mat[
 
 	/* get DerivedMesh */
 	if (for_render) {
-		dm = ob->derivedRender;
+		/* TODO(sergey); Use proper derivedRender when known. */
+		dm = ob->derivedFinal;
 	}
 	else if (em) {
 		/* target is in editmode, so get a special derived mesh */
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 92f9118..e754483 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -320,22 +320,12 @@ void BKE_object_free_derived_caches(Object *ob)
 	}
 }
 
-void BKE_object_free_derivedRender_caches(Object *ob)
-{
-	if (ob->derivedRender) {
-		ob->derivedRender->needsFree = 1;
-		ob->derivedRender->release(ob->derivedRender);
-		ob->derivedRender = NULL;
-	}
-}
-
 /* do not free object itself */
 void BKE_object_free(Object *ob)
 {
 	int a;
 	
 	BKE_object_free_derived_caches(ob);
-	BKE_object_free_derivedRender_caches(ob);
 	
 	/* disconnect specific data, but not for lib data (might be indirect data, can get relinked) */
 	if (ob->data) {
@@ -1350,7 +1340,6 @@ Object *BKE_object_copy_ex(Main *bmain, Object *ob, int copy_caches)
 	
 	obn->derivedDeform = NULL;
 	obn->derivedFinal = NULL;
-	obn->derivedRender = NULL;
 
 	obn->gpulamp.first = obn->gpulamp.last = NULL;
 	obn->pc_ids.first = obn->pc_ids.last = NULL;
@@ -2785,15 +2774,13 @@ void BKE_object_handle_update_ex(EvaluationContext *evaluation_context,
 			switch (ob->type) {
 				case OB_MESH:
 				{
-					if (evaluation_context->for_render == false) {
-						BMEditMesh *em = (ob == scene->obedit) ? BKE_editmesh_from_object(ob) : NULL;
-						uint64_t data_mask = scene->customdata_mask | CD_MASK_BAREMESH;
-						if (em) {
-							makeDerivedMesh(scene, ob, em,  data_mask, 0); /* was CD_MASK_BAREMESH */
-						}
-						else {
-							makeDerivedMesh(scene, ob, NULL, data_mask, 0);
-						}
+					BMEditMesh *em = (ob == scene->obedit) ? BKE_editmesh_from_object(ob) : NULL;
+					uint64_t data_mask = scene->customdata_mask | CD_MASK_BAREMESH;
+					if (em) {
+						makeDerivedMesh(scene, ob, em,  data_mask, 0); /* was CD_MASK_BAREMESH */
+					}
+					else {
+						makeDerivedMesh(scene, ob, NULL, data_mask, 0);
 					}
 					break;
 				}
@@ -2810,9 +2797,7 @@ void BKE_object_handle_update_ex(EvaluationContext *evaluation_context,
 					break;
 
 				case OB_MBALL:
-					if (evaluation_context->for_render == false) {
-						BKE_displist_make_mball(scene, ob);
-					}
+					BKE_displist_make_mball(scene, ob);
 					break;
 
 				case OB_CURVE:
@@ -2824,9 +2809,7 @@ void BKE_object_handle_update_ex(EvaluationContext *evaluation_context,
 					break;
 				
 				case OB_LATTICE:
-					if (evaluation_context->for_render == false) {
-						BKE_lattice_modifiers_calc(scene, ob);
-					}
+					BKE_lattice_modifiers_calc(scene, ob);
 					break;
 			}
 			
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index bc012db..4e659b6 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -74,7 +74,8 @@ DerivedMesh *object_get_derived_final(Object *ob, bool forRender)
 	BMEditMesh *em = me->edit_btmesh;
 
 	if (forRender) {
-		return ob->derivedRender;
+		/* TODO(sergey): Use proper derivedRender when known. */
+		return ob->derivedFinal;
 	}
 
 	if (em) {
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index bdf391e..83ea8a6 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5045,7 +5045,6 @@ static void direct_link_object(FileData *fd, Object *ob)
 	ob->bb = NULL;
 	ob->derivedDeform = NULL;
 	ob->derivedFinal = NULL;
-	ob->derivedRender = NULL;
 	ob->gpulamp.first= ob->gpulamp.last = NULL;
 	link_list(fd, &ob->pc_ids);
 
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 7b69031..2ff697f 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -264,9 +264,8 @@ typedef struct Object {
 	struct FluidsimSettings *fluidsimSettings; /* if fluidsim enabled, store additional settings */
 
 	struct DerivedMesh *derivedDeform, *derivedFinal;
-	struct DerivedMesh *derivedRender;
+	int *pad;
 	uint64_t lastDataMask;   /* the custom data layer mask that was last used to calculate derivedDeform and derivedFinal */
-	uint64_t lastRenderDataMask;   /* the custom data layer mask that was last used to calculate derivedRender */
 	uint64_t customdata_mask; /* (extra) custom data layer mask to use for creating derivedmesh, set by depsgraph */
 	unsigned int state;			/* bit masks of game controllers that are active */
 	unsigned int init_state;	/* bit masks of initial state as recorded by the users */
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 8da3a76..522e3c1 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -215,7 +215,8 @@ DerivedMesh *get_dm(Object *ob, struct BMEditMesh *em, DerivedMesh *dm,
 DerivedMesh *get_operand_dm(Object *ob, ModifierApplyFlag flag)
 {
 	if (flag & MOD_APPLY_RENDER) {
-		return ob->derivedRender;
+		/* TODO(sergey): Use proper derivedRender when known. */
+		return ob->derivedFinal;
 	}
 	else {
 		return ob->derivedFinal;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index f87bd5d..ae421cc 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -3225,7 +3225,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset)
 	if (re->r.scemode & R_VIEWPORT_PREVIEW)
 		dm= mesh_create_derived_view(re->scene, ob, mask);
 	else
-		dm= mesh_get_derived_render(re->scene, ob, mask);
+		dm= mesh_create_derived_render(re->scene, ob, mask);
 	if (dm==NULL) return;	/* in case duplicated object fails? */
 
 	if (mask & CD_MASK_ORCO) {
@@ -4866,7 +4866,7 @@ static void dupli_render_particle_set(Render *re, Object *ob, int timeoffset, in
 			/* this is to make sure we get render level duplis in groups:
 			 * the derivedmesh must be created before init_render_mesh,
 			 * since object_duplilist does dupliparticles before that */
-			dm = mesh_get_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
+			dm = mesh_create_derived_render(re->scene, ob, CD_MASK_BAREMESH|CD_MASK_MTFACE|CD_MASK_MCOL);
 			dm->release(dm);
 
 			for (psys=ob->particlesystem.first; psys; psys=psys->next)
@@ -4920,81 +4920,6 @@ static void add_group_render_dupli_obs(Render *re, Group *group, int nolamps, in

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list