forked from bartvdbraak/blender
Fix #35174: dynamic paint displacement missing in render.
A previous bugfix disabled the dynamic paint modifier for orco texture coordinate evaluation of the modifier stack. However the MOD_APPLY_USECACHE flag is not a good way to check if the modifier is evaluated for orcos. Instead I've added a MOD_APPLY_ORCO flag. Also removed a bunch of applyModifierEM callbacks, none of them served a purpose except for the subsurf modifier.
This commit is contained in:
parent
4a8663d66e
commit
4a4f091155
@ -111,7 +111,9 @@ typedef void (*TexWalkFunc)(void *userData, struct Object *ob, struct ModifierDa
|
||||
|
||||
typedef enum ModifierApplyFlag {
|
||||
MOD_APPLY_RENDER = 1 << 0, /* Render time. */
|
||||
MOD_APPLY_USECACHE = 1 << 1, /* Final result. Is not set for temporary calculations like orco dms. */
|
||||
MOD_APPLY_USECACHE = 1 << 1, /* Result of evaluation will be cached, so modifier might
|
||||
* want to cache data for quick updates (used by subsurf) */
|
||||
MOD_APPLY_ORCO = 1 << 2 /* Modifier evaluated for undeformed texture coordinates */
|
||||
} ModifierApplyFlag;
|
||||
|
||||
|
||||
@ -200,7 +202,8 @@ typedef struct ModifierTypeInfo {
|
||||
*/
|
||||
struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, struct Object *ob,
|
||||
struct BMEditMesh *editData,
|
||||
struct DerivedMesh *derivedData);
|
||||
struct DerivedMesh *derivedData,
|
||||
ModifierApplyFlag flag);
|
||||
|
||||
|
||||
/********************* Optional functions *********************/
|
||||
|
@ -1692,7 +1692,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
||||
DM_set_only_copy(orcodm, nextmask | CD_MASK_ORIGINDEX |
|
||||
(mti->requiredDataMask ?
|
||||
mti->requiredDataMask(ob, md) : 0));
|
||||
ndm = mti->applyModifier(md, ob, orcodm, app_flags & ~MOD_APPLY_USECACHE);
|
||||
ndm = mti->applyModifier(md, ob, orcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
|
||||
|
||||
if (ndm) {
|
||||
/* if the modifier returned a new dm, release the old one */
|
||||
@ -1708,7 +1708,7 @@ static void mesh_calc_modifiers(Scene *scene, Object *ob, float (*inputVertexCos
|
||||
|
||||
nextmask &= ~CD_MASK_CLOTH_ORCO;
|
||||
DM_set_only_copy(clothorcodm, nextmask | CD_MASK_ORIGINDEX);
|
||||
ndm = mti->applyModifier(md, ob, clothorcodm, app_flags & ~MOD_APPLY_USECACHE);
|
||||
ndm = mti->applyModifier(md, ob, clothorcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
|
||||
|
||||
if (ndm) {
|
||||
/* if the modifier returned a new dm, release the old one */
|
||||
@ -2031,9 +2031,9 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
|
||||
DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
|
||||
|
||||
if (mti->applyModifierEM)
|
||||
ndm = mti->applyModifierEM(md, ob, em, orcodm);
|
||||
ndm = mti->applyModifierEM(md, ob, em, orcodm, MOD_APPLY_ORCO);
|
||||
else
|
||||
ndm = mti->applyModifier(md, ob, orcodm, 0);
|
||||
ndm = mti->applyModifier(md, ob, orcodm, MOD_APPLY_ORCO);
|
||||
|
||||
if (ndm) {
|
||||
/* if the modifier returned a new dm, release the old one */
|
||||
@ -2055,9 +2055,9 @@ static void editbmesh_calc_modifiers(Scene *scene, Object *ob, BMEditMesh *em, D
|
||||
}
|
||||
|
||||
if (mti->applyModifierEM)
|
||||
ndm = mti->applyModifierEM(md, ob, em, dm);
|
||||
ndm = mti->applyModifierEM(md, ob, em, dm, MOD_APPLY_USECACHE);
|
||||
else
|
||||
ndm = mti->applyModifier(md, ob, dm, 0);
|
||||
ndm = mti->applyModifier(md, ob, dm, MOD_APPLY_USECACHE);
|
||||
|
||||
if (ndm) {
|
||||
if (dm && dm != ndm)
|
||||
|
@ -1132,10 +1132,12 @@ static void curve_calc_orcodm(Scene *scene, Object *ob, DerivedMesh *derivedFina
|
||||
int required_mode;
|
||||
int editmode = (!forRender && (cu->editnurb || cu->editfont));
|
||||
DerivedMesh *ndm, *orcodm = NULL;
|
||||
const ModifierApplyFlag app_flag = renderResolution ? MOD_APPLY_RENDER : 0;
|
||||
ModifierApplyFlag app_flag = MOD_APPLY_ORCO;
|
||||
|
||||
if (renderResolution)
|
||||
if (renderResolution) {
|
||||
app_flag |= MOD_APPLY_RENDER;
|
||||
required_mode = eModifierMode_Render;
|
||||
}
|
||||
else
|
||||
required_mode = eModifierMode_Realtime;
|
||||
|
||||
|
@ -597,13 +597,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
return applyModifier(md, ob, dm, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_Array = {
|
||||
/* name */ "Array",
|
||||
@ -622,7 +615,7 @@ ModifierTypeInfo modifierType_Array = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ NULL,
|
||||
/* freeData */ NULL,
|
||||
|
@ -215,13 +215,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
|
||||
|
||||
#endif
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_Bevel = {
|
||||
/* name */ "Bevel",
|
||||
@ -238,7 +231,7 @@ ModifierTypeInfo modifierType_Bevel = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -110,7 +110,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md;
|
||||
|
||||
/* dont apply dynamic paint on orco dm stack */
|
||||
if (flag & MOD_APPLY_USECACHE) {
|
||||
if (!(flag & MOD_APPLY_ORCO)) {
|
||||
return dynamicPaint_Modifier_do(pmd, md->scene, ob, dm);
|
||||
}
|
||||
return dm;
|
||||
|
@ -141,13 +141,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_EdgeSplit = {
|
||||
/* name */ "EdgeSplit",
|
||||
@ -166,7 +159,7 @@ ModifierTypeInfo modifierType_EdgeSplit = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ NULL,
|
||||
/* freeData */ NULL,
|
||||
|
@ -335,13 +335,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_Mirror = {
|
||||
/* name */ "Mirror",
|
||||
@ -360,7 +353,7 @@ ModifierTypeInfo modifierType_Mirror = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ NULL,
|
||||
/* freeData */ NULL,
|
||||
|
@ -548,14 +548,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_Ocean = {
|
||||
/* name */ "Ocean",
|
||||
@ -572,7 +564,7 @@ ModifierTypeInfo modifierType_Ocean = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ freeData,
|
||||
|
@ -395,13 +395,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
|
||||
return result;
|
||||
}
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
ModifierTypeInfo modifierType_ParticleInstance = {
|
||||
/* name */ "ParticleInstance",
|
||||
/* structName */ "ParticleInstanceModifierData",
|
||||
@ -418,7 +411,7 @@ ModifierTypeInfo modifierType_ParticleInstance = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ NULL,
|
||||
/* freeData */ NULL,
|
||||
|
@ -931,16 +931,6 @@ static void foreachObjectLink(
|
||||
walk(userData, ob, <md->ob_axis);
|
||||
}
|
||||
|
||||
/* This dosnt work with material*/
|
||||
static DerivedMesh *applyModifierEM(
|
||||
ModifierData *md,
|
||||
Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
static int dependsOnTime(ModifierData *UNUSED(md))
|
||||
{
|
||||
return 0;
|
||||
@ -964,7 +954,7 @@ ModifierTypeInfo modifierType_Screw = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ NULL,
|
||||
/* freeData */ NULL,
|
||||
|
@ -1852,18 +1852,6 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
*tsmd = *smd;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md,
|
||||
Object *UNUSED(ob),
|
||||
struct BMEditMesh *UNUSED(em),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
DerivedMesh *result;
|
||||
|
||||
if (!(result = final_skin((SkinModifierData *)md, dm)))
|
||||
return dm;
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md,
|
||||
Object *UNUSED(ob),
|
||||
DerivedMesh *dm,
|
||||
@ -1895,7 +1883,7 @@ ModifierTypeInfo modifierType_Skin = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -827,14 +827,6 @@ static DerivedMesh *applyModifier(
|
||||
|
||||
#undef SOLIDIFY_SIDE_NORMALS
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md,
|
||||
Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_Solidify = {
|
||||
/* name */ "Solidify",
|
||||
@ -854,7 +846,7 @@ ModifierTypeInfo modifierType_Solidify = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -120,7 +120,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *UNUSED(ob),
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
DerivedMesh *derivedData,
|
||||
ModifierApplyFlag UNUSED(flag))
|
||||
{
|
||||
SubsurfModifierData *smd = (SubsurfModifierData *) md;
|
||||
DerivedMesh *result;
|
||||
|
@ -78,20 +78,6 @@ static void copyData(ModifierData *md, ModifierData *target)
|
||||
*tsmd = *smd;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md,
|
||||
Object *UNUSED(ob),
|
||||
struct BMEditMesh *UNUSED(em),
|
||||
DerivedMesh *dm)
|
||||
{
|
||||
TriangulateModifierData *tmd = (TriangulateModifierData *)md;
|
||||
DerivedMesh *result;
|
||||
if (!(result = triangulate_dm(dm, tmd->flag))) {
|
||||
return dm;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifier(ModifierData *md,
|
||||
Object *UNUSED(ob),
|
||||
DerivedMesh *dm,
|
||||
@ -123,7 +109,7 @@ ModifierTypeInfo modifierType_Triangulate = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ NULL, //requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -366,13 +366,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
return result;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_UVProject = {
|
||||
/* name */ "UVProject",
|
||||
@ -390,7 +383,7 @@ ModifierTypeInfo modifierType_UVProject = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -201,13 +201,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
|
||||
return dm;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
|
||||
{
|
||||
UVWarpModifierData *umd = (UVWarpModifierData *) md;
|
||||
@ -254,7 +247,7 @@ ModifierTypeInfo modifierType_UVWarp = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -276,13 +276,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
return dm;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_WeightVGEdit = {
|
||||
/* name */ "VertexWeightEdit",
|
||||
@ -300,7 +293,7 @@ ModifierTypeInfo modifierType_WeightVGEdit = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ freeData,
|
||||
|
@ -398,13 +398,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
return dm;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_WeightVGMix = {
|
||||
/* name */ "VertexWeightMix",
|
||||
@ -422,7 +415,7 @@ ModifierTypeInfo modifierType_WeightVGMix = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
@ -542,13 +542,6 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *der
|
||||
return dm;
|
||||
}
|
||||
|
||||
static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
|
||||
struct BMEditMesh *UNUSED(editData),
|
||||
DerivedMesh *derivedData)
|
||||
{
|
||||
return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
|
||||
}
|
||||
|
||||
|
||||
ModifierTypeInfo modifierType_WeightVGProximity = {
|
||||
/* name */ "VertexWeightProximity",
|
||||
@ -566,7 +559,7 @@ ModifierTypeInfo modifierType_WeightVGProximity = {
|
||||
/* deformVertsEM */ NULL,
|
||||
/* deformMatricesEM */ NULL,
|
||||
/* applyModifier */ applyModifier,
|
||||
/* applyModifierEM */ applyModifierEM,
|
||||
/* applyModifierEM */ NULL,
|
||||
/* initData */ initData,
|
||||
/* requiredDataMask */ requiredDataMask,
|
||||
/* freeData */ NULL,
|
||||
|
Loading…
Reference in New Issue
Block a user