Merge branch 'blender2.7'
[blender.git] / source / blender / blenkernel / intern / subdiv_eval.c
index f4a9e1a95fd840fcbc3b963e27c4c13643b0163c..acc121a55faadd7a0f1de4360cc1662eeedd9f83 100644 (file)
 
 bool BKE_subdiv_eval_begin(Subdiv *subdiv)
 {
 
 bool BKE_subdiv_eval_begin(Subdiv *subdiv)
 {
+       BKE_subdiv_stats_reset(&subdiv->stats, SUBDIV_STATS_EVALUATOR_CREATE);
        if (subdiv->topology_refiner == NULL) {
                /* Happens on input mesh with just loose geometry,
        if (subdiv->topology_refiner == NULL) {
                /* Happens on input mesh with just loose geometry,
-                * or when OpenSubdiv is disabled
-                */
+                * or when OpenSubdiv is disabled */
                return false;
        }
        else if (subdiv->evaluator == NULL) {
                return false;
        }
        else if (subdiv->evaluator == NULL) {
@@ -64,6 +64,7 @@ bool BKE_subdiv_eval_begin(Subdiv *subdiv)
        else {
                /* TODO(sergey): Check for topology change. */
        }
        else {
                /* TODO(sergey): Check for topology change. */
        }
+       BKE_subdiv_eval_init_displacement(subdiv);
        return true;
 }
 
        return true;
 }
 
@@ -75,8 +76,7 @@ static void set_coarse_positions(Subdiv *subdiv, const Mesh *mesh)
        /* Mark vertices which needs new coordinates. */
        /* TODO(sergey): This is annoying to calculate this on every update,
         * maybe it's better to cache this mapping. Or make it possible to have
        /* Mark vertices which needs new coordinates. */
        /* TODO(sergey): This is annoying to calculate this on every update,
         * maybe it's better to cache this mapping. Or make it possible to have
-        * OpenSubdiv's vertices match mesh ones?
-        */
+        * OpenSubdiv's vertices match mesh ones? */
        BLI_bitmap *vertex_used_map =
                BLI_BITMAP_NEW(mesh->totvert, "vert used map");
        for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
        BLI_bitmap *vertex_used_map =
                BLI_BITMAP_NEW(mesh->totvert, "vert used map");
        for (int poly_index = 0; poly_index < mesh->totpoly; poly_index++) {
@@ -159,6 +159,17 @@ bool BKE_subdiv_eval_update_from_mesh(Subdiv *subdiv, const Mesh *mesh)
        return true;
 }
 
        return true;
 }
 
+void BKE_subdiv_eval_init_displacement(Subdiv *subdiv)
+{
+       if (subdiv->displacement_evaluator == NULL) {
+               return;
+       }
+       if (subdiv->displacement_evaluator->initialize == NULL) {
+               return;
+       }
+       subdiv->displacement_evaluator->initialize(subdiv->displacement_evaluator);
+}
+
 /* ========================== Single point queries ========================== */
 
 void BKE_subdiv_eval_limit_point(
 /* ========================== Single point queries ========================== */
 
 void BKE_subdiv_eval_limit_point(