Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-12-03 18:59:11 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-12-03 19:05:28 +0300
commit17a4323ef59570975b254da9936fde16969b1df0 (patch)
treebfc8c34877891c496a6e1a68c6b30f8849cb6ffc /source/blender/blenkernel/intern
parentbb16167fd8727a330a97f591398ac0981c76a562 (diff)
Subdiv: Set edge render flags according to Optimal Display
This is a part of T58609, but work is still needed to properly support this flag in the draw manager.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/multires_subdiv.c2
-rw-r--r--source/blender/blenkernel/intern/subdiv_mesh.c6
2 files changed, 8 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/multires_subdiv.c b/source/blender/blenkernel/intern/multires_subdiv.c
index e0b316d49de..3de007dec75 100644
--- a/source/blender/blenkernel/intern/multires_subdiv.c
+++ b/source/blender/blenkernel/intern/multires_subdiv.c
@@ -64,4 +64,6 @@ void BKE_multires_subdiv_mesh_settings_init(
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);
}
diff --git a/source/blender/blenkernel/intern/subdiv_mesh.c b/source/blender/blenkernel/intern/subdiv_mesh.c
index d9fcdf52969..4d9e8998cf0 100644
--- a/source/blender/blenkernel/intern/subdiv_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_mesh.c
@@ -53,6 +53,7 @@
*/
typedef struct SubdivMeshContext {
+ const SubdivToMeshSettings *settings;
const Mesh *coarse_mesh;
Subdiv *subdiv;
Mesh *subdiv_mesh;
@@ -766,6 +767,9 @@ static void subdiv_copy_edge_data(
subdiv_edge->crease = 0;
subdiv_edge->bweight = 0;
subdiv_edge->flag = 0;
+ if (!ctx->settings->use_optimal_display) {
+ subdiv_edge->flag |= ME_EDGERENDER;
+ }
if (ctx->edge_origindex != NULL) {
ctx->edge_origindex[subdiv_edge_index] = ORIGINDEX_NONE;
}
@@ -777,6 +781,7 @@ static void subdiv_copy_edge_data(
coarse_edge_index,
subdiv_edge_index,
1);
+ subdiv_edge->flag |= ME_EDGERENDER;
}
static void subdiv_mesh_edge(
@@ -1123,6 +1128,7 @@ Mesh *BKE_subdiv_to_mesh(
}
/* Initialize subdivion mesh creation context/ */
SubdivMeshContext subdiv_context = {0};
+ subdiv_context.settings = settings;
subdiv_context.coarse_mesh = coarse_mesh;
subdiv_context.subdiv = subdiv;
/* Multi-threaded traversal/evaluation. */