[Bf-blender-cvs] [4c3b444c85e] temp-trimesh-sculpt: it compiles

Joseph Eagar noreply at git.blender.org
Wed Oct 14 04:05:45 CEST 2020


Commit: 4c3b444c85e3c5686ffc32c915b6c1cf1c9545ea
Author: Joseph Eagar
Date:   Thu Oct 1 05:00:31 2020 -0700
Branches: temp-trimesh-sculpt
https://developer.blender.org/rB4c3b444c85e3c5686ffc32c915b6c1cf1c9545ea

it compiles

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

M	source/blender/blenkernel/BKE_pbvh.h
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/pbvh.c
M	source/blender/blenkernel/intern/pbvh_bmesh.c
M	source/blender/blenkernel/intern/pbvh_trimesh.c
M	source/blender/blenlib/intern/BLI_threadsafe_mempool.c
M	source/blender/editors/sculpt_paint/paint_hide.c
M	source/blender/editors/sculpt_paint/paint_mask.c
M	source/blender/editors/sculpt_paint/paint_vertex.c
M	source/blender/editors/sculpt_paint/sculpt.c
M	source/blender/editors/sculpt_paint/sculpt_boundary.c
M	source/blender/editors/sculpt_paint/sculpt_cloth.c
M	source/blender/editors/sculpt_paint/sculpt_dyntopo.c
M	source/blender/editors/sculpt_paint/sculpt_face_set.c
M	source/blender/editors/sculpt_paint/sculpt_filter_color.c
M	source/blender/editors/sculpt_paint/sculpt_filter_mask.c
M	source/blender/editors/sculpt_paint/sculpt_filter_mesh.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h
M	source/blender/editors/sculpt_paint/sculpt_mask_expand.c
M	source/blender/editors/sculpt_paint/sculpt_multiplane_scrape.c
M	source/blender/editors/sculpt_paint/sculpt_paint_color.c
M	source/blender/editors/sculpt_paint/sculpt_pose.c
M	source/blender/editors/sculpt_paint/sculpt_smooth.c
M	source/blender/editors/sculpt_paint/sculpt_transform.c
M	source/blender/editors/sculpt_paint/sculpt_undo.c
M	source/blender/gpu/CMakeLists.txt
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c
M	source/blender/trimesh/intern/trimesh_conv.c
M	source/blender/trimesh/intern/trimesh_log.c
M	source/blender/trimesh/intern/trimesh_private.h
M	source/blender/trimesh/trimesh.h

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

diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index fb56c13d0c8..dbed842ea9e 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -255,6 +255,7 @@ int BKE_pbvh_get_grid_num_vertices(const PBVH *pbvh);
 struct BMesh *BKE_pbvh_get_bmesh(PBVH *pbvh);
 struct TM_TriMesh *BKE_pbvh_get_trimesh(PBVH *pbvh);
 void BKE_pbvh_topology_detail_size_set(PBVH *pbvh, float detail_size);
+void BKE_pbvh_bmesh_detail_size_set(PBVH *pbvh, float detail_size);
 
 typedef enum {
   PBVH_Subdivide = 1,
@@ -472,6 +473,24 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
             vi.col = vi.vcol[vi.index].color; \
           } \
         } \
+        else if (vi.tm_vdata) { \
+          if (!BLI_gsetIterator_done(&vi.tm_unique_verts)) { \
+            vi.tm_vert = BLI_gsetIterator_getKey(&vi.tm_unique_verts); \
+            BLI_gsetIterator_step(&vi.tm_unique_verts); \
+          } \
+          else { \
+            vi.tm_vert = BLI_gsetIterator_getKey(&vi.tm_other_verts); \
+            BLI_gsetIterator_step(&vi.tm_other_verts); \
+          } \
+          vi.visible = !TM_elem_flag_test_bool(vi.tm_vert, TM_ELEM_HIDDEN); \
+          if (mode == PBVH_ITER_UNIQUE && !vi.visible) { \
+            continue; \
+          } \
+          vi.co = vi.tm_vert->co; \
+          vi.fno = vi.tm_vert->no; \
+          vi.index = vi.tm_vert->index; \
+          vi.mask = TM_ELEM_CD_GET_VOID_P(vi.tm_vert, vi.cd_vert_mask_offset); \
+        }\
         else { \
           if (!BLI_gsetIterator_done(&vi.bm_unique_verts)) { \
             vi.bm_vert = BLI_gsetIterator_getKey(&vi.bm_unique_verts); \
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 2ac2364fc93..ff0b8023c73 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -1098,7 +1098,9 @@ bool BKE_paint_ensure(ToolSettings *ts, struct Paint **r_paint)
     paint = &ts->imapaint.paint;
   }
 
-  paint->flags |= PAINT_SHOW_BRUSH;
+  if (paint) {
+    paint->flags |= PAINT_SHOW_BRUSH;
+  }
 
   *r_paint = paint;
 
@@ -1218,9 +1220,9 @@ bool paint_is_bmesh_face_hidden(BMFace *f)
 /* Return true if all vertices in the face are visible, false otherwise */
 bool paint_is_trimesh_face_hidden(TMFace *f)
 {
-  bool ret = f->v1->flag & TRIMESH_HIDE;
-  ret = ret || (f->v2->flag & TRIMESH_HIDE);
-  ret = ret || (f->v3->flag & TRIMESH_HIDE);
+  bool ret = f->v1->flag & TM_ELEM_HIDDEN;
+  ret = ret || (f->v2->flag & TM_ELEM_HIDDEN);
+  ret = ret || (f->v3->flag & TM_ELEM_HIDDEN);
 
   return ret;
 }
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 288e64b6020..b502711578d 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -1293,6 +1293,10 @@ static void pbvh_update_draw_buffer_cb(void *__restrict userdata,
         node->draw_buffers = GPU_pbvh_bmesh_buffers_build(pbvh->flags &
                                                           PBVH_DYNTOPO_SMOOTH_SHADING);
         break;
+      case PBVH_TRIMESH:
+        node->draw_buffers = GPU_pbvh_trimesh_buffers_build(pbvh->flags &
+          PBVH_DYNTOPO_SMOOTH_SHADING);
+        break;
     }
   }
 
