merge with 2.5 (not trunk, last merge message said that on accident) at r22252
[blender.git] / source / blender / blenkernel / BKE_modifier.h
index a41716ed1ffb93ee3f4fd25f002a0dc6962f3d45..42a4743fd227786e291aad494a6b4ced95d4a758 100644 (file)
 #include "DNA_modifier_types.h"                /* needed for all enum typdefs */
 #include "BKE_customdata.h"
 
+struct ID;
 struct EditMesh;
 struct DerivedMesh;
 struct DagForest;
 struct DagNode;
 struct Object;
+struct Scene;
 struct ListBase;
 struct LinkNode;
 struct bArmature;
 struct ModifierData;
+struct BMEditMesh;
 
 typedef enum {
        /* Should not be used, only for None modifier type */
@@ -61,7 +64,7 @@ typedef enum {
         * used for particles modifier that doesn't actually modify the object
         * unless it's a mesh and can be exploded -> curve can also emit particles
         */
-       eModifierTypeType_DeformOrConstruct
+       eModifierTypeType_DeformOrConstruct,
 } ModifierTypeType;
 
 typedef enum {
@@ -86,6 +89,9 @@ typedef enum {
        /* For modifiers that support pointcache, so we can check to see if it has files we need to deal with
        */
        eModifierTypeFlag_UsesPointCache = (1<<6),
+
+       /* For physics modifiers, max one per type */
+       eModifierTypeFlag_Single = (1<<7)
 } ModifierTypeFlag;
 
 typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin);
@@ -123,19 +129,20 @@ typedef struct ModifierTypeInfo {
         */
        void (*deformVerts)(struct ModifierData *md, struct Object *ob,
                            struct DerivedMesh *derivedData,
-                           float (*vertexCos)[3], int numVerts);
+                           float (*vertexCos)[3], int numVerts,
+                           int useRenderParams, int isFinalCalc);
 
        /* Like deformVerts but called during editmode (for supporting modifiers)
         */
        void (*deformVertsEM)(
                    struct ModifierData *md, struct Object *ob,
-                   struct EditMesh *editData, struct DerivedMesh *derivedData,
+                   struct BMEditMesh *editData, struct DerivedMesh *derivedData,
                    float (*vertexCos)[3], int numVerts);
 
        /* Set deform matrix per vertex for crazyspace correction */
        void (*deformMatricesEM)(
                    struct ModifierData *md, struct Object *ob,
-                   struct EditMesh *editData, struct DerivedMesh *derivedData,
+                   struct BMEditMesh *editData, struct DerivedMesh *derivedData,
                    float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
        /********************* Non-deform modifier functions *********************/
@@ -173,7 +180,7 @@ typedef struct ModifierTypeInfo {
         */
        struct DerivedMesh *(*applyModifierEM)(
                                    struct ModifierData *md, struct Object *ob,
-                                   struct EditMesh *editData,
+                                   struct BMEditMesh *editData,
                                    struct DerivedMesh *derivedData);
 
 
@@ -202,7 +209,7 @@ typedef struct ModifierTypeInfo {
         *
         * This function is optional.
         */
-       CustomDataMask (*requiredDataMask)(struct ModifierData *md);
+       CustomDataMask (*requiredDataMask)(struct Object *ob, struct ModifierData *md);
 
        /* Free internal modifier data variables, this function should
         * not free the md variable itself.
@@ -226,7 +233,7 @@ typedef struct ModifierTypeInfo {
         *
         * This function is optional.
         */
-       void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest,
+       void (*updateDepgraph)(struct ModifierData *md, struct DagForest *forest, struct Scene *scene,
                               struct Object *ob, struct DagNode *obNode);
 
        /* Should return true if the modifier needs to be recalculated on time
@@ -270,6 +277,7 @@ int           modifier_dependsOnTime(struct ModifierData *md);
 int           modifier_supportsMapping(struct ModifierData *md);
 int           modifier_couldBeCage(struct ModifierData *md);
 int           modifier_isDeformer(struct ModifierData *md);
+int           modifier_isEnabled(struct ModifierData *md, int required_mode);
 void          modifier_setError(struct ModifierData *md, char *format, ...);
 
 void          modifiers_foreachObjectLink(struct Object *ob,
@@ -290,7 +298,7 @@ int           modifiers_isParticleEnabled(struct Object *ob);
 struct Object *modifiers_isDeformedByArmature(struct Object *ob);
 struct Object *modifiers_isDeformedByLattice(struct Object *ob);
 int           modifiers_usesArmature(struct Object *ob, struct bArmature *arm);
-int           modifiers_isDeformed(struct Object *ob);
+int           modifiers_isDeformed(struct Scene *scene, struct Object *ob);
 void          modifier_freeTemporaryData(struct ModifierData *md);
 
 int           modifiers_indexInObject(struct Object *ob, struct ModifierData *md);
@@ -300,8 +308,10 @@ int           modifiers_indexInObject(struct Object *ob, struct ModifierData *md
  * evaluation, assuming the data indicated by dataMask is required at the
  * end of the stack.
  */
-struct LinkNode *modifiers_calcDataMasks(struct ModifierData *md,
-                                         CustomDataMask dataMask);
+struct LinkNode *modifiers_calcDataMasks(struct Object *ob,
+                                         struct ModifierData *md,
+                                         CustomDataMask dataMask,
+                                         int required_mode);
 struct ModifierData  *modifiers_getVirtualModifierList(struct Object *ob);
 
 #endif