diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-20 11:27:07 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-09-20 16:39:41 +0300 |
commit | 0a596eda2a654d99a25c2b66ecfde0518e8bedfa (patch) | |
tree | f97b9a9fbf16676c37c26d305d2b2392446f17b6 /source/blender/blenkernel/intern/subdiv_ccg.c | |
parent | 6a7e914476097fd7e76bb9c685c784237ee9d5d3 (diff) |
Subdiv: CCG, localize Mesh usage even more
Diffstat (limited to 'source/blender/blenkernel/intern/subdiv_ccg.c')
-rw-r--r-- | source/blender/blenkernel/intern/subdiv_ccg.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/source/blender/blenkernel/intern/subdiv_ccg.c b/source/blender/blenkernel/intern/subdiv_ccg.c index f9017ef4b1f..43a94c117c5 100644 --- a/source/blender/blenkernel/intern/subdiv_ccg.c +++ b/source/blender/blenkernel/intern/subdiv_ccg.c @@ -318,17 +318,10 @@ static void subdiv_ccg_eval_grids_task( static bool subdiv_ccg_evaluate_grids( SubdivCCG *subdiv_ccg, - Subdiv *subdiv, - const Mesh *coarse_mesh) + Subdiv *subdiv) { OpenSubdiv_TopologyRefiner *topology_refiner = subdiv->topology_refiner; const int num_faces = topology_refiner->getNumFaces(topology_refiner); - /* Make sure evaluator is ready. */ - if (!BKE_subdiv_eval_update_from_mesh(subdiv, coarse_mesh)) { - if (num_faces) { - return false; - } - } /* Initialize data passed to all the tasks. */ CCGEvalGridsData data; data.subdiv_ccg = subdiv_ccg; @@ -374,8 +367,7 @@ static void subdiv_ccg_init_faces(SubdivCCG *subdiv_ccg) SubdivCCG *BKE_subdiv_to_ccg( Subdiv *subdiv, - const SubdivToCCGSettings *settings, - const Mesh *coarse_mesh) + const SubdivToCCGSettings *settings) { BKE_subdiv_stats_begin(&subdiv->stats, SUBDIV_STATS_SUBDIV_TO_CCG); SubdivCCG *subdiv_ccg = MEM_callocN(sizeof(SubdivCCG), "subdiv ccg"); @@ -386,7 +378,7 @@ SubdivCCG *BKE_subdiv_to_ccg( subdiv_ccg_init_layers(subdiv_ccg, settings); subdiv_ccg_alloc_elements(subdiv_ccg, subdiv); subdiv_ccg_init_faces(subdiv_ccg); - if (!subdiv_ccg_evaluate_grids(subdiv_ccg, subdiv, coarse_mesh)) { + if (!subdiv_ccg_evaluate_grids(subdiv_ccg, subdiv)) { BKE_subdiv_ccg_destroy(subdiv_ccg); BKE_subdiv_stats_end(&subdiv->stats, SUBDIV_STATS_SUBDIV_TO_CCG); return NULL; @@ -400,8 +392,15 @@ Mesh *BKE_subdiv_to_ccg_mesh( const SubdivToCCGSettings *settings, const Mesh *coarse_mesh) { - SubdivCCG *subdiv_ccg = BKE_subdiv_to_ccg( - subdiv, settings, coarse_mesh); + /* Make sure evaluator is ready. */ + BKE_subdiv_stats_begin(&subdiv->stats, SUBDIV_STATS_SUBDIV_TO_CCG); + if (!BKE_subdiv_eval_update_from_mesh(subdiv, coarse_mesh)) { + if (coarse_mesh->totpoly) { + return false; + } + } + BKE_subdiv_stats_end(&subdiv->stats, SUBDIV_STATS_SUBDIV_TO_CCG); + SubdivCCG *subdiv_ccg = BKE_subdiv_to_ccg(subdiv, settings); if (subdiv_ccg == NULL) { return NULL; } |