[Bf-blender-cvs] [7f570a7174f] master: Cleanup: Split mesh_render_data_loose_geom into multiple functions.

Jeroen Bakker noreply at git.blender.org
Tue Jun 15 13:30:16 CEST 2021


Commit: 7f570a7174f3724ea9d6b407ddc97f027ac8f19b
Author: Jeroen Bakker
Date:   Tue Jun 15 11:39:36 2021 +0200
Branches: master
https://developer.blender.org/rB7f570a7174f3724ea9d6b407ddc97f027ac8f19b

Cleanup: Split mesh_render_data_loose_geom into multiple functions.

===================================================================

M	source/blender/draw/intern/draw_cache_extract_mesh_render_data.c

===================================================================

diff --git a/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c b/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c
index 4741bcb06c9..3007e31dcdb 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh_render_data.c
@@ -39,9 +39,20 @@
 #include "draw_cache_extract_mesh_private.h"
 
 /* ---------------------------------------------------------------------- */
-/** \name Mesh/BMesh Interface (indirect, partially cached access to complex data).
+/** \name Update Loose Geometry
  * \{ */
 
+static void mesh_render_data_lverts_bm(const MeshRenderData *mr,
+                                       MeshBufferExtractionCache *cache,
+                                       BMesh *bm);
+static void mesh_render_data_ledges_bm(const MeshRenderData *mr,
+                                       MeshBufferExtractionCache *cache,
+                                       BMesh *bm);
+static void mesh_render_data_loose_geom_mesh(const MeshRenderData *mr,
+                                             MeshBufferExtractionCache *cache);
+static void mesh_render_data_loose_geom_build(const MeshRenderData *mr,
+                                              MeshBufferExtractionCache *cache);
+
 static void mesh_render_data_loose_geom_load(MeshRenderData *mr, MeshBufferExtractionCache *cache)
 {
   mr->ledges = cache->ledges;
@@ -60,71 +71,101 @@ static void mesh_render_data_loose_geom_ensure(const MeshRenderData *mr,
   if (cache->lverts) {
     return;
   }
+  mesh_render_data_loose_geom_build(mr, cache)
+}
 
+static void mesh_render_data_loose_geom_build(const MeshRenderData *mr,
+                                              MeshBufferExtractionCache *cache)
+{
   cache->vert_loose_len = 0;
   cache->edge_loose_len = 0;
 
   if (mr->extract_type != MR_EXTRACT_BMESH) {
     /* Mesh */
-
-    BLI_bitmap *lvert_map = BLI_BITMAP_NEW(mr->vert_len, __func__);
-
-    cache->ledges = MEM_mallocN(mr->edge_len * sizeof(*cache->ledges), __func__);
-    const MEdge *med = mr->medge;
-    for (int med_index = 0; med_index < mr->edge_len; med_index++, med++) {
-      if (med->flag & ME_LOOSEEDGE) {
-        cache->ledges[cache->edge_loose_len++] = med_index;
-      }
-      /* Tag verts as not loose. */
-      BLI_BITMAP_ENABLE(lvert_map, med->v1);
-      BLI_BITMAP_ENABLE(lvert_map, med->v2);
-    }
-    if (cache->edge_loose_len < mr->edge_len) {
-      cache->ledges = MEM_reallocN(cache->ledges, cache->edge_loose_len * sizeof(*cache->ledges));
-    }
-
-    cache->lverts = MEM_mallocN(mr->vert_len * sizeof(*mr->lverts), __func__);
-    for (int v = 0; v < mr->vert_len; v++) {
-      if (!BLI_BITMAP_TEST(lvert_map, v)) {
-        cache->lverts[cache->vert_loose_len++] = v;
-      }
-    }
-    if (cache->vert_loose_len < mr->vert_len) {
-      cache->lverts = MEM_reallocN(cache->lverts, cache->vert_loose_len * sizeof(*cache->lverts));
-    }
-
-    MEM_freeN(lvert_map);
+    mesh_render_data_loose_geom_mesh(mr, cache);
   }
   else {
     /* #BMesh */
     BMesh *bm = mr->bm;
-    int elem_id;
-    BMIter iter;
-    BMVert *eve;
-    BMEdge *ede;
-
-    cache->lverts = MEM_mallocN(mr->vert_len * sizeof(*cache->lverts), __func__);
-    BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, elem_id) {
-      if (eve->e == NULL) {
-        cache->lverts[cache->vert_loose_len++] = elem_id;
-      }
+    mesh_render_data_lverts_bm(mr, cache, bm);
+    mesh_render_data_ledges_bm(mr, cache, bm);
+  }
+}
+
+static void mesh_render_data_loose_geom_mesh(const MeshRenderData *mr,
+                                             MeshBufferExtractionCache *cache)
+{
+  BLI_bitmap *lvert_map = BLI_BITMAP_NEW(mr->vert_len, __func__);
+
+  cache->ledges = MEM_mallocN(mr->edge_len * sizeof(*cache->ledges), __func__);
+  const MEdge *med = mr->medge;
+  for (int med_index = 0; med_index < mr->edge_len; med_index++, med++) {
+    if (med->flag & ME_LOOSEEDGE) {
+      cache->ledges[cache->edge_loose_len++] = med_index;
     }
-    if (cache->vert_loose_len < mr->vert_len) {
-      cache->lverts = MEM_reallocN(cache->lverts, cache->vert_loose_len * sizeof(*cache->lverts));
+    /* Tag verts as not loose. */
+    BLI_BITMAP_ENABLE(lvert_map, med->v1);
+    BLI_BITMAP_ENABLE(lvert_map, med->v2);
+  }
+  if (cache->edge_loose_len < mr->edge_len) {
+    cache->ledges = MEM_reallocN(cache->ledges, cache->edge_loose_len * sizeof(*cache->ledges));
+  }
+
+  cache->lverts = MEM_mallocN(mr->vert_len * sizeof(*mr->lverts), __func__);
+  for (int v = 0; v < mr->vert_len; v++) {
+    if (!BLI_BITMAP_TEST(lvert_map, v)) {
+      cache->lverts[cache->vert_loose_len++] = v;
     }
+  }
+  if (cache->vert_loose_len < mr->vert_len) {
+    cache->lverts = MEM_reallocN(cache->lverts, cache->vert_loose_len * sizeof(*cache->lverts));
+  }
 
-    cache->ledges = MEM_mallocN(mr->edge_len * sizeof(*cache->ledges), __func__);
-    BM_ITER_MESH_INDEX (ede, &iter, bm, BM_EDGES_OF_MESH, elem_id) {
-      if (ede->l == NULL) {
-        cache->ledges[cache->edge_loose_len++] = elem_id;
-      }
+  MEM_freeN(lvert_map);
+}
+
+static void mesh_render_data_lverts_bm(const MeshRenderData *mr,
+                                       MeshBufferExtractionCache *cache,
+                                       BMesh *bm)
+{
+  int elem_id;
+  BMIter iter;
+  BMVert *eve;
+  cache->lverts = MEM_mallocN(mr->vert_len * sizeof(*cache->lverts), __func__);
+  BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, elem_id) {
+    if (eve->e == NULL) {
+      cache->lverts[cache->vert_loose_len++] = elem_id;
     }
-    if (cache->edge_loose_len < mr->edge_len) {
-      cache->ledges = MEM_reallocN(cache->ledges, cache->edge_loose_len * sizeof(*cache->ledges));
+  }
+  if (cache->vert_loose_len < mr->vert_len) {
+    cache->lverts = MEM_reallocN(cache->lverts, cache->vert_loose_len * sizeof(*cache->lverts));
+  }
+}
+
+static void mesh_render_data_ledges_bm(const MeshRenderData *mr,
+                                       MeshBufferExtractionCache *cache,
+                                       BMesh *bm)
+{
+  int elem_id;
+  BMIter iter;
+  BMEdge *ede;
+  cache->ledges = MEM_mallocN(mr->edge_len * sizeof(*cache->ledges), __func__);
+  BM_ITER_MESH_INDEX (ede, &iter, bm, BM_EDGES_OF_MESH, elem_id) {
+    if (ede->l == NULL) {
+      cache->ledges[cache->edge_loose_len++] = elem_id;
     }
   }
+  if (cache->edge_loose_len < mr->edge_len) {
+    cache->ledges = MEM_reallocN(cache->ledges, cache->edge_loose_len * sizeof(*cache->ledges));
+  }
 }
 
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Mesh/BMesh Interface (indirect, partially cached access to complex data).
+ * \{ */
+
 /**
  * Part of the creation of the #MeshRenderData that happens in a thread.
  */
@@ -368,4 +409,4 @@ void mesh_render_data_free(MeshRenderData *mr)
   MEM_freeN(mr);
 }
 
-/** \} */
\ No newline at end of file
+/** \} */



More information about the Bf-blender-cvs mailing list