Modifiers: add callback to loop over each texture assigned to a modifier.
This commit is contained in:
@@ -101,6 +101,7 @@ typedef enum {
|
||||
|
||||
typedef void (*ObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin);
|
||||
typedef void (*IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin);
|
||||
typedef void (*TexWalkFunc)(void *userData, struct Object *ob, struct ModifierData *md, const char *propname);
|
||||
|
||||
typedef struct ModifierTypeInfo {
|
||||
/* The user visible name for this modifier */
|
||||
@@ -284,6 +285,16 @@ typedef struct ModifierTypeInfo {
|
||||
*/
|
||||
void (*foreachIDLink)(struct ModifierData *md, struct Object *ob,
|
||||
IDWalkFunc walk, void *userData);
|
||||
|
||||
/* Should call the given walk function for each texture that the
|
||||
* modifier data stores. This is used for finding all textures in
|
||||
* the context for the UI.
|
||||
*
|
||||
* This function is optional. If it is not present, it will be
|
||||
* assumed the modifier has no textures.
|
||||
*/
|
||||
void (*foreachTexLink)(struct ModifierData *md, struct Object *ob,
|
||||
TexWalkFunc walk, void *userData);
|
||||
} ModifierTypeInfo;
|
||||
|
||||
ModifierTypeInfo *modifierType_getInfo (ModifierType type);
|
||||
@@ -315,6 +326,10 @@ void modifiers_foreachObjectLink(struct Object *ob,
|
||||
void modifiers_foreachIDLink(struct Object *ob,
|
||||
IDWalkFunc walk,
|
||||
void *userData);
|
||||
void modifiers_foreachTexLink(struct Object *ob,
|
||||
TexWalkFunc walk,
|
||||
void *userData);
|
||||
|
||||
struct ModifierData *modifiers_findByType(struct Object *ob, ModifierType type);
|
||||
struct ModifierData *modifiers_findByName(struct Object *ob, const char *name);
|
||||
void modifiers_clearErrors(struct Object *ob);
|
||||
|
@@ -195,6 +195,18 @@ void modifiers_foreachIDLink(Object *ob, IDWalkFunc walk, void *userData)
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
if(mti->foreachTexLink)
|
||||
mti->foreachTexLink(md, ob, walk, userData);
|
||||
}
|
||||
}
|
||||
|
||||
void modifier_copyData(ModifierData *md, ModifierData *target)
|
||||
{
|
||||
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||
|
@@ -213,4 +213,5 @@ ModifierTypeInfo modifierType_Armature = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -826,4 +826,5 @@ ModifierTypeInfo modifierType_Array = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -150,4 +150,5 @@ ModifierTypeInfo modifierType_Bevel = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -197,4 +197,5 @@ ModifierTypeInfo modifierType_Boolean = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -299,5 +299,6 @@ ModifierTypeInfo modifierType_Build = {
|
||||
/* dependsOnTime */ dependsOnTime,
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -632,4 +632,5 @@ ModifierTypeInfo modifierType_Cast = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -229,4 +229,5 @@ ModifierTypeInfo modifierType_Cloth = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ foreachIDLink,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -267,4 +267,5 @@ ModifierTypeInfo modifierType_Collision = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -162,4 +162,5 @@ ModifierTypeInfo modifierType_Curve = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -218,4 +218,5 @@ ModifierTypeInfo modifierType_Decimate = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -134,6 +134,12 @@ static void foreachIDLink(ModifierData *md, Object *ob,
|
||||
foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData);
|
||||
}
|
||||
|
||||
static void foreachTexLink(ModifierData *md, Object *ob,
|
||||
TexWalkFunc walk, void *userData)
|
||||
{
|
||||
walk(userData, ob, md, "texture");
|
||||
}
|
||||
|
||||
static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
||||
{
|
||||
DisplaceModifierData *dmd = (DisplaceModifierData*) md;
|
||||
@@ -283,4 +289,5 @@ ModifierTypeInfo modifierType_Displace = {
|
||||
/* dependsOnNormals */ dependsOnNormals,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ foreachIDLink,
|
||||
/* foreachTexLink */ foreachTexLink,
|
||||
};
|
||||
|
@@ -1311,4 +1311,5 @@ ModifierTypeInfo modifierType_EdgeSplit = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -1037,4 +1037,5 @@ ModifierTypeInfo modifierType_Explode = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -162,4 +162,5 @@ ModifierTypeInfo modifierType_Fluidsim = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -289,4 +289,5 @@ ModifierTypeInfo modifierType_Hook = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -156,4 +156,5 @@ ModifierTypeInfo modifierType_Lattice = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -407,4 +407,5 @@ ModifierTypeInfo modifierType_Mask = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -463,4 +463,5 @@ ModifierTypeInfo modifierType_MeshDeform = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -363,4 +363,5 @@ ModifierTypeInfo modifierType_Mirror = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -131,4 +131,5 @@ ModifierTypeInfo modifierType_Multires = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -77,4 +77,5 @@ ModifierTypeInfo modifierType_None = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -350,4 +350,5 @@ ModifierTypeInfo modifierType_ParticleInstance = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -242,4 +242,5 @@ ModifierTypeInfo modifierType_ParticleSystem = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -903,4 +903,5 @@ ModifierTypeInfo modifierType_Screw = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -148,5 +148,6 @@ ModifierTypeInfo modifierType_ShapeKey = {
|
||||
/* dependsOnTime */ NULL,
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -186,4 +186,5 @@ ModifierTypeInfo modifierType_Shrinkwrap = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -385,4 +385,5 @@ ModifierTypeInfo modifierType_SimpleDeform = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -189,4 +189,5 @@ ModifierTypeInfo modifierType_Smoke = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ foreachIDLink,
|
||||
/* foreachTexLink */ NULL
|
||||
};
|
||||
|
@@ -270,4 +270,5 @@ ModifierTypeInfo modifierType_Smooth = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -87,4 +87,5 @@ ModifierTypeInfo modifierType_Softbody = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -689,5 +689,6 @@ ModifierTypeInfo modifierType_Solidify = {
|
||||
/* dependsOnTime */ NULL,
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -152,4 +152,6 @@ ModifierTypeInfo modifierType_Subsurf = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
||||
|
@@ -192,4 +192,5 @@ ModifierTypeInfo modifierType_Surface = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ NULL,
|
||||
/* foreachIDLink */ NULL,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -434,4 +434,5 @@ ModifierTypeInfo modifierType_UVProject = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ foreachIDLink,
|
||||
/* foreachTexLink */ NULL,
|
||||
};
|
||||
|
@@ -140,6 +140,11 @@ static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *u
|
||||
walk(userData, ob, (ID **)&wmd->map_object);
|
||||
}
|
||||
|
||||
static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void *userData)
|
||||
{
|
||||
walk(userData, ob, md, "texture");
|
||||
}
|
||||
|
||||
static void updateDepgraph(ModifierData *md, DagForest *forest, struct Scene *UNUSED(scene),
|
||||
Object *UNUSED(ob), DagNode *obNode)
|
||||
{
|
||||
@@ -364,4 +369,5 @@ ModifierTypeInfo modifierType_Warp = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ foreachIDLink,
|
||||
/* foreachTexLink */ foreachTexLink,
|
||||
};
|
||||
|
@@ -126,6 +126,12 @@ static void foreachIDLink(ModifierData *md, Object *ob,
|
||||
foreachObjectLink(md, ob, (ObjectWalkFunc)walk, userData);
|
||||
}
|
||||
|
||||
static void foreachTexLink(ModifierData *md, Object *ob,
|
||||
TexWalkFunc walk, void *userData)
|
||||
{
|
||||
walk(userData, ob, md, "texture");
|
||||
}
|
||||
|
||||
static void updateDepgraph(ModifierData *md, DagForest *forest,
|
||||
Scene *UNUSED(scene),
|
||||
Object *UNUSED(ob),
|
||||
@@ -466,4 +472,5 @@ ModifierTypeInfo modifierType_Wave = {
|
||||
/* dependsOnNormals */ NULL,
|
||||
/* foreachObjectLink */ foreachObjectLink,
|
||||
/* foreachIDLink */ foreachIDLink,
|
||||
/* foreachTexLink */ foreachTexLink,
|
||||
};
|
||||
|
Reference in New Issue
Block a user