diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2015-06-10 19:38:23 +0300 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2015-06-10 19:38:23 +0300 |
commit | 080cf9332bc9d71e0e14326bc8efdf06b738dea1 (patch) | |
tree | e8531a509dca4d8253aa19d89edc68152421f9e5 /source/blender/blenkernel/intern/modifier.c | |
parent | 6d495cc4ef071171ff0686b2be898a41e05b8051 (diff) | |
parent | 9676642cc94599b3419c9aaa5cf1aae2fbbd235f (diff) |
Merge branch 'gooseberry' into temp_motionpathstemp_motionpaths
Conflicts:
source/blender/blenkernel/intern/object.c
Diffstat (limited to 'source/blender/blenkernel/intern/modifier.c')
-rw-r--r-- | source/blender/blenkernel/intern/modifier.c | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c index 42247d866e4..4d007e12ef5 100644 --- a/source/blender/blenkernel/intern/modifier.c +++ b/source/blender/blenkernel/intern/modifier.c @@ -57,6 +57,7 @@ #include "BLF_translation.h" #include "BKE_appdir.h" +#include "BKE_cache_library.h" #include "BKE_key.h" #include "BKE_multires.h" #include "BKE_DerivedMesh.h" @@ -68,7 +69,7 @@ #include "MOD_modifiertypes.h" -static ModifierTypeInfo *modifier_types[NUM_MODIFIER_TYPES] = {NULL}; +static ModifierTypeInfo *cache_modifier_types[NUM_MODIFIER_TYPES] = {NULL}; static VirtualModifierData virtualModifierCommonData; void BKE_modifier_init(void) @@ -76,7 +77,7 @@ void BKE_modifier_init(void) ModifierData *md; /* Initialize modifier types */ - modifier_type_init(modifier_types); /* MOD_utils.c */ + modifier_type_init(cache_modifier_types); /* MOD_utils.c */ /* Initialize global cmmon storage used for virtual modifier list */ md = modifier_new(eModifierType_Armature); @@ -99,13 +100,15 @@ void BKE_modifier_init(void) virtualModifierCommonData.cmd.modifier.mode |= eModifierMode_Virtual; virtualModifierCommonData.lmd.modifier.mode |= eModifierMode_Virtual; virtualModifierCommonData.smd.modifier.mode |= eModifierMode_Virtual; + + BKE_cache_modifier_init(); } -ModifierTypeInfo *modifierType_getInfo(ModifierType type) +const ModifierTypeInfo *modifierType_getInfo(ModifierType type) { /* type unsigned, no need to check < 0 */ - if (type < NUM_MODIFIER_TYPES && modifier_types[type]->name[0] != '\0') { - return modifier_types[type]; + if (type < NUM_MODIFIER_TYPES && cache_modifier_types[type]->name[0] != '\0') { + return cache_modifier_types[type]; } else { return NULL; @@ -116,7 +119,7 @@ ModifierTypeInfo *modifierType_getInfo(ModifierType type) ModifierData *modifier_new(int type) { - ModifierTypeInfo *mti = modifierType_getInfo(type); + const ModifierTypeInfo *mti = modifierType_getInfo(type); ModifierData *md = MEM_callocN(mti->structSize, mti->structName); /* note, this name must be made unique later */ @@ -135,7 +138,7 @@ ModifierData *modifier_new(int type) void modifier_free(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); if (mti->freeData) mti->freeData(md); if (md->error) MEM_freeN(md->error); @@ -146,7 +149,7 @@ void modifier_free(ModifierData *md) bool modifier_unique_name(ListBase *modifiers, ModifierData *md) { if (modifiers && md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); return BLI_uniquename(modifiers, md, DATA_(mti->name), '.', offsetof(ModifierData, name), sizeof(md->name)); } @@ -155,14 +158,14 @@ bool modifier_unique_name(ListBase *modifiers, ModifierData *md) bool modifier_dependsOnTime(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); return mti->dependsOnTime && mti->dependsOnTime(md); } bool modifier_supportsMapping(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); return (mti->type == eModifierTypeType_OnlyDeform || (mti->flags & eModifierTypeFlag_SupportsMapping)); @@ -170,7 +173,7 @@ bool modifier_supportsMapping(ModifierData *md) bool modifier_isPreview(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); /* Constructive modifiers are highly likely to also modify data like vgroups or vcol! */ if (!((mti->flags & eModifierTypeFlag_UsesPreview) || (mti->type == eModifierTypeType_Constructive))) { @@ -221,7 +224,7 @@ void modifiers_foreachObjectLink(Object *ob, ObjectWalkFunc walk, ModifierData *md = ob->modifiers.first; for (; md; md = md->next) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); if (mti->foreachObjectLink) mti->foreachObjectLink(md, ob, walk, userData); @@ -233,7 +236,7 @@ void modifiers_foreachIDLink(Object *ob, IDWalkFunc walk, void *userData) ModifierData *md = ob->modifiers.first; for (; md; md = md->next) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); if (mti->foreachIDLink) mti->foreachIDLink(md, ob, walk, userData); else if (mti->foreachObjectLink) { @@ -249,7 +252,7 @@ void modifiers_foreachTexLink(Object *ob, TexWalkFunc walk, void *userData) ModifierData *md = ob->modifiers.first; for (; md; md = md->next) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); if (mti->foreachTexLink) mti->foreachTexLink(md, ob, walk, userData); @@ -261,7 +264,7 @@ void modifiers_foreachTexLink(Object *ob, TexWalkFunc walk, void *userData) */ void modifier_copyData_generic(const ModifierData *md_src, ModifierData *md_dst) { - ModifierTypeInfo *mti = modifierType_getInfo(md_src->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md_src->type); const size_t data_size = sizeof(ModifierData); const char *md_src_data = ((const char *)md_src) + data_size; char *md_dst_data = ((char *)md_dst) + data_size; @@ -271,7 +274,7 @@ void modifier_copyData_generic(const ModifierData *md_src, ModifierData *md_dst) void modifier_copyData(ModifierData *md, ModifierData *target) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); target->mode = md->mode; @@ -282,7 +285,7 @@ void modifier_copyData(ModifierData *md, ModifierData *target) bool modifier_supportsCage(struct Scene *scene, ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); md->scene = scene; @@ -293,7 +296,7 @@ bool modifier_supportsCage(struct Scene *scene, ModifierData *md) bool modifier_couldBeCage(struct Scene *scene, ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); md->scene = scene; @@ -305,13 +308,13 @@ bool modifier_couldBeCage(struct Scene *scene, ModifierData *md) bool modifier_isSameTopology(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); return ELEM(mti->type, eModifierTypeType_OnlyDeform, eModifierTypeType_NonGeometrical); } bool modifier_isNonGeometrical(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); return (mti->type == eModifierTypeType_NonGeometrical); } @@ -353,7 +356,7 @@ int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *r_lastPossibleC /* Find the last modifier acting on the cage. */ for (i = 0; md; i++, md = md->next) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); bool supports_mapping; md->scene = scene; @@ -411,7 +414,7 @@ bool modifiers_isParticleEnabled(Object *ob) bool modifier_isEnabled(struct Scene *scene, ModifierData *md, int required_mode) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); md->scene = scene; @@ -432,7 +435,7 @@ CDMaskLink *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierDat /* build a list of modifier data requirements in reverse order */ for (; md; md = md->next) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); curr = MEM_callocN(sizeof(CDMaskLink), "CDMaskLink"); @@ -626,7 +629,7 @@ bool modifiers_usesArmature(Object *ob, bArmature *arm) bool modifier_isCorrectableDeformed(ModifierData *md) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); return (mti->deformMatricesEM != NULL); } @@ -736,7 +739,7 @@ struct DerivedMesh *modwrap_applyModifier( struct DerivedMesh *dm, ModifierApplyFlag flag) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false); if (mti->dependsOnNormals && mti->dependsOnNormals(md)) { @@ -751,7 +754,7 @@ struct DerivedMesh *modwrap_applyModifierEM( DerivedMesh *dm, ModifierApplyFlag flag) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false); if (mti->dependsOnNormals && mti->dependsOnNormals(md)) { @@ -766,7 +769,7 @@ void modwrap_deformVerts( float (*vertexCos)[3], int numVerts, ModifierApplyFlag flag) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); BLI_assert(!dm || CustomData_has_layer(&dm->polyData, CD_NORMAL) == false); if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) { @@ -780,7 +783,7 @@ void modwrap_deformVertsEM( struct BMEditMesh *em, DerivedMesh *dm, float (*vertexCos)[3], int numVerts) { - ModifierTypeInfo *mti = modifierType_getInfo(md->type); + const ModifierTypeInfo *mti = modifierType_getInfo(md->type); BLI_assert(!dm || CustomData_has_layer(&dm->polyData, CD_NORMAL) == false); if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) { |