merge with/from trunk at r35190
[blender.git] / source / blender / modifiers / intern / MOD_multires.c
index 699ab44a75c394cbd3ecb16646ff91e7e77a53b9..b61302d118b3c85878204e3e24a6b5adc86f8c57 100644 (file)
 *
 */
 
+/** \file blender/modifiers/intern/MOD_multires.c
+ *  \ingroup modifiers
+ */
+
+
 #include <stddef.h>
 
 #include "BKE_cdderivedmesh.h"
@@ -40,6 +45,8 @@
 
 #include "DNA_mesh_types.h"
 
+#include "MOD_util.h"
+
 static void initData(ModifierData *md)
 {
        MultiresModifierData *mmd = (MultiresModifierData*)md;
@@ -59,6 +66,8 @@ static void copyData(ModifierData *md, ModifierData *target)
        tmmd->sculptlvl = mmd->sculptlvl;
        tmmd->renderlvl = mmd->renderlvl;
        tmmd->totlvl = mmd->totlvl;
+       tmmd->simple = mmd->simple;
+       tmmd->flags = mmd->flags;
 }
 
 static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
@@ -72,9 +81,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
 
        if(mmd->totlvl) {
                if(!CustomData_get_layer(&me->ldata, CD_MDISPS)) {
-                       /* multires can't work without displacement layer */
-                       modifier_setError(md, "Modifier needs mesh with displacement data.");
-                       return dm;
+                       /* multires always needs a displacement layer */
+                       CustomData_add_layer(&me->fdata, CD_MDISPS, CD_CALLOC, NULL, me->totface);
                }
        }
 
@@ -108,6 +116,7 @@ ModifierTypeInfo modifierType_Multires = {
 
        /* copyData */          copyData,
        /* deformVerts */       0,
+       /* deformMatrices */    0,
        /* deformVertsEM */     0,
        /* deformMatricesEM */  0,
        /* applyModifier */     applyModifier,
@@ -118,6 +127,7 @@ ModifierTypeInfo modifierType_Multires = {
        /* isDisabled */        0,
        /* updateDepgraph */    0,
        /* dependsOnTime */     0,
+       /* dependsOnNormals */  0,
        /* foreachObjectLink */ 0,
        /* foreachIDLink */     0,
 };