[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