@@ -1331,13 +1335,21 @@ static void pbvh_update_draw_buffer_cb(void *__restrict userdata,
                                       node->bm_other_verts,
                                       update_flags);
         break;
+      case PBVH_TRIMESH:
+        GPU_pbvh_trimesh_buffers_update(node->draw_buffers,
+                                        pbvh->tm,
+                                        node->tm_faces,
+                                        node->tm_unique_verts,
+                                        node->tm_other_verts,
+                                        update_flags);
+        break;
     }
   }
 }
 
 static void pbvh_update_draw_buffers(PBVH *pbvh, PBVHNode **nodes, int totnode, int update_flag)
 {
-  if ((update_flag & PBVH_RebuildDrawBuffers) || ELEM(pbvh->type, PBVH_GRIDS, PBVH_BMESH)) {
+  if ((update_flag & PBVH_RebuildDrawBuffers) || ELEM(pbvh->type, PBVH_GRIDS, PBVH_TRIMESH, PBVH_BMESH)) {
     /* Free buffers uses OpenGL, so not in parallel. */
     for (int n = 0; n < totnode; n++) {
       PBVHNode *node = nodes[n];
@@ -1352,6 +1364,8 @@ static void pbvh_update_draw_buffers(PBVH *pbvh, PBVHNode **nodes, int totnode,
         }
         else if (pbvh->type == PBVH_BMESH) {
           GPU_pbvh_bmesh_buffers_update_free(node->draw_buffers);
+        } else if (pbvh->type == PBVH_TRIMESH) {
+          GPU_pbvh_trimesh_buffers_update_free(node->draw_buffers);
         }
       }
     }
@@ -1528,6 +1542,34 @@ static void pbvh_bmesh_node_visibility_update(PBVHNode *node)
   BKE_pbvh_node_fully_hidden_set(node, true);
 }
 
+static void pbvh_trimesh_node_visibility_update(PBVHNode *node)
+{
+  GSet *unique, *other;
+
+  unique = BKE_pbvh_trimesh_node_unique_verts(node);
+  other = BKE_pbvh_trimesh_node_other_verts(node);
+
+  GSetIterator gs_iter;
+
+  GSET_ITER (gs_iter, unique) {
+    TMVert *v = BLI_gsetIterator_getKey(&gs_iter);
+    if (!TM_elem_flag_test(v, TM_ELEM_HIDDEN)) {
+      BKE_pbvh_node_fully_hidden_set(node, false);
+      return;
+    }
+  }
+
+  GSET_ITER (gs_iter, other) {
+    TMVert *v = BLI_gsetIterator_getKey(&gs_iter);
+    if (!TM_elem_flag_test(v, TM_ELEM_HIDDEN)) {
+      BKE_pbvh_node_fully_hidden_set(node, false);
+      return;
+    }
+  }
+
+  BKE_pbvh_node_fully_hidden_set(node, true);
+}
+
 static void pbvh_update_visibility_task_cb(void *__restrict userdata,
                                            const int n,
                                            const TaskParallelTLS *__restrict UNUSED(tls))
@@ -1547,6 +1589,9 @@ static void pbvh_update_visibility_task_cb(void *__restrict userdata,
       case PBVH_BMESH:
         pbvh_bmesh_node_visibility_update(node);
         break;
+      case PBVH_TRIMESH:
+        pbvh_trimesh_node_visibility_update(node);
+        break;
     }
     node->flag &= ~PBVH_UpdateVisibility;
   }
@@ -1660,6 +1705,8 @@ bool BKE_pbvh_has_faces(const PBVH *pbvh)
 {
   if (pbvh->type == PBVH_BMESH) {
     return (pbvh->bm->totface != 0);
+  } else if (pbvh->type == PBVH_TRIMESH) {
+    return pbvh->tm->tottri > 0;
   }
 
   return (pbvh->totprim != 0);
@@ -1855,6 +1902,15 @@ void BKE_pbvh_node_num_verts(PBVH *pbvh, PBVHNode *node, int *r_uniquevert, int
         *r_uniquevert = tot;
       }
       break;
+    case PBVH_TRIMESH:
+      tot = BLI_gset_len(node->tm_unique_verts);
+      if (r_totvert) {
+        *r_totvert = tot + BLI_gset_len(node->tm_other_verts);
+      }
+      if (r_uniquevert) {
+        *r_uniquevert = tot;
+      }
+      break;
   }
 }
 
