forked from bartvdbraak/blender
Made modifiers_getVirtualModifierList safe for threading
Move static variables to context filling in by this fcuntion and owned by a callee function. This ensures no conflicts between threads happens because of static variables used in this function. Also moved modifier types and virtual modifiers data to a function called from creator. This is needed to be sure all the information is properly initialied to the time when threads starts to use this data. -- svn merge -r57899:57900 ^/branches/soc-2013-depsgraph_mt
This commit is contained in:
parent
a14febc70a
commit
beffaa293e
@ -304,6 +304,9 @@ typedef struct ModifierTypeInfo {
|
|||||||
TexWalkFunc walk, void *userData);
|
TexWalkFunc walk, void *userData);
|
||||||
} ModifierTypeInfo;
|
} ModifierTypeInfo;
|
||||||
|
|
||||||
|
/* Initialize modifier's global data (type info and some common global storages). */
|
||||||
|
void BKE_modifier_init(void);
|
||||||
|
|
||||||
ModifierTypeInfo *modifierType_getInfo(ModifierType type);
|
ModifierTypeInfo *modifierType_getInfo(ModifierType type);
|
||||||
|
|
||||||
/* Modifier utility calls, do call through type pointer and return
|
/* Modifier utility calls, do call through type pointer and return
|
||||||
@ -377,7 +380,15 @@ struct CDMaskLink *modifiers_calcDataMasks(struct Scene *scene,
|
|||||||
struct ModifierData *modifiers_getLastPreview(struct Scene *scene,
|
struct ModifierData *modifiers_getLastPreview(struct Scene *scene,
|
||||||
struct ModifierData *md,
|
struct ModifierData *md,
|
||||||
int required_mode);
|
int required_mode);
|
||||||
struct ModifierData *modifiers_getVirtualModifierList(struct Object *ob);
|
|
||||||
|
typedef struct VirtualModifierData {
|
||||||
|
ArmatureModifierData amd;
|
||||||
|
CurveModifierData cmd;
|
||||||
|
LatticeModifierData lmd;
|
||||||
|
ShapeKeyModifierData smd;
|
||||||
|
} VirtualModifierData;
|
||||||
|
|
||||||
|
struct ModifierData *modifiers_getVirtualModifierList(struct Object *ob, struct VirtualModifierData *data);
|
||||||
|
|
||||||
/* ensure modifier correctness when changing ob->data */
|
/* ensure modifier correctness when changing ob->data */
|
||||||
void test_object_modifiers(struct Object *ob);
|
void test_object_modifiers(struct Object *ob);
|
||||||
|
@ -1440,6 +1440,8 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
|||||||
/* XXX Same as above... For now, only weights preview in WPaint mode. */
|
/* XXX Same as above... For now, only weights preview in WPaint mode. */
|
||||||
const int do_mod_wmcol = do_init_wmcol;
|
const int do_mod_wmcol = do_init_wmcol;
|
||||||
|
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
ModifierApplyFlag app_flags = useRenderParams ? MOD_APPLY_RENDER : 0;
|
ModifierApplyFlag app_flags = useRenderParams ? MOD_APPLY_RENDER : 0;
|
||||||
ModifierApplyFlag deform_app_flags = app_flags;
|
ModifierApplyFlag deform_app_flags = app_flags;
|
||||||
if (useCache)
|
if (useCache)
|
||||||
@ -1451,7 +1453,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
|||||||
has_multires = 0;
|
has_multires = 0;
|
||||||
|
|
||||||
if (!skipVirtualArmature) {
|
if (!skipVirtualArmature) {
|
||||||
firstmd = modifiers_getVirtualModifierList(ob);
|
firstmd = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* game engine exception */
|
/* game engine exception */
|
||||||
@ -1961,6 +1963,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
|
|||||||
int do_init_wmcol = ((((Mesh *)ob->data)->drawflag & ME_DRAWEIGHT) && !do_final_wmcol);
|
int do_init_wmcol = ((((Mesh *)ob->data)->drawflag & ME_DRAWEIGHT) && !do_final_wmcol);
|
||||||
int do_init_statvis = ((((Mesh *)ob->data)->drawflag & ME_DRAW_STATVIS) && !do_init_wmcol);
|
int do_init_statvis = ((((Mesh *)ob->data)->drawflag & ME_DRAW_STATVIS) && !do_init_wmcol);
|
||||||
const int do_mod_wmcol = do_init_wmcol;
|
const int do_mod_wmcol = do_init_wmcol;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
modifiers_clearErrors(ob);
|
modifiers_clearErrors(ob);
|
||||||
|
|
||||||
@ -1969,7 +1972,7 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
|
|||||||
}
|
}
|
||||||
|
|
||||||
dm = NULL;
|
dm = NULL;
|
||||||
md = modifiers_getVirtualModifierList(ob);
|
md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
/* copied from mesh_calc_modifiers */
|
/* copied from mesh_calc_modifiers */
|
||||||
if (do_mod_wmcol) {
|
if (do_mod_wmcol) {
|
||||||
|
@ -742,7 +742,8 @@ void BKE_displist_make_mball_forRender(Scene *scene, Object *ob, ListBase *dispb
|
|||||||
|
|
||||||
static ModifierData *curve_get_tessellate_point(Scene *scene, Object *ob, int renderResolution, int editmode)
|
static ModifierData *curve_get_tessellate_point(Scene *scene, Object *ob, int renderResolution, int editmode)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
ModifierData *pretessellatePoint;
|
ModifierData *pretessellatePoint;
|
||||||
int required_mode;
|
int required_mode;
|
||||||
|
|
||||||
@ -784,7 +785,8 @@ static void curve_calc_modifiers_pre(Scene *scene, Object *ob, int forRender, in
|
|||||||
float (**originalVerts_r)[3],
|
float (**originalVerts_r)[3],
|
||||||
float (**deformedVerts_r)[3], int *numVerts_r)
|
float (**deformedVerts_r)[3], int *numVerts_r)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
ModifierData *pretessellatePoint;
|
ModifierData *pretessellatePoint;
|
||||||
Curve *cu = ob->data;
|
Curve *cu = ob->data;
|
||||||
ListBase *nurb = BKE_curve_nurbs_get(cu);
|
ListBase *nurb = BKE_curve_nurbs_get(cu);
|
||||||
@ -898,7 +900,8 @@ static void curve_calc_modifiers_post(Scene *scene, Object *ob, ListBase *dispba
|
|||||||
int forRender, int renderResolution,
|
int forRender, int renderResolution,
|
||||||
float (*originalVerts)[3], float (*deformedVerts)[3])
|
float (*originalVerts)[3], float (*deformedVerts)[3])
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
ModifierData *pretessellatePoint;
|
ModifierData *pretessellatePoint;
|
||||||
Curve *cu = ob->data;
|
Curve *cu = ob->data;
|
||||||
ListBase *nurb = BKE_curve_nurbs_get(cu);
|
ListBase *nurb = BKE_curve_nurbs_get(cu);
|
||||||
@ -1142,8 +1145,8 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *derivedFina
|
|||||||
/* this function represents logic of mesh's orcodm calculation
|
/* this function represents logic of mesh's orcodm calculation
|
||||||
* for displist-based objects
|
* for displist-based objects
|
||||||
*/
|
*/
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
ModifierData *pretessellatePoint;
|
ModifierData *pretessellatePoint;
|
||||||
Curve *cu = ob->data;
|
Curve *cu = ob->data;
|
||||||
int required_mode;
|
int required_mode;
|
||||||
|
@ -991,7 +991,8 @@ void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3])
|
|||||||
void BKE_lattice_modifiers_calc(Scene *scene, Object *ob)
|
void BKE_lattice_modifiers_calc(Scene *scene, Object *ob)
|
||||||
{
|
{
|
||||||
Lattice *lt = ob->data;
|
Lattice *lt = ob->data;
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
float (*vertexCos)[3] = NULL;
|
float (*vertexCos)[3] = NULL;
|
||||||
int numVerts, editmode = (lt->editlatt != NULL);
|
int numVerts, editmode = (lt->editlatt != NULL);
|
||||||
|
|
||||||
|
@ -69,19 +69,44 @@
|
|||||||
|
|
||||||
#include "MOD_modifiertypes.h"
|
#include "MOD_modifiertypes.h"
|
||||||
|
|
||||||
|
static ModifierTypeInfo *modifier_types[NUM_MODIFIER_TYPES] = {NULL};
|
||||||
|
static VirtualModifierData virtualModifierCommonData;
|
||||||
|
|
||||||
|
void BKE_modifier_init(void)
|
||||||
|
{
|
||||||
|
ModifierData *md;
|
||||||
|
|
||||||
|
/* Initialize modifier types */
|
||||||
|
modifier_type_init(modifier_types); /* MOD_utils.c */
|
||||||
|
|
||||||
|
/* Initialize global cmmon storage used for virtual modifier list */
|
||||||
|
md = modifier_new(eModifierType_Armature);
|
||||||
|
virtualModifierCommonData.amd = *((ArmatureModifierData *) md);
|
||||||
|
modifier_free(md);
|
||||||
|
|
||||||
|
md = modifier_new(eModifierType_Curve);
|
||||||
|
virtualModifierCommonData.cmd = *((CurveModifierData *) md);
|
||||||
|
modifier_free(md);
|
||||||
|
|
||||||
|
md = modifier_new(eModifierType_Lattice);
|
||||||
|
virtualModifierCommonData.lmd = *((LatticeModifierData *) md);
|
||||||
|
modifier_free(md);
|
||||||
|
|
||||||
|
md = modifier_new(eModifierType_ShapeKey);
|
||||||
|
virtualModifierCommonData.smd = *((ShapeKeyModifierData *) md);
|
||||||
|
modifier_free(md);
|
||||||
|
|
||||||
|
virtualModifierCommonData.amd.modifier.mode |= eModifierMode_Virtual;
|
||||||
|
virtualModifierCommonData.cmd.modifier.mode |= eModifierMode_Virtual;
|
||||||
|
virtualModifierCommonData.lmd.modifier.mode |= eModifierMode_Virtual;
|
||||||
|
virtualModifierCommonData.smd.modifier.mode |= eModifierMode_Virtual;
|
||||||
|
}
|
||||||
|
|
||||||
ModifierTypeInfo *modifierType_getInfo(ModifierType type)
|
ModifierTypeInfo *modifierType_getInfo(ModifierType type)
|
||||||
{
|
{
|
||||||
static ModifierTypeInfo *types[NUM_MODIFIER_TYPES] = {NULL};
|
|
||||||
static int types_init = 1;
|
|
||||||
|
|
||||||
if (types_init) {
|
|
||||||
modifier_type_init(types); /* MOD_utils.c */
|
|
||||||
types_init = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* type unsigned, no need to check < 0 */
|
/* type unsigned, no need to check < 0 */
|
||||||
if (type < NUM_MODIFIER_TYPES && types[type]->name[0] != '\0') {
|
if (type < NUM_MODIFIER_TYPES && modifier_types[type]->name[0] != '\0') {
|
||||||
return types[type];
|
return modifier_types[type];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -289,7 +314,8 @@ void modifier_setError(ModifierData *md, const char *_format, ...)
|
|||||||
*/
|
*/
|
||||||
int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
|
int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
|
||||||
{
|
{
|
||||||
ModifierData *md = (virtual_) ? modifiers_getVirtualModifierList(ob) : ob->modifiers.first;
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = (virtual_) ? modifiers_getVirtualModifierList(ob, &virtualModifierData) : ob->modifiers.first;
|
||||||
int i, cageIndex = -1;
|
int i, cageIndex = -1;
|
||||||
|
|
||||||
if (lastPossibleCageIndex_r) {
|
if (lastPossibleCageIndex_r) {
|
||||||
@ -435,74 +461,43 @@ ModifierData *modifiers_getLastPreview(struct Scene *scene, ModifierData *md, in
|
|||||||
/* NOTE: This is to support old files from before Blender supported modifiers,
|
/* NOTE: This is to support old files from before Blender supported modifiers,
|
||||||
* in some cases versioning code updates these so for new files this will
|
* in some cases versioning code updates these so for new files this will
|
||||||
* return an empty list. */
|
* return an empty list. */
|
||||||
ModifierData *modifiers_getVirtualModifierList(Object *ob)
|
ModifierData *modifiers_getVirtualModifierList(Object *ob, VirtualModifierData *virtualModifierData)
|
||||||
{
|
{
|
||||||
/* Kinda hacky, but should be fine since we are never
|
|
||||||
* re-entrant and avoid free hassles.
|
|
||||||
*/
|
|
||||||
static ArmatureModifierData amd;
|
|
||||||
static CurveModifierData cmd;
|
|
||||||
static LatticeModifierData lmd;
|
|
||||||
static ShapeKeyModifierData smd;
|
|
||||||
static int init = 1;
|
|
||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
|
|
||||||
if (init) {
|
|
||||||
md = modifier_new(eModifierType_Armature);
|
|
||||||
amd = *((ArmatureModifierData *) md);
|
|
||||||
modifier_free(md);
|
|
||||||
|
|
||||||
md = modifier_new(eModifierType_Curve);
|
|
||||||
cmd = *((CurveModifierData *) md);
|
|
||||||
modifier_free(md);
|
|
||||||
|
|
||||||
md = modifier_new(eModifierType_Lattice);
|
|
||||||
lmd = *((LatticeModifierData *) md);
|
|
||||||
modifier_free(md);
|
|
||||||
|
|
||||||
md = modifier_new(eModifierType_ShapeKey);
|
|
||||||
smd = *((ShapeKeyModifierData *) md);
|
|
||||||
modifier_free(md);
|
|
||||||
|
|
||||||
amd.modifier.mode |= eModifierMode_Virtual;
|
|
||||||
cmd.modifier.mode |= eModifierMode_Virtual;
|
|
||||||
lmd.modifier.mode |= eModifierMode_Virtual;
|
|
||||||
smd.modifier.mode |= eModifierMode_Virtual;
|
|
||||||
|
|
||||||
init = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
md = ob->modifiers.first;
|
md = ob->modifiers.first;
|
||||||
|
|
||||||
|
*virtualModifierData = virtualModifierCommonData;
|
||||||
|
|
||||||
if (ob->parent) {
|
if (ob->parent) {
|
||||||
if (ob->parent->type == OB_ARMATURE && ob->partype == PARSKEL) {
|
if (ob->parent->type == OB_ARMATURE && ob->partype == PARSKEL) {
|
||||||
amd.object = ob->parent;
|
virtualModifierData->amd.object = ob->parent;
|
||||||
amd.modifier.next = md;
|
virtualModifierData->amd.modifier.next = md;
|
||||||
amd.deformflag = ((bArmature *)(ob->parent->data))->deformflag;
|
virtualModifierData->amd.deformflag = ((bArmature *)(ob->parent->data))->deformflag;
|
||||||
md = &amd.modifier;
|
md = &virtualModifierData->amd.modifier;
|
||||||
}
|
}
|
||||||
else if (ob->parent->type == OB_CURVE && ob->partype == PARSKEL) {
|
else if (ob->parent->type == OB_CURVE && ob->partype == PARSKEL) {
|
||||||
cmd.object = ob->parent;
|
virtualModifierData->cmd.object = ob->parent;
|
||||||
cmd.defaxis = ob->trackflag + 1;
|
virtualModifierData->cmd.defaxis = ob->trackflag + 1;
|
||||||
cmd.modifier.next = md;
|
virtualModifierData->cmd.modifier.next = md;
|
||||||
md = &cmd.modifier;
|
md = &virtualModifierData->cmd.modifier;
|
||||||
}
|
}
|
||||||
else if (ob->parent->type == OB_LATTICE && ob->partype == PARSKEL) {
|
else if (ob->parent->type == OB_LATTICE && ob->partype == PARSKEL) {
|
||||||
lmd.object = ob->parent;
|
virtualModifierData->lmd.object = ob->parent;
|
||||||
lmd.modifier.next = md;
|
virtualModifierData->lmd.modifier.next = md;
|
||||||
md = &lmd.modifier;
|
md = &virtualModifierData->lmd.modifier;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* shape key modifier, not yet for curves */
|
/* shape key modifier, not yet for curves */
|
||||||
if (ELEM(ob->type, OB_MESH, OB_LATTICE) && BKE_key_from_object(ob)) {
|
if (ELEM(ob->type, OB_MESH, OB_LATTICE) && BKE_key_from_object(ob)) {
|
||||||
if (ob->type == OB_MESH && (ob->shapeflag & OB_SHAPE_EDIT_MODE))
|
if (ob->type == OB_MESH && (ob->shapeflag & OB_SHAPE_EDIT_MODE))
|
||||||
smd.modifier.mode |= eModifierMode_Editmode | eModifierMode_OnCage;
|
virtualModifierData->smd.modifier.mode |= eModifierMode_Editmode | eModifierMode_OnCage;
|
||||||
else
|
else
|
||||||
smd.modifier.mode &= ~eModifierMode_Editmode | eModifierMode_OnCage;
|
virtualModifierData->smd.modifier.mode &= ~eModifierMode_Editmode | eModifierMode_OnCage;
|
||||||
|
|
||||||
smd.modifier.next = md;
|
virtualModifierData->smd.modifier.next = md;
|
||||||
md = &smd.modifier;
|
md = &virtualModifierData->smd.modifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
return md;
|
return md;
|
||||||
@ -513,7 +508,8 @@ ModifierData *modifiers_getVirtualModifierList(Object *ob)
|
|||||||
*/
|
*/
|
||||||
Object *modifiers_isDeformedByArmature(Object *ob)
|
Object *modifiers_isDeformedByArmature(Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
ArmatureModifierData *amd = NULL;
|
ArmatureModifierData *amd = NULL;
|
||||||
|
|
||||||
/* return the first selected armature, this lets us use multiple armatures */
|
/* return the first selected armature, this lets us use multiple armatures */
|
||||||
@ -536,7 +532,8 @@ Object *modifiers_isDeformedByArmature(Object *ob)
|
|||||||
*/
|
*/
|
||||||
Object *modifiers_isDeformedByLattice(Object *ob)
|
Object *modifiers_isDeformedByLattice(Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
LatticeModifierData *lmd = NULL;
|
LatticeModifierData *lmd = NULL;
|
||||||
|
|
||||||
/* return the first selected lattice, this lets us use multiple lattices */
|
/* return the first selected lattice, this lets us use multiple lattices */
|
||||||
@ -559,7 +556,8 @@ Object *modifiers_isDeformedByLattice(Object *ob)
|
|||||||
*/
|
*/
|
||||||
Object *modifiers_isDeformedByCurve(Object *ob)
|
Object *modifiers_isDeformedByCurve(Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
CurveModifierData *cmd = NULL;
|
CurveModifierData *cmd = NULL;
|
||||||
|
|
||||||
/* return the first selected curve, this lets us use multiple curves */
|
/* return the first selected curve, this lets us use multiple curves */
|
||||||
@ -579,7 +577,8 @@ Object *modifiers_isDeformedByCurve(Object *ob)
|
|||||||
|
|
||||||
bool modifiers_usesArmature(Object *ob, bArmature *arm)
|
bool modifiers_usesArmature(Object *ob, bArmature *arm)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
if (md->type == eModifierType_Armature) {
|
if (md->type == eModifierType_Armature) {
|
||||||
@ -604,7 +603,8 @@ bool modifier_isCorrectableDeformed(ModifierData *md)
|
|||||||
|
|
||||||
bool modifiers_isCorrectableDeformed(Object *ob)
|
bool modifiers_isCorrectableDeformed(Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
if (ob->mode == OB_MODE_EDIT && (md->mode & eModifierMode_Editmode) == 0) {
|
if (ob->mode == OB_MODE_EDIT && (md->mode & eModifierMode_Editmode) == 0) {
|
||||||
|
@ -3158,8 +3158,9 @@ int BKE_object_is_modified(Scene *scene, Object *ob)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
/* cloth */
|
/* cloth */
|
||||||
for (md = modifiers_getVirtualModifierList(ob);
|
for (md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
md && (flag != (eModifierMode_Render | eModifierMode_Realtime));
|
md && (flag != (eModifierMode_Render | eModifierMode_Realtime));
|
||||||
md = md->next)
|
md = md->next)
|
||||||
{
|
{
|
||||||
@ -3180,10 +3181,11 @@ int BKE_object_is_modified(Scene *scene, Object *ob)
|
|||||||
int BKE_object_is_deform_modified(Scene *scene, Object *ob)
|
int BKE_object_is_deform_modified(Scene *scene, Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
int flag = 0;
|
int flag = 0;
|
||||||
|
|
||||||
/* cloth */
|
/* cloth */
|
||||||
for (md = modifiers_getVirtualModifierList(ob);
|
for (md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
md && (flag != (eModifierMode_Render | eModifierMode_Realtime));
|
md && (flag != (eModifierMode_Render | eModifierMode_Realtime));
|
||||||
md = md->next)
|
md = md->next)
|
||||||
{
|
{
|
||||||
@ -3205,8 +3207,9 @@ int BKE_object_is_deform_modified(Scene *scene, Object *ob)
|
|||||||
bool BKE_object_is_animated(Scene *scene, Object *ob)
|
bool BKE_object_is_animated(Scene *scene, Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
for (md = modifiers_getVirtualModifierList(ob); md; md = md->next)
|
for (md = modifiers_getVirtualModifierList(ob, &virtualModifierData); md; md = md->next)
|
||||||
if (modifier_dependsOnTime(md) &&
|
if (modifier_dependsOnTime(md) &&
|
||||||
(modifier_isEnabled(scene, md, eModifierMode_Realtime) ||
|
(modifier_isEnabled(scene, md, eModifierMode_Realtime) ||
|
||||||
modifier_isEnabled(scene, md, eModifierMode_Render)))
|
modifier_isEnabled(scene, md, eModifierMode_Render)))
|
||||||
|
@ -73,6 +73,7 @@ bool *BKE_objdef_validmap_get(Object *ob, const int defbase_tot)
|
|||||||
GHash *gh;
|
GHash *gh;
|
||||||
int i, step1 = 1;
|
int i, step1 = 1;
|
||||||
//int defbase_tot = BLI_countlist(&ob->defbase);
|
//int defbase_tot = BLI_countlist(&ob->defbase);
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
if (ob->defbase.first == NULL) {
|
if (ob->defbase.first == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -88,7 +89,7 @@ bool *BKE_objdef_validmap_get(Object *ob, const int defbase_tot)
|
|||||||
BLI_assert(BLI_ghash_size(gh) == defbase_tot);
|
BLI_assert(BLI_ghash_size(gh) == defbase_tot);
|
||||||
|
|
||||||
/* now loop through the armature modifiers and identify deform bones */
|
/* now loop through the armature modifiers and identify deform bones */
|
||||||
for (md = ob->modifiers.first; md; md = !md->next && step1 ? (step1 = 0), modifiers_getVirtualModifierList(ob) : md->next) {
|
for (md = ob->modifiers.first; md; md = !md->next && step1 ? (step1 = 0), modifiers_getVirtualModifierList(ob, &virtualModifierData) : md->next) {
|
||||||
if (!(md->mode & (eModifierMode_Realtime | eModifierMode_Virtual)))
|
if (!(md->mode & (eModifierMode_Realtime | eModifierMode_Virtual)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
* ***** BEGIN GPL LICENSE BLOCK *****
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
@ -1017,6 +1018,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
|||||||
Scene *scene = CTX_data_scene(C);
|
Scene *scene = CTX_data_scene(C);
|
||||||
Object *ob;
|
Object *ob;
|
||||||
ModifierData *md, *vmd;
|
ModifierData *md, *vmd;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
int i, lastCageIndex, cageIndex;
|
int i, lastCageIndex, cageIndex;
|
||||||
|
|
||||||
/* verify we have valid data */
|
/* verify we have valid data */
|
||||||
@ -1039,7 +1041,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
|||||||
cageIndex = modifiers_getCageIndex(scene, ob, &lastCageIndex, 0);
|
cageIndex = modifiers_getCageIndex(scene, ob, &lastCageIndex, 0);
|
||||||
|
|
||||||
/* XXX virtual modifiers are not accesible for python */
|
/* XXX virtual modifiers are not accesible for python */
|
||||||
vmd = modifiers_getVirtualModifierList(ob);
|
vmd = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
for (i = 0; vmd; i++, vmd = vmd->next) {
|
for (i = 0; vmd; i++, vmd = vmd->next) {
|
||||||
if (md == vmd)
|
if (md == vmd)
|
||||||
|
@ -150,6 +150,7 @@ MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob)
|
|||||||
{
|
{
|
||||||
Mesh *me = (Mesh *)ob->data;
|
Mesh *me = (Mesh *)ob->data;
|
||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
if (ob->sculpt && ob->sculpt->bm) {
|
if (ob->sculpt && ob->sculpt->bm) {
|
||||||
/* can't combine multires and dynamic topology */
|
/* can't combine multires and dynamic topology */
|
||||||
@ -161,7 +162,7 @@ MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (md = modifiers_getVirtualModifierList(ob); md; md = md->next) {
|
for (md = modifiers_getVirtualModifierList(ob, &virtualModifierData); md; md = md->next) {
|
||||||
if (md->type == eModifierType_Multires) {
|
if (md->type == eModifierType_Multires) {
|
||||||
MultiresModifierData *mmd = (MultiresModifierData *)md;
|
MultiresModifierData *mmd = (MultiresModifierData *)md;
|
||||||
|
|
||||||
@ -180,8 +181,9 @@ MultiresModifierData *sculpt_multires_active(Scene *scene, Object *ob)
|
|||||||
static int sculpt_has_active_modifiers(Scene *scene, Object *ob)
|
static int sculpt_has_active_modifiers(Scene *scene, Object *ob)
|
||||||
{
|
{
|
||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
md = modifiers_getVirtualModifierList(ob);
|
md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
/* exception for shape keys because we can edit those */
|
/* exception for shape keys because we can edit those */
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
@ -198,6 +200,7 @@ static int sculpt_modifiers_active(Scene *scene, Sculpt *sd, Object *ob)
|
|||||||
ModifierData *md;
|
ModifierData *md;
|
||||||
Mesh *me = (Mesh *)ob->data;
|
Mesh *me = (Mesh *)ob->data;
|
||||||
MultiresModifierData *mmd = sculpt_multires_active(scene, ob);
|
MultiresModifierData *mmd = sculpt_multires_active(scene, ob);
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
if (mmd || ob->sculpt->bm)
|
if (mmd || ob->sculpt->bm)
|
||||||
return 0;
|
return 0;
|
||||||
@ -206,7 +209,7 @@ static int sculpt_modifiers_active(Scene *scene, Sculpt *sd, Object *ob)
|
|||||||
if ((ob->shapeflag & OB_SHAPE_LOCK) == 0 && me->key && ob->shapenr)
|
if ((ob->shapeflag & OB_SHAPE_LOCK) == 0 && me->key && ob->shapenr)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
md = modifiers_getVirtualModifierList(ob);
|
md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
/* exception for shape keys because we can edit those */
|
/* exception for shape keys because we can edit those */
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
|
@ -260,11 +260,12 @@ int editbmesh_get_first_deform_matrices(Scene *scene, Object *ob, BMEditMesh *em
|
|||||||
int i, a, numleft = 0, numVerts = 0;
|
int i, a, numleft = 0, numVerts = 0;
|
||||||
int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
|
int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
|
||||||
float (*defmats)[3][3] = NULL, (*deformedVerts)[3] = NULL;
|
float (*defmats)[3][3] = NULL, (*deformedVerts)[3] = NULL;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
modifiers_clearErrors(ob);
|
modifiers_clearErrors(ob);
|
||||||
|
|
||||||
dm = NULL;
|
dm = NULL;
|
||||||
md = modifiers_getVirtualModifierList(ob);
|
md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
/* compute the deformation matrices and coordinates for the first
|
/* compute the deformation matrices and coordinates for the first
|
||||||
* modifiers with on cage editing that are enabled and support computing
|
* modifiers with on cage editing that are enabled and support computing
|
||||||
@ -314,6 +315,7 @@ int sculpt_get_first_deform_matrices(Scene *scene, Object *ob, float (**deformma
|
|||||||
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
|
MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0);
|
||||||
int has_multires = mmd != NULL && mmd->sculptlvl > 0;
|
int has_multires = mmd != NULL && mmd->sculptlvl > 0;
|
||||||
int numleft = 0;
|
int numleft = 0;
|
||||||
|
VirtualModifierData virtualModifierData;
|
||||||
|
|
||||||
if (has_multires) {
|
if (has_multires) {
|
||||||
*deformmats = NULL;
|
*deformmats = NULL;
|
||||||
@ -322,7 +324,7 @@ int sculpt_get_first_deform_matrices(Scene *scene, Object *ob, float (**deformma
|
|||||||
}
|
}
|
||||||
|
|
||||||
dm = NULL;
|
dm = NULL;
|
||||||
md = modifiers_getVirtualModifierList(ob);
|
md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
|
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
|
||||||
@ -375,7 +377,8 @@ void crazyspace_build_sculpt(Scene *scene, Object *ob, float (**deformmats)[3][3
|
|||||||
float (*origVerts)[3] = MEM_dupallocN(deformedVerts);
|
float (*origVerts)[3] = MEM_dupallocN(deformedVerts);
|
||||||
float *quats = NULL;
|
float *quats = NULL;
|
||||||
int i, deformed = 0;
|
int i, deformed = 0;
|
||||||
ModifierData *md = modifiers_getVirtualModifierList(ob);
|
VirtualModifierData virtualModifierData;
|
||||||
|
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
|
||||||
Mesh *me = (Mesh *)ob->data;
|
Mesh *me = (Mesh *)ob->data;
|
||||||
|
|
||||||
for (; md; md = md->next) {
|
for (; md; md = md->next) {
|
||||||
|
@ -92,6 +92,7 @@
|
|||||||
#include "BKE_library.h"
|
#include "BKE_library.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
#include "BKE_material.h"
|
#include "BKE_material.h"
|
||||||
|
#include "BKE_modifier.h"
|
||||||
#include "BKE_packedFile.h"
|
#include "BKE_packedFile.h"
|
||||||
#include "BKE_scene.h"
|
#include "BKE_scene.h"
|
||||||
#include "BKE_node.h"
|
#include "BKE_node.h"
|
||||||
@ -1517,6 +1518,7 @@ int main(int argc, const char **argv)
|
|||||||
|
|
||||||
IMB_init();
|
IMB_init();
|
||||||
BKE_images_init();
|
BKE_images_init();
|
||||||
|
BKE_modifier_init();
|
||||||
|
|
||||||
BKE_brush_system_init();
|
BKE_brush_system_init();
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ extern "C"
|
|||||||
#include "BKE_node.h"
|
#include "BKE_node.h"
|
||||||
#include "BKE_report.h"
|
#include "BKE_report.h"
|
||||||
#include "BKE_library.h"
|
#include "BKE_library.h"
|
||||||
|
#include "BKE_modifier.h"
|
||||||
#include "BLI_threads.h"
|
#include "BLI_threads.h"
|
||||||
#include "BLI_blenlib.h"
|
#include "BLI_blenlib.h"
|
||||||
#include "DNA_scene_types.h"
|
#include "DNA_scene_types.h"
|
||||||
@ -456,6 +457,7 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
IMB_init();
|
IMB_init();
|
||||||
BKE_images_init();
|
BKE_images_init();
|
||||||
|
BKE_modifier_init();
|
||||||
|
|
||||||
#ifdef WITH_FFMPEG
|
#ifdef WITH_FFMPEG
|
||||||
IMB_ffmpeg_init();
|
IMB_ffmpeg_init();
|
||||||
|
Loading…
Reference in New Issue
Block a user