diff options
author | Jeroen Bakker <jbakker> | 2020-03-26 16:36:39 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2020-03-26 17:34:53 +0300 |
commit | 7ed3ebbc6e1f95203c050e683a140b7ac1e7b705 (patch) | |
tree | c784d8cc1e1e0954c6193e930228ba32fea29615 /source/blender/blenkernel | |
parent | 2e8fb95e7c69274944ecb44b2b51f8b4307f88ae (diff) |
Fix T67888: Incorrect Wireframe After Applying SubSurf/MultiRes
Show control edges stores the control edges in the mesh which is
picked up by the draw manager. When applyng a subsurf (or multires) we
don't want that data present in the base mesh. Any rebuilding of the mesh
would overwrite the data anyway.
This patch introduces a new flag for applying modifiers
that can be checked to ignore storing display specific data in
the base mesh.
Reviewed By: Brecht van Lommel
Differential Revision: https://developer.blender.org/D7163
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_modifier.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_multires.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh_convert.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires_subdiv.c | 6 |
4 files changed, 12 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index a25b73625fa..c37e56149eb 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -125,6 +125,11 @@ typedef enum ModifierApplyFlag { /** Ignore scene simplification flag and use subdivisions * level set in multires modifier. */ MOD_APPLY_IGNORE_SIMPLIFY = 1 << 3, + /** The effect of this modifier will be applied to the base mesh + * The modifier itself will be removed from the modifier stack. + * This flag can be checked to ignore rendering display data to the mesh. + * See `OBJECT_OT_modifier_apply` operator. */ + MOD_APPLY_TO_BASE_MESH = 1 << 4, } ModifierApplyFlag; typedef struct ModifierUpdateDepsgraphContext { diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h index c805b5f53a6..fe5b8cff31c 100644 --- a/source/blender/blenkernel/BKE_multires.h +++ b/source/blender/blenkernel/BKE_multires.h @@ -197,7 +197,8 @@ void BKE_multires_subdiv_mesh_settings_init(struct SubdivToMeshSettings *mesh_se const struct Object *object, const struct MultiresModifierData *mmd, const bool use_render_params, - const bool ignore_simplify); + const bool ignore_simplify, + const bool ignore_control_edges); /* General helpers. */ diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c index 955f1aca110..74b79490d67 100644 --- a/source/blender/blenkernel/intern/mesh_convert.c +++ b/source/blender/blenkernel/intern/mesh_convert.c @@ -1304,7 +1304,7 @@ Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph, const ModifierTypeInfo *mti = modifierType_getInfo(md_eval->type); Mesh *result; KeyBlock *kb; - ModifierEvalContext mectx = {depsgraph, ob_eval, 0}; + ModifierEvalContext mectx = {depsgraph, ob_eval, MOD_APPLY_TO_BASE_MESH}; if (!(md_eval->mode & eModifierMode_Realtime)) { return NULL; diff --git a/source/blender/blenkernel/intern/multires_subdiv.c b/source/blender/blenkernel/intern/multires_subdiv.c index 2ea02ab6974..f7e42942f3e 100644 --- a/source/blender/blenkernel/intern/multires_subdiv.c +++ b/source/blender/blenkernel/intern/multires_subdiv.c @@ -50,9 +50,11 @@ void BKE_multires_subdiv_mesh_settings_init(SubdivToMeshSettings *mesh_settings, const Object *object, const MultiresModifierData *mmd, const bool use_render_params, - const bool ignore_simplify) + const bool ignore_simplify, + const bool ignore_control_edges) { const int level = multires_get_level(scene, object, mmd, use_render_params, ignore_simplify); mesh_settings->resolution = (1 << level) + 1; - mesh_settings->use_optimal_display = (mmd->flags & eMultiresModifierFlag_ControlEdges); + mesh_settings->use_optimal_display = (mmd->flags & eMultiresModifierFlag_ControlEdges) && + !ignore_control_edges; } |