diff options
Diffstat (limited to 'intern/cycles/blender/blender_util.h')
-rw-r--r-- | intern/cycles/blender/blender_util.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index d441575e8af..3cf75b338dc 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -572,6 +572,45 @@ static inline BL::FluidDomainSettings object_fluid_gas_domain_find(BL::Object &b return BL::FluidDomainSettings(PointerRNA_NULL); } +static inline BL::MeshSequenceCacheModifier object_mesh_cache_find(BL::Object &b_ob, + bool check_velocity, + bool *has_subdivision_modifier) +{ + for (int i = b_ob.modifiers.length() - 1; i >= 0; --i) { + BL::Modifier b_mod = b_ob.modifiers[i]; + + if (b_mod.type() == BL::Modifier::type_MESH_SEQUENCE_CACHE) { + BL::MeshSequenceCacheModifier mesh_cache = BL::MeshSequenceCacheModifier(b_mod); + + if (check_velocity) { + if (!MeshSequenceCacheModifier_has_velocity_get(&mesh_cache.ptr)) { + return BL::MeshSequenceCacheModifier(PointerRNA_NULL); + } + } + + return mesh_cache; + } + + /* Skip possible particles system modifiers as they do not modify the geometry. */ + if (b_mod.type() == BL::Modifier::type_PARTICLE_SYSTEM) { + continue; + } + + /* Only skip the subsurf modifier if we are not checking for the mesh sequence cache modifier + * for motion blur. */ + if (b_mod.type() == BL::Modifier::type_SUBSURF && !check_velocity) { + if (has_subdivision_modifier) { + *has_subdivision_modifier = true; + } + continue; + } + + break; + } + + return BL::MeshSequenceCacheModifier(PointerRNA_NULL); +} + static inline Mesh::SubdivisionType object_subdivision_type(BL::Object &b_ob, bool preview, bool experimental) |