Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/BKE_modifier.h')
-rw-r--r--source/blender/blenkernel/BKE_modifier.h140
1 files changed, 131 insertions, 9 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index c81c0f7c4c0..09614a8e63f 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -35,6 +35,7 @@
struct ID;
struct Depsgraph;
struct DerivedMesh;
+struct Mesh;
struct Object;
struct Scene;
struct ViewLayer;
@@ -156,37 +157,38 @@ typedef struct ModifierTypeInfo {
*/
void (*copyData)(struct ModifierData *md, struct ModifierData *target);
- /********************* Deform modifier functions *********************/
+
+ /********************* Deform modifier functions *********************/ /* DEPRECATED */
/* Only for deform types, should apply the deformation
* to the given vertex array. If the deformer requires information from
* the object it can obtain it from the derivedData argument if non-NULL,
* and otherwise the ob argument.
*/
- void (*deformVerts)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ void (*deformVerts_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
struct Object *ob, struct DerivedMesh *derivedData,
float (*vertexCos)[3], int numVerts,
ModifierApplyFlag flag);
/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
- void (*deformMatrices)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ void (*deformMatrices_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
struct Object *ob, struct DerivedMesh *derivedData,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
/* Like deformVerts but called during editmode (for supporting modifiers)
*/
- void (*deformVertsEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ void (*deformVertsEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
struct Object *ob, 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 Depsgraph *depsgraph,
+ void (*deformMatricesEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
struct Object *ob, struct BMEditMesh *editData,
struct DerivedMesh *derivedData,
float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
- /********************* Non-deform modifier functions *********************/
+ /********************* Non-deform modifier functions *********************/ /* DEPRECATED */
/* For non-deform types: apply the modifier and return a derived
* data object (type is dependent on object type).
@@ -207,7 +209,7 @@ typedef struct ModifierTypeInfo {
* The modifier may reuse the derivedData argument (i.e. return it in
* modified form), but must not release it.
*/
- struct DerivedMesh *(*applyModifier)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct DerivedMesh *(*applyModifier_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
struct Object *ob, struct DerivedMesh *derivedData,
ModifierApplyFlag flag);
@@ -218,11 +220,77 @@ typedef struct ModifierTypeInfo {
* are expected from editmode objects. The same qualifications regarding
* derivedData apply as for applyModifier.
*/
- struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct DerivedMesh *(*applyModifierEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
struct Object *ob, struct BMEditMesh *editData,
struct DerivedMesh *derivedData, ModifierApplyFlag flag);
+ /********************* Deform modifier functions *********************/
+
+ /* Only for deform types, should apply the deformation
+ * to the given vertex array. If the deformer requires information from
+ * the object it can obtain it from the mesh argument if non-NULL,
+ * and otherwise the ob argument.
+ */
+ void (*deformVerts)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct Mesh *mesh,
+ float (*vertexCos)[3], int numVerts,
+ ModifierApplyFlag flag);
+
+ /* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
+ void (*deformMatrices)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct Mesh *mesh,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+
+ /* Like deformVerts but called during editmode (for supporting modifiers)
+ */
+ void (*deformVertsEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct Mesh *mesh,
+ float (*vertexCos)[3], int numVerts);
+
+ /* Set deform matrix per vertex for crazyspace correction */
+ void (*deformMatricesEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct Mesh *mesh,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+
+ /********************* Non-deform modifier functions *********************/
+
+ /* For non-deform types: apply the modifier and return a mesh object.
+ *
+ * The mesh argument should always be non-NULL; the modifier
+ * should read the object data from the mesh object instead of the
+ * actual object data.
+ *
+ * The useRenderParams argument indicates if the modifier is being
+ * applied in the service of the renderer which may alter quality
+ * settings.
+ *
+ * The isFinalCalc parameter indicates if the modifier is being
+ * calculated for a final result or for something temporary
+ * (like orcos). This is a hack at the moment, it is meant so subsurf
+ * can know if it is safe to reuse its internal cache.
+ *
+ * The modifier may reuse the mesh argument (i.e. return it in
+ * modified form), but must not release it.
+ */
+ struct Mesh *(*applyModifier)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct Mesh *mesh,
+ ModifierApplyFlag flag);
+
+ /* Like applyModifier but called during editmode (for supporting
+ * modifiers).
+ *
+ * The mesh object that is returned must support the operations that
+ * are expected from editmode objects. The same qualifications regarding
+ * mesh apply as for applyModifier.
+ */
+ struct Mesh *(*applyModifierEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct Mesh *mesh, ModifierApplyFlag flag);
+
+
/********************* Optional functions *********************/
/* Initialize new instance data for this modifier type, this function
@@ -419,7 +487,7 @@ void modifier_path_init(char *path, int path_maxlen, const char *name);
const char *modifier_path_relbase(struct Object *ob);
-/* wrappers for modifier callbacks */
+/* wrappers for modifier callbacks that ensure valid normals */
struct DerivedMesh *modwrap_applyModifier(
ModifierData *md, struct Depsgraph *depsgraph,
@@ -443,5 +511,59 @@ void modwrap_deformVertsEM(
struct BMEditMesh *em, struct DerivedMesh *dm,
float (*vertexCos)[3], int numVerts);
+/* wrappers for modifier callbacks that accept Mesh and select the proper implementation
+ * depending on if the modifier has been ported to Mesh or is still using DerivedMesh
+ */
+
+void modifier_deformVerts(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct Mesh *mesh,
+ float (*vertexCos)[3], int numVerts,
+ ModifierApplyFlag flag);
+
+void modifier_deformMatrices(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct Mesh *mesh,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+
+void modifier_deformVertsEM(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData, struct Mesh *mesh,
+ float (*vertexCos)[3], int numVerts);
+
+void modifier_deformMatricesEM(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData, struct Mesh *mesh,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+
+struct Mesh *modifier_applyModifier(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct Mesh *mesh, ModifierApplyFlag flag);
+
+struct Mesh *modifier_applyModifierEM(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct Mesh *mesh, ModifierApplyFlag flag);
+
+/* depricated variants of above that accept DerivedMesh */
+
+void modifier_deformVerts_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct DerivedMesh *dm,
+ float (*vertexCos)[3], int numVerts,
+ ModifierApplyFlag flag);
+
+void modifier_deformMatrices_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct DerivedMesh *dm,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+
+void modifier_deformVertsEM_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData, struct DerivedMesh *dm,
+ float (*vertexCos)[3], int numVerts);
+
+void modifier_deformMatricesEM_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData, struct DerivedMesh *dm,
+ float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+
+struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct DerivedMesh *dm, ModifierApplyFlag flag);
+
+struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *md, struct Depsgraph *depsgraph,
+ struct Object *ob, struct BMEditMesh *editData,
+ struct DerivedMesh *dm, ModifierApplyFlag flag);
+
#endif