Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/modifier.c
| Show First 20 Lines • Show All 472 Lines • ▼ Show 20 Lines | bool modifier_isEnabled(const struct Scene *scene, ModifierData *md, int required_mode) | ||||
| if (scene != NULL && mti->isDisabled && mti->isDisabled(scene, md, required_mode == eModifierMode_Render)) return false; | if (scene != NULL && mti->isDisabled && mti->isDisabled(scene, md, required_mode == eModifierMode_Render)) return false; | ||||
| if (md->mode & eModifierMode_DisableTemporary) return false; | if (md->mode & eModifierMode_DisableTemporary) return false; | ||||
| if ((required_mode & eModifierMode_Editmode) && !(mti->flags & eModifierTypeFlag_SupportsEditmode)) return false; | if ((required_mode & eModifierMode_Editmode) && !(mti->flags & eModifierTypeFlag_SupportsEditmode)) return false; | ||||
| return true; | return true; | ||||
| } | } | ||||
| CDMaskLink *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, | CDMaskLink *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, | ||||
| CustomDataMask dataMask, int required_mode, | const CustomData_Masks *dataMask, int required_mode, | ||||
| ModifierData *previewmd, CustomDataMask previewmask) | ModifierData *previewmd, const CustomData_Masks *previewmask) | ||||
| { | { | ||||
| CDMaskLink *dataMasks = NULL; | CDMaskLink *dataMasks = NULL; | ||||
| CDMaskLink *curr, *prev; | CDMaskLink *curr, *prev; | ||||
| /* build a list of modifier data requirements in reverse order */ | /* build a list of modifier data requirements in reverse order */ | ||||
| for (; md; md = md->next) { | for (; md; md = md->next) { | ||||
| const ModifierTypeInfo *mti = modifierType_getInfo(md->type); | const ModifierTypeInfo *mti = modifierType_getInfo(md->type); | ||||
| curr = MEM_callocN(sizeof(CDMaskLink), "CDMaskLink"); | curr = MEM_callocN(sizeof(CDMaskLink), "CDMaskLink"); | ||||
| if (modifier_isEnabled(scene, md, required_mode)) { | if (modifier_isEnabled(scene, md, required_mode)) { | ||||
| if (mti->requiredDataMask) | if (mti->requiredDataMask) | ||||
| curr->mask = mti->requiredDataMask(ob, md); | mti->requiredDataMask(ob, md, &curr->mask); | ||||
| if (previewmd == md) { | if (previewmd == md && previewmask != NULL) { | ||||
| curr->mask |= previewmask; | CustomData_Masks_update(&curr->mask, previewmask); | ||||
| } | } | ||||
| } | } | ||||
| /* prepend new datamask */ | /* prepend new datamask */ | ||||
| curr->next = dataMasks; | curr->next = dataMasks; | ||||
| dataMasks = curr; | dataMasks = curr; | ||||
| } | } | ||||
| /* build the list of required data masks - each mask in the list must | /* build the list of required data masks - each mask in the list must | ||||
| * include all elements of the masks that follow it | * include all elements of the masks that follow it | ||||
| * | * | ||||
| * note the list is currently in reverse order, so "masks that follow it" | * note the list is currently in reverse order, so "masks that follow it" | ||||
| * actually means "masks that precede it" at the moment | * actually means "masks that precede it" at the moment | ||||
| */ | */ | ||||
| for (curr = dataMasks, prev = NULL; curr; prev = curr, curr = curr->next) { | for (curr = dataMasks, prev = NULL; curr; prev = curr, curr = curr->next) { | ||||
| if (prev) { | if (prev) { | ||||
| CustomDataMask prev_mask = prev->mask; | CustomData_Masks_update(&curr->mask, &prev->mask); | ||||
| CustomDataMask curr_mask = curr->mask; | |||||
| curr->mask = curr_mask | prev_mask; | |||||
| } | } | ||||
| else { | else { | ||||
| CustomDataMask curr_mask = curr->mask; | CustomData_Masks_update(&curr->mask, dataMask); | ||||
| curr->mask = curr_mask | dataMask; | |||||
| } | } | ||||
| } | } | ||||
| /* reverse the list so it's in the correct order */ | /* reverse the list so it's in the correct order */ | ||||
| BLI_linklist_reverse((LinkNode **)&dataMasks); | BLI_linklist_reverse((LinkNode **)&dataMasks); | ||||
| return dataMasks; | return dataMasks; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 393 Lines • Show Last 20 Lines | |||||