@@ -1902,6 +1958,23 @@ void BKE_pbvh_node_get_grids(PBVH *pbvh,
         *r_griddata = NULL;
       }
       break;
+    case PBVH_TRIMESH:
+      if (r_grid_indices) {
+        *r_grid_indices = NULL;
+      }
+      if (r_totgrid) {
+        *r_totgrid = 0;
+      }
+      if (r_maxgrid) {
+        *r_maxgrid = 0;
+      }
+      if (r_gridsize) {
+        *r_gridsize = 0;
+      }
+      if (r_griddata) {
+        *r_griddata = NULL;
+      }
+      break;
   }
 }
 
@@ -2338,6 +2411,17 @@ bool BKE_pbvh_node_raycast(PBVH *pbvh,
                                     active_vertex_index,
                                     face_normal);
       break;
+    case PBVH_TRIMESH:
+      TM_mesh_elem_index_ensure(pbvh->tm, TM_VERTEX);
+      hit = pbvh_trimesh_node_raycast(node,
+        ray_start,
+        ray_normal,
+        isect_precalc,
+        depth,
+        use_origco,
+        active_vertex_index,
+        face_normal);
+      break;
   }
 
   return hit;
@@ -2572,6 +2656,10 @@ bool BKE_pbvh_node_find_nearest_to_ray(PBVH *pbvh,
       hit = pbvh_bmesh_node_nearest_to_ray(
           node, ray_start, ray_normal, depth, dist_sq, use_origco);
       break;
+    case PBVH_TRIMESH:
+      hit = pbvh_trimesh_node_nearest_to_ray(
+        node, ray_start, ray_normal, depth, dist_sq, use_origco);
+      break;
   }
 
   return hit;
@@ -2653,6 +2741,9 @@ void BKE_pbvh_update_normals(PBVH *pbvh, struct SubdivCCG *subdiv_ccg)
     if (pbvh->type == PBVH_BMESH) {
       pbvh_bmesh_normals_update(nodes, totnode);
     }
+    else if (pbvh->type == PBVH_TRIMESH) {
+      pbvh_trimesh_normals_update(nodes, totnode);
+    }
     else if (pbvh->type == PBVH_FACES) {
       pbvh_faces_update_normals(pbvh, nodes, totnode);
     }
@@ -2980,10 +3071,10 @@ void pbvh_vertex_iter_init(PBVH *pbvh, PBVHNode *node, PBVHVertexIter *vi, int m
     vi->cd_vert_mask_offset = CustomData_get_offset(vi->bm_vdata, CD_PAINT_MASK);
   }
 
-  if (bvh->type == PBVH_TRIMESH) {
+  if (pbvh->type == PBVH_TRIMESH) {
     BLI_gsetIterator_init(&vi->tm_unique_verts, node->tm_unique_verts);
     BLI_gsetIterator_init(&vi->tm_other_verts, node->tm_other_verts);
-    vi->tm_vdata = &bvh->tm->vdata;
+    vi->tm_vdata = &pbvh->tm->vdata;
     vi->cd_vert_mask_offset = CustomData_get_offset(vi->tm_vdata, CD_PAINT_MASK);
   }
 
diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.c b/source/blender/blenkernel/intern/pbvh_bmesh.c
index a04fa1506d0..5c048b78147 100644
--- a/source/blender/blenkernel/intern/pbvh_bmesh.c
+++ b/source/blender/blenkernel/intern/pbvh_bmesh.c
@@ -656,6 +656,12 @@ static void pbvh_bmesh_vert_remove(PBVH *pbvh, BMVert *v)
   BM_FACES_OF_VERT_ITER_END;
 }
 
+void BKE_pbvh_bmesh_detail_size_set(PBVH *pbvh, float detail_size)
+{
+  pbvh->bm_max_edge_len = detail_size;
+  pbvh->bm_min_edge_len = pbvh->bm_max_edge_len * 0.4f;
+}
+
 static void pbvh_bmesh_face_remove(PBVH *pbvh, BMFace *f)
 {
   PBVHNode *f_node = pbvh_bmesh_node_from_face(pbvh, f);
@@ -2108,12 +2114,6 @@ void BKE_pbvh_bmesh_after_stroke(PBVH *pbvh)
   }
 }
 
-void BKE_pbvh_bmesh_detail_size_set(PBVH *pbvh, float detail_size)
-{
-  pbvh->bm_max_edge_len = detail_size;
-  pbvh->bm_min_edge_len = pbvh->bm_max_edge_len * 0.4f;
-}
-
 void BKE_pbvh_node_mark_topology_update(PBVHNode *node)
 {
   node->flag |= PBVH_UpdateTopology;
diff --git a/source/blender/blenkernel/intern/pbvh_trimesh.c b/so

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list