Fix for missing visits of Freestyle-related ID data blocks in BKE_library_foreach_ID_link().
This commit is contained in:
@@ -47,6 +47,7 @@
|
||||
#include "DNA_mask_types.h"
|
||||
#include "DNA_node_types.h"
|
||||
#include "DNA_object_force.h"
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_sequence_types.h"
|
||||
#include "DNA_screen_types.h"
|
||||
#include "DNA_speaker_types.h"
|
||||
@@ -168,6 +169,7 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
||||
case ID_SCE:
|
||||
{
|
||||
Scene *scene = (Scene *) id;
|
||||
SceneRenderLayer *srl;
|
||||
Base *base;
|
||||
|
||||
CALLBACK_INVOKE(scene->camera, IDWALK_NOP);
|
||||
@@ -178,6 +180,25 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
||||
}
|
||||
CALLBACK_INVOKE(scene->obedit, IDWALK_NOP);
|
||||
|
||||
for (srl = scene->r.layers.first; srl; srl = srl->next) {
|
||||
FreestyleModuleConfig *fmc;
|
||||
FreestyleLineSet *fls;
|
||||
|
||||
for (fmc = srl->freestyleConfig.modules.first; fmc; fmc = fmc->next) {
|
||||
if (fmc->script) {
|
||||
CALLBACK_INVOKE(fmc->script, IDWALK_NOP);
|
||||
}
|
||||
}
|
||||
for (fls = srl->freestyleConfig.linesets.first; fls; fls = fls->next) {
|
||||
if (fls->group) {
|
||||
CALLBACK_INVOKE(fls->group, IDWALK_NOP);
|
||||
}
|
||||
if (fls->linestyle) {
|
||||
CALLBACK_INVOKE(fls->linestyle, IDWALK_NOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (scene->ed) {
|
||||
Sequence *seq;
|
||||
SEQP_BEGIN(scene->ed, seq)
|
||||
@@ -455,12 +476,38 @@ void BKE_library_foreach_ID_link(ID *id, LibraryIDLinkCallback callback, void *u
|
||||
case ID_LS:
|
||||
{
|
||||
FreestyleLineStyle *linestyle = (FreestyleLineStyle *) id;
|
||||
LineStyleModifier *m;
|
||||
for (i = 0; i < MAX_MTEX; i++) {
|
||||
if (linestyle->mtex[i]) {
|
||||
library_foreach_mtex(&data, linestyle->mtex[i]);
|
||||
}
|
||||
}
|
||||
CALLBACK_INVOKE(linestyle->nodetree, IDWALK_NOP);
|
||||
|
||||
for (m = (LineStyleModifier *)linestyle->color_modifiers.first; m; m = m->next) {
|
||||
if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) {
|
||||
LineStyleColorModifier_DistanceFromObject *p = (LineStyleColorModifier_DistanceFromObject *)m;
|
||||
if (p->target) {
|
||||
CALLBACK_INVOKE(p->target, IDWALK_NOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (m = (LineStyleModifier *)linestyle->alpha_modifiers.first; m; m = m->next) {
|
||||
if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) {
|
||||
LineStyleAlphaModifier_DistanceFromObject *p = (LineStyleAlphaModifier_DistanceFromObject *)m;
|
||||
if (p->target) {
|
||||
CALLBACK_INVOKE(p->target, IDWALK_NOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (m = (LineStyleModifier *)linestyle->thickness_modifiers.first; m; m = m->next) {
|
||||
if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) {
|
||||
LineStyleThicknessModifier_DistanceFromObject *p = (LineStyleThicknessModifier_DistanceFromObject *)m;
|
||||
if (p->target) {
|
||||
CALLBACK_INVOKE(p->target, IDWALK_NOP);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user