[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59829] branches/soc-2013-depsgraph_mt/ source/blender: Added check for last datamask used for derivedRender calculation

Sergey Sharybin sergey.vfx at gmail.com
Thu Sep 5 14:23:08 CEST 2013


Revision: 59829
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59829
Author:   nazgul
Date:     2013-09-05 12:23:08 +0000 (Thu, 05 Sep 2013)
Log Message:
-----------
Added check for last datamask used for derivedRender calculation

That's perhaps not too much difference for now, because it seems
all places are using the same data mask for derived render, but
better be safe and robust here than sorry.

Alternative would be to remove dataMask from API here and always
use hard-coded mask in DerivedMesh.c for derivedRender.

Modified Paths:
--------------
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/DerivedMesh.c
    branches/soc-2013-depsgraph_mt/source/blender/makesdna/DNA_object_types.h

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/DerivedMesh.c	2013-09-05 12:10:49 UTC (rev 59828)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/DerivedMesh.c	2013-09-05 12:23:08 UTC (rev 59829)
@@ -2332,6 +2332,7 @@
 	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));
 }
@@ -2367,8 +2368,7 @@
 
 DerivedMesh *mesh_get_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
 {
-	/* TODO(sergey): Add data mask check here. */
-	if (!ob->derivedRender) {
+	if (!ob->derivedRender || (dataMask & ob->lastRenderDataMask) != dataMask) {
 		makeDerivedMeshRender(scene, ob, dataMask);
 	}
 
@@ -2377,8 +2377,7 @@
 
 DerivedMesh *mesh_create_derived_render(Scene *scene, Object *ob, CustomDataMask dataMask)
 {
-	/* TODO(sergey): Add data mask check here. */
-	if (!ob->derivedRender) {
+	if (!ob->derivedRender || (dataMask & ob->lastRenderDataMask) != dataMask) {
 		makeDerivedMeshRender(scene, ob, dataMask);
 	}
 

Modified: branches/soc-2013-depsgraph_mt/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/makesdna/DNA_object_types.h	2013-09-05 12:10:49 UTC (rev 59828)
+++ branches/soc-2013-depsgraph_mt/source/blender/makesdna/DNA_object_types.h	2013-09-05 12:23:08 UTC (rev 59829)
@@ -266,6 +266,7 @@
 	struct DerivedMesh *derivedDeform, *derivedFinal;
 	struct DerivedMesh *derivedRender;
 	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 */




More information about the Bf-blender-cvs mailing list