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')
-rw-r--r--source/blender/blenkernel/BKE_modifier.h44
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c4
-rw-r--r--source/blender/blenkernel/intern/displist.c2
-rw-r--r--source/blender/blenkernel/intern/mesh_convert.c2
-rw-r--r--source/blender/blenkernel/intern/modifier.c121
-rw-r--r--source/blender/blenkernel/intern/multires.c5
-rw-r--r--source/blender/modifiers/intern/MOD_dynamicpaint.c9
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c9
-rw-r--r--source/blender/modifiers/intern/MOD_multires.c8
-rw-r--r--source/blender/modifiers/intern/MOD_smoke.c9
-rw-r--r--source/blender/modifiers/intern/MOD_subsurf.c28
11 files changed, 98 insertions, 143 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index ec18e652aec..52015ff025d 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -171,30 +171,8 @@ typedef struct ModifierTypeInfo {
/********************* Non-deform modifier functions *********************/ /* DEPRECATED */
- /* For non-deform types: apply the modifier and return a derived
- * data object (type is dependent on object type).
- *
- * The derivedData argument should always be non-NULL; the modifier
- * should read the object data from the derived object instead of the
- * actual object data.
- *
- * The modifier may reuse the derivedData argument (i.e. return it in
- * modified form), but must not release it.
- */
- struct DerivedMesh *(*applyModifier_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
- struct DerivedMesh *derivedData);
-
- /* Like applyModifier but called during editmode (for supporting
- * modifiers).
- *
- * The derived object that is returned must support the operations that
- * are expected from editmode objects. The same qualifications regarding
- * derivedData apply as for applyModifier.
- */
- struct DerivedMesh *(*applyModifierEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
- struct BMEditMesh *editData,
- struct DerivedMesh *derivedData);
-
+ void (*applyModifier_DM_removed)(void);
+ void (*applyModifierEM_DM_removed)(void);
/********************* Deform modifier functions *********************/
@@ -464,6 +442,16 @@ void modwrap_deformVertsEM(
struct BMEditMesh *em, struct DerivedMesh *dm,
float (*vertexCos)[3], int numVerts);
+#define applyModifier_DM_wrapper(NEW_FUNC_NAME, OLD_FUNC_NAME) \
+ static Mesh *NEW_FUNC_NAME(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh) \
+ { \
+ DerivedMesh *dm = CDDM_from_mesh_ex(mesh, CD_REFERENCE, CD_MASK_EVERYTHING); \
+ DerivedMesh *ndm = OLD_FUNC_NAME(md, ctx, dm); \
+ if (ndm != dm) dm->release(dm); \
+ DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true); \
+ return mesh; \
+ }
+
/* 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
*/
@@ -472,18 +460,10 @@ void modifier_deformVerts_ensure_normals(
struct ModifierData *md, const struct ModifierEvalContext *ctx,
struct Mesh *mesh, float (*vertexCos)[3], int numVerts);
-struct Mesh *modifier_applyModifier(
- struct ModifierData *md, const struct ModifierEvalContext *ctx,
- struct Mesh *mesh);
-
struct Mesh *modifier_applyModifier_ensure_normals(
struct ModifierData *md, const struct ModifierEvalContext *ctx,
struct Mesh *mesh);
-struct Mesh *modifier_applyModifierEM(
- struct ModifierData *md, const struct ModifierEvalContext *ctx,
- struct BMEditMesh *editData, struct Mesh *mesh);
-
/* depricated variants of above that accept DerivedMesh */
void modifier_deformVerts_DM_deprecated(
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 0c8fcced59e..fb4a2bbb0ad 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2655,7 +2655,7 @@ static void editbmesh_calc_modifiers(
mask &= ~CD_MASK_ORCO;
DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
- if (mti->applyModifierEM || mti->applyModifierEM_DM) {
+ if (mti->applyModifierEM) {
ndm = modwrap_applyModifierEM(md, &mectx_orco, em, orcodm);
}
else {
@@ -2683,7 +2683,7 @@ static void editbmesh_calc_modifiers(
}
}
- if (mti->applyModifierEM || mti->applyModifierEM_DM)
+ if (mti->applyModifierEM)
ndm = modwrap_applyModifierEM(md, &mectx_cache, em, dm);
else
ndm = modwrap_applyModifier(md, &mectx_cache, dm);
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index fdcf38c7d41..26a66dc9ce2 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1021,7 +1021,7 @@ static void curve_calc_modifiers_post(
vertCos = NULL;
}
- mesh_applied = modifier_applyModifier(md, &mectx_apply, modified);
+ mesh_applied = mti->applyModifier(md, &mectx_apply, modified);
if (mesh_applied) {
/* Modifier returned a new derived mesh */
diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c
index 17d7276dfe7..753937687be 100644
--- a/source/blender/blenkernel/intern/mesh_convert.c
+++ b/source/blender/blenkernel/intern/mesh_convert.c
@@ -1172,7 +1172,7 @@ Mesh *BKE_mesh_create_derived_for_modifier(
if (build_shapekey_layers)
add_shapekey_layers(mesh_temp, me);
- result = modifier_applyModifier(md, &mectx, mesh_temp);
+ result = mti->applyModifier(md, &mectx, mesh_temp);
ASSERT_IS_VALID_MESH(result);
if (mesh_temp != result) {
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index a233f4294c0..dae941668ca 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -898,29 +898,6 @@ void modifier_deformVerts_ensure_normals(struct ModifierData *md, const Modifier
mti->deformVerts(md, ctx, mesh, vertexCos, numVerts);
}
-struct Mesh *modifier_applyModifier(struct ModifierData *md, const ModifierEvalContext *ctx,
- struct Mesh *mesh)
-{
- const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
- if (mti->applyModifier) {
- return mti->applyModifier(md, ctx, mesh);
- }
- else {
- DerivedMesh *dm = CDDM_from_mesh_ex(mesh, CD_REFERENCE, CD_MASK_EVERYTHING);
-
- DerivedMesh *ndm = mti->applyModifier_DM(md, ctx, dm);
-
- if (ndm != dm) {
- dm->release(dm);
- }
-
- DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true);
-
- return mesh;
- }
-}
-
struct Mesh *modifier_applyModifier_ensure_normals(struct ModifierData *md, const ModifierEvalContext *ctx,
struct Mesh *mesh)
{
@@ -930,31 +907,7 @@ struct Mesh *modifier_applyModifier_ensure_normals(struct ModifierData *md, cons
if (mti->dependsOnNormals && mti->dependsOnNormals(md)) {
BKE_mesh_calc_normals(mesh);
}
- return modifier_applyModifier(md, ctx, mesh);
-}
-
-struct Mesh *modifier_applyModifierEM(struct ModifierData *md, const ModifierEvalContext *ctx,
- struct BMEditMesh *editData,
- struct Mesh *mesh)
-{
- const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
- if (mti->applyModifierEM) {
- return mti->applyModifierEM(md, ctx, editData, mesh);
- }
- else {
- DerivedMesh *dm = CDDM_from_mesh_ex(mesh, CD_REFERENCE, CD_MASK_EVERYTHING);
-
- DerivedMesh *ndm = mti->applyModifierEM_DM(md, ctx, editData, dm);
-
- if (ndm != dm) {
- dm->release(dm);
- }
-
- DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true);
-
- return mesh;
- }
+ return mti->applyModifier(md, ctx, mesh);
}
/* depricated variants of above that accept DerivedMesh */
@@ -1045,31 +998,27 @@ struct DerivedMesh *modifier_applyModifier_DM_deprecated(struct ModifierData *md
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- if (mti->applyModifier_DM) {
- return mti->applyModifier_DM(md, ctx, dm);
+ /* TODO(sybren): deduplicate all the copies of this code in this file. */
+ Mesh *mesh = NULL;
+ if (dm != NULL) {
+ mesh = BKE_id_new_nomain(ID_ME, NULL);
+ DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
- else {
- /* TODO(sybren): deduplicate all the copies of this code in this file. */
- Mesh *mesh = NULL;
- if (dm != NULL) {
- mesh = BKE_id_new_nomain(ID_ME, NULL);
- DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
- }
- struct Mesh *new_mesh = mti->applyModifier(md, ctx, mesh);
+ struct Mesh *new_mesh = mti->applyModifier(md, ctx, mesh);
- /* Make a DM that doesn't reference new_mesh so we can free the latter. */
- DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE, CD_MASK_EVERYTHING);
+ /* Make a DM that doesn't reference new_mesh so we can free the latter. */
+ DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE, CD_MASK_EVERYTHING);
- if (new_mesh != mesh) {
- BKE_id_free(NULL, new_mesh);
- }
- if (mesh != NULL) {
- BKE_id_free(NULL, mesh);
- }
-
- return ndm;
+ if (new_mesh != mesh) {
+ BKE_id_free(NULL, new_mesh);
+ }
+ if (mesh != NULL) {
+ BKE_id_free(NULL, mesh);
}
+
+ return ndm;
+
}
struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *md, const ModifierEvalContext *ctx,
@@ -1078,31 +1027,27 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *
{
const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- if (mti->applyModifierEM_DM) {
- return mti->applyModifierEM_DM(md, ctx, editData, dm);
+ /* TODO(sybren): deduplicate all the copies of this code in this file. */
+ Mesh *mesh = NULL;
+ if (dm != NULL) {
+ mesh = BKE_id_new_nomain(ID_ME, NULL);
+ DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
}
- else {
- /* TODO(sybren): deduplicate all the copies of this code in this file. */
- Mesh *mesh = NULL;
- if (dm != NULL) {
- mesh = BKE_id_new_nomain(ID_ME, NULL);
- DM_to_mesh(dm, mesh, ctx->object, CD_MASK_EVERYTHING, false);
- }
-
- struct Mesh *new_mesh = mti->applyModifierEM(md, ctx, editData, mesh);
- /* Make a DM that doesn't reference new_mesh so we can free the latter. */
- DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE, CD_MASK_EVERYTHING);
+ struct Mesh *new_mesh = mti->applyModifierEM(md, ctx, editData, mesh);
- if (new_mesh != mesh) {
- BKE_id_free(NULL, new_mesh);
- }
- if (mesh != NULL) {
- BKE_id_free(NULL, mesh);
- }
+ /* Make a DM that doesn't reference new_mesh so we can free the latter. */
+ DerivedMesh *ndm = CDDM_from_mesh_ex(new_mesh, CD_DUPLICATE, CD_MASK_EVERYTHING);
- return ndm;
+ if (new_mesh != mesh) {
+ BKE_id_free(NULL, new_mesh);
}
+ if (mesh != NULL) {
+ BKE_id_free(NULL, mesh);
+ }
+
+ return ndm;
+
}
/**
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 38d3ec79f82..0a6d7f99237 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -309,7 +309,10 @@ Mesh *get_multires_mesh(
.depsgraph = depsgraph,
.object = ob_eval,
.flag = MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY};
- Mesh *result = modifier_applyModifier(&mmd->modifier, &modifier_ctx, deformed_mesh);
+
+ const ModifierTypeInfo *mti = modifierType_getInfo(mmd->modifier.type);
+ Mesh *result = mti->applyModifier(&mmd->modifier, &modifier_ctx, deformed_mesh);
+
if (result == deformed_mesh) {
result = BKE_mesh_copy_for_eval(deformed_mesh);
}
diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c
index 61219096b43..74dbb28d186 100644
--- a/source/blender/modifiers/intern/MOD_dynamicpaint.c
+++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c
@@ -31,6 +31,7 @@
#include "DNA_object_types.h"
#include "DNA_object_force_types.h"
#include "DNA_scene_types.h"
+#include "DNA_mesh_types.h"
#include "BLI_utildefines.h"
@@ -100,7 +101,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static DerivedMesh *applyModifier(
+static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
DerivedMesh *dm)
{
@@ -114,6 +115,8 @@ static DerivedMesh *applyModifier(
return dm;
}
+applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+
static bool is_brush_cb(Object *UNUSED(ob), ModifierData *pmd)
{
return ((DynamicPaintModifierData *)pmd)->brush != NULL;
@@ -183,14 +186,14 @@ ModifierTypeInfo modifierType_DynamicPaint = {
/* deformMatrices_DM */ NULL,
/* deformVertsEM_DM */ NULL,
/* deformMatricesEM_DM*/NULL,
- /* applyModifier_DM */ applyModifier,
+ /* applyModifier_DM */ NULL,
/* applyModifierEM_DM */NULL,
/* deformVerts */ NULL,
/* deformMatrices */ NULL,
/* deformVertsEM */ NULL,
/* deformMatricesEM */ NULL,
- /* applyModifier */ NULL,
+ /* applyModifier */ applyModifier,
/* applyModifierEM */ NULL,
/* initData */ initData,
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index 7c38677ba8b..df454eb9008 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -36,6 +36,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
#include "BLI_utildefines.h"
#include "BLI_kdtree.h"
@@ -998,7 +999,7 @@ static ParticleSystemModifierData *findPrecedingParticlesystem(Object *ob, Modif
}
return psmd;
}
-static DerivedMesh *applyModifier(
+static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
DerivedMesh *derivedData)
{
@@ -1048,6 +1049,8 @@ static DerivedMesh *applyModifier(
return derivedData;
}
+applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+
ModifierTypeInfo modifierType_Explode = {
/* name */ "Explode",
@@ -1061,14 +1064,14 @@ ModifierTypeInfo modifierType_Explode = {
/* deformMatrices_DM */ NULL,
/* deformVertsEM_DM */ NULL,
/* deformMatricesEM_DM*/NULL,
- /* applyModifier_DM */ applyModifier,
+ /* applyModifier_DM */ NULL,
/* applyModifierEM_DM */NULL,
/* deformVerts */ NULL,
/* deformMatrices */ NULL,
/* deformVertsEM */ NULL,
/* deformMatricesEM */ NULL,
- /* applyModifier */ NULL,
+ /* applyModifier */ applyModifier,
/* applyModifierEM */ NULL,
/* initData */ initData,
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index 813ce830b04..826c9cbe81f 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -67,7 +67,7 @@ static void initData(ModifierData *md)
mmd->quality = 3;
}
-static DerivedMesh *applyModifier(
+static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
DerivedMesh *dm)
{
@@ -144,6 +144,8 @@ static DerivedMesh *applyModifier(
return result;
}
+applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+
#ifdef WITH_OPENSUBDIV_MODIFIER
/* Subdivide into fully qualified mesh. */
@@ -261,7 +263,7 @@ ModifierTypeInfo modifierType_Multires = {
/* deformMatrices_DM */ NULL,
/* deformVertsEM_DM */ NULL,
/* deformMatricesEM_DM*/NULL,
- /* applyModifier_DM */ applyModifier,
+ /* applyModifier_DM */ NULL,
/* applyModifierEM_DM */NULL,
/* deformVerts */ NULL,
@@ -271,7 +273,7 @@ ModifierTypeInfo modifierType_Multires = {
#ifdef WITH_OPENSUBDIV_MODIFIER
/* applyModifier */ applyModifier_subdiv,
#else
- /* applyModifier */ NULL,
+ /* applyModifier */ applyModifier,
#endif
/* applyModifierEM */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_smoke.c b/source/blender/modifiers/intern/MOD_smoke.c
index a15c4169df3..0caeda0e426 100644
--- a/source/blender/modifiers/intern/MOD_smoke.c
+++ b/source/blender/modifiers/intern/MOD_smoke.c
@@ -42,6 +42,7 @@
#include "DNA_scene_types.h"
#include "DNA_smoke_types.h"
#include "DNA_object_force_types.h"
+#include "DNA_mesh_types.h"
#include "BLI_utildefines.h"
@@ -104,7 +105,7 @@ static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
return dataMask;
}
-static DerivedMesh *applyModifier(
+static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
DerivedMesh *dm)
{
@@ -118,6 +119,8 @@ static DerivedMesh *applyModifier(
return smokeModifier_do(smd, ctx->depsgraph, scene, ctx->object, dm);
}
+applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+
static bool dependsOnTime(ModifierData *UNUSED(md))
{
return true;
@@ -182,14 +185,14 @@ ModifierTypeInfo modifierType_Smoke = {
/* deformMatrices_DM */ NULL,
/* deformVertsEM_DM */ NULL,
/* deformMatricesEM_DM*/NULL,
- /* applyModifier_DM */ applyModifier,
+ /* applyModifier_DM */ NULL,
/* applyModifierEM_DM */NULL,
/* deformVerts */ NULL,
/* deformMatrices */ NULL,
/* deformVertsEM */ NULL,
/* deformMatricesEM */ NULL,
- /* applyModifier */ NULL,
+ /* applyModifier */ applyModifier,
/* applyModifierEM */ NULL,
/* initData */ initData,
diff --git a/source/blender/modifiers/intern/MOD_subsurf.c b/source/blender/modifiers/intern/MOD_subsurf.c
index deccec05190..d7c8d0c7bb6 100644
--- a/source/blender/modifiers/intern/MOD_subsurf.c
+++ b/source/blender/modifiers/intern/MOD_subsurf.c
@@ -99,7 +99,7 @@ static bool isDisabled(const Scene *scene, ModifierData *md, bool useRenderParam
return get_render_subsurf_level(&scene->r, levels, useRenderParams != 0) == 0;
}
-static DerivedMesh *applyModifier(
+static DerivedMesh *applyModifier_DM(
ModifierData *md, const ModifierEvalContext *ctx,
DerivedMesh *derivedData)
{
@@ -133,7 +133,9 @@ static DerivedMesh *applyModifier(
return result;
}
-static DerivedMesh *applyModifierEM(
+applyModifier_DM_wrapper(applyModifier, applyModifier_DM)
+
+static DerivedMesh *applyModifierEM_DM(
ModifierData *md, const ModifierEvalContext *ctx,
struct BMEditMesh *UNUSED(editData),
DerivedMesh *derivedData)
@@ -148,6 +150,20 @@ static DerivedMesh *applyModifierEM(
return result;
}
+static Mesh *applyModifierEM(
+ struct ModifierData *md, const struct ModifierEvalContext *ctx,
+ struct BMEditMesh *editData,
+ struct Mesh *mesh)
+{
+ DerivedMesh *dm = CDDM_from_mesh_ex(mesh, CD_REFERENCE, CD_MASK_EVERYTHING);
+ DerivedMesh *ndm = applyModifierEM_DM(md, ctx, editData, dm);
+ if (ndm != dm) {
+ dm->release(dm);
+ }
+ DM_to_mesh(ndm, mesh, ctx->object, CD_MASK_EVERYTHING, true);
+ return mesh;
+}
+
#ifdef WITH_OPENSUBDIV_MODIFIER
static int subdiv_levels_for_modifier_get(const SubsurfModifierData *smd,
const ModifierEvalContext *ctx)
@@ -275,8 +291,8 @@ ModifierTypeInfo modifierType_Subsurf = {
/* deformMatrices_DM */ NULL,
/* deformVertsEM_DM */ NULL,
/* deformMatricesEM_DM*/NULL,
- /* applyModifier_DM */ applyModifier,
- /* applyModifierEM_DM */applyModifierEM,
+ /* applyModifier_DM */ NULL,
+ /* applyModifierEM_DM */NULL,
/* deformVerts */ NULL,
/* deformMatrices */ NULL,
@@ -285,9 +301,9 @@ ModifierTypeInfo modifierType_Subsurf = {
#ifdef WITH_OPENSUBDIV_MODIFIER
/* applyModifier */ applyModifier_subdiv,
#else
- /* applyModifier */ NULL,
+ /* applyModifier */ applyModifier,
#endif
- /* applyModifierEM */ NULL,
+ /* applyModifierEM */ applyModifierEM,
/* initData */ initData,
/* requiredDataMask */ NULL,