[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59832] branches/soc-2013-depsgraph_mt/ source/blender: Shrintwrap modifier will use proper derived mesh in render mode

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


Revision: 59832
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59832
Author:   nazgul
Date:     2013-09-05 12:23:23 +0000 (Thu, 05 Sep 2013)
Log Message:
-----------
Shrintwrap modifier will use proper derived mesh in render mode

Still to come: constraints are still using viewport derived mesh,
need to pass EvaluationContext there.

Modified Paths:
--------------
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_shrinkwrap.h
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/constraint.c
    branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/shrinkwrap.c
    branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_shrinkwrap.h
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_shrinkwrap.h	2013-09-05 12:23:17 UTC (rev 59831)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/BKE_shrinkwrap.h	2013-09-05 12:23:23 UTC (rev 59832)
@@ -37,7 +37,7 @@
 #include "BKE_customdata.h"
 struct DerivedMesh;
 struct Object;
-struct DerivedMesh *object_get_derived_final(struct Object *ob);
+struct DerivedMesh *object_get_derived_final(struct Object *ob, bool forRender);
 
 
 /* SpaceTransform stuff */
@@ -122,7 +122,7 @@
 } ShrinkwrapCalcData;
 
 void shrinkwrapModifier_deform(struct ShrinkwrapModifierData *smd, struct Object *ob, struct DerivedMesh *dm,
-                               float (*vertexCos)[3], int numVerts);
+                               float (*vertexCos)[3], int numVerts, bool forRender);
 
 /*
  * This function casts a ray in the given BVHTree.. but it takes into consideration the space_transform, that is:

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/constraint.c	2013-09-05 12:23:17 UTC (rev 59831)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/constraint.c	2013-09-05 12:23:23 UTC (rev 59832)
@@ -3345,7 +3345,8 @@
 		float dist;
 		
 		SpaceTransform transform;
-		DerivedMesh *target = object_get_derived_final(ct->tar);
+		/* TODO(sergey): use real forRender flag */
+		DerivedMesh *target = object_get_derived_final(ct->tar, false);
 		BVHTreeRayHit hit;
 		BVHTreeNearest nearest;
 		
@@ -3986,7 +3987,8 @@
 
 			if (data->depth_ob) {
 				Object *depth_ob = data->depth_ob;
-				DerivedMesh *target = object_get_derived_final(depth_ob);
+				/* TODO(sergey): use real forRender flag */
+				DerivedMesh *target = object_get_derived_final(depth_ob, false);
 				if (target) {
 					BVHTreeFromMesh treeData = NULL_BVHTreeFromMesh;
 					BVHTreeRayHit hit;

Modified: branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/shrinkwrap.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/shrinkwrap.c	2013-09-05 12:23:17 UTC (rev 59831)
+++ branches/soc-2013-depsgraph_mt/source/blender/blenkernel/intern/shrinkwrap.c	2013-09-05 12:23:23 UTC (rev 59832)
@@ -68,12 +68,15 @@
 
 /* get derived mesh */
 /* TODO is anyfunction that does this? returning the derivedFinal without we caring if its in edit mode or not? */
-/* TODO(sergey): use derivedRender wehn applying thing for render mode */
-DerivedMesh *object_get_derived_final(Object *ob)
+DerivedMesh *object_get_derived_final(Object *ob, bool forRender)
 {
 	Mesh *me = ob->data;
 	BMEditMesh *em = me->edit_btmesh;
 
+	if (forRender) {
+		return ob->derivedRender;
+	}
+
 	if (em) {
 		DerivedMesh *dm = em->derivedFinal;
 		return dm;
@@ -272,7 +275,7 @@
 }
 
 
-static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc)
+static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, bool forRender)
 {
 	int i;
 
@@ -320,7 +323,7 @@
 	}
 
 	if (calc->smd->auxTarget) {
-		auxMesh = object_get_derived_final(calc->smd->auxTarget);
+		auxMesh = object_get_derived_final(calc->smd->auxTarget, forRender);
 		if (!auxMesh)
 			return;
 		SPACE_TRANSFORM_SETUP(&local2aux, calc->ob, calc->smd->auxTarget);
@@ -501,7 +504,7 @@
 
 /* Main shrinkwrap function */
 void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Object *ob, DerivedMesh *dm,
-                               float (*vertexCos)[3], int numVerts)
+                               float (*vertexCos)[3], int numVerts, bool forRender)
 {
 
 	DerivedMesh *ss_mesh    = NULL;
@@ -529,7 +532,7 @@
 
 
 	if (smd->target) {
-		calc.target = object_get_derived_final(smd->target);
+		calc.target = object_get_derived_final(smd->target, forRender);
 
 		/* TODO there might be several "bugs" on non-uniform scales matrixs
 		 * because it will no longer be nearest surface, not sphere projection
@@ -580,7 +583,7 @@
 				break;
 
 			case MOD_SHRINKWRAP_PROJECT:
-				TIMEIT_BENCH(shrinkwrap_calc_normal_projection(&calc), deform_project);
+				TIMEIT_BENCH(shrinkwrap_calc_normal_projection(&calc, forRender), deform_project);
 				break;
 
 			case MOD_SHRINKWRAP_NEAREST_VERTEX:

Modified: branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c
===================================================================
--- branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c	2013-09-05 12:23:17 UTC (rev 59831)
+++ branches/soc-2013-depsgraph_mt/source/blender/modifiers/intern/MOD_shrinkwrap.c	2013-09-05 12:23:23 UTC (rev 59832)
@@ -116,17 +116,18 @@
                         DerivedMesh *derivedData,
                         float (*vertexCos)[3],
                         int numVerts,
-                        ModifierApplyFlag UNUSED(flag))
+                        ModifierApplyFlag flag)
 {
 	DerivedMesh *dm = derivedData;
 	CustomDataMask dataMask = requiredDataMask(ob, md);
+	bool forRender = flag & MOD_APPLY_RENDER;
 
 	/* ensure we get a CDDM with applied vertex coords */
 	if (dataMask) {
 		dm = get_cddm(ob, NULL, dm, vertexCos, dependsOnNormals(md));
 	}
 
-	shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts);
+	shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, forRender);
 
 	if (dm != derivedData)
 		dm->release(dm);
@@ -143,7 +144,7 @@
 		dm = get_cddm(ob, editData, dm, vertexCos, dependsOnNormals(md));
 	}
 
-	shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts);
+	shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts, false);
 
 	if (dm != derivedData)
 		dm->release(dm);




More information about the Bf-blender-cvs mailing list