[Bf-blender-cvs] [1b41cf95db5] refactor-mesh-face-generic: Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

Hans Goudey noreply at git.blender.org
Sat Jan 28 19:58:20 CET 2023


Commit: 1b41cf95db5ee54346a62a0718fbac10f0c1bd33
Author: Hans Goudey
Date:   Fri Jan 27 15:49:26 2023 -0600
Branches: refactor-mesh-face-generic
https://developer.blender.org/rB1b41cf95db5ee54346a62a0718fbac10f0c1bd33

Merge branch 'refactor-mesh-corners-generic' into refactor-mesh-face-generic

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



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

diff --cc intern/cycles/blender/mesh.cpp
index 847c7358f7a,69926f68994..3cd762bbf05
--- a/intern/cycles/blender/mesh.cpp
+++ b/intern/cycles/blender/mesh.cpp
@@@ -1035,8 -1029,7 +1052,8 @@@ static void create_mesh(Scene *scene
    else {
      vector<int> vi;
  
 +    const MPoly *polys = static_cast<const MPoly *>(b_mesh.polygons[0].ptr.data);
-     const MLoop *loops = static_cast<const MLoop *>(b_mesh.loops[0].ptr.data);
+     std::optional<BL::IntAttribute> corner_verts = find_corner_vert_attribute(b_mesh);
  
      for (int i = 0; i < numfaces; i++) {
        const MPoly &b_poly = polys[i];
diff --cc source/blender/blenkernel/BKE_mesh.h
index 9d15688b43c,653a2407887..0611cc46aa6
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@@ -472,15 -472,13 +472,16 @@@ void BKE_mesh_ensure_normals_for_displa
   *
   * Used when defining an empty custom loop normals data layer,
   * to keep same shading as with auto-smooth!
 + *
 + * \param sharp_faces: Optional array used to mark specific faces for sharp shading.
   */
  void BKE_edges_sharp_from_angle_set(int numEdges,
-                                     const struct MLoop *mloops,
-                                     int numLoops,
+                                     const int *corner_verts,
+                                     const int *corner_edges,
+                                     int corners_num,
                                      const struct MPoly *mpolys,
                                      const float (*poly_normals)[3],
 +                                    const bool *sharp_faces,
                                      int numPolys,
                                      float split_angle,
                                      bool *sharp_edges);
@@@ -639,11 -636,11 +642,12 @@@ void BKE_mesh_normals_loop_custom_from_
                                                   int numVerts,
                                                   const struct MEdge *medges,
                                                   int numEdges,
-                                                  const struct MLoop *mloops,
-                                                  int numLoops,
+                                                  const int *corner_verts,
+                                                  const int *corner_edges,
+                                                  int corners_num,
                                                   const struct MPoly *mpolys,
                                                   const float (*poly_normals)[3],
 +                                                 const bool *sharp_faces,
                                                   int numPolys,
                                                   bool *sharp_edges,
                                                   short (*r_clnors_data)[2]);
diff --cc source/blender/blenkernel/BKE_mesh_mapping.h
index c8561372e30,a5b70fc8a28..12d8794743d
--- a/source/blender/blenkernel/BKE_mesh_mapping.h
+++ b/source/blender/blenkernel/BKE_mesh_mapping.h
@@@ -320,10 -322,9 +322,10 @@@ int *BKE_mesh_calc_smoothgroups(const s
                                  int totedge,
                                  const struct MPoly *mpoly,
                                  int totpoly,
-                                 const struct MLoop *mloop,
+                                 const int *corner_edges,
                                  int totloop,
                                  const bool *sharp_edges,
 +                                const bool *sharp_faces,
                                  int *r_totgroup,
                                  bool use_bitflags);
  
diff --cc source/blender/blenkernel/BKE_mesh_tangent.h
index b04a8d1ab98,1b767278d12..6d5b077f1f1
--- a/source/blender/blenkernel/BKE_mesh_tangent.h
+++ b/source/blender/blenkernel/BKE_mesh_tangent.h
@@@ -44,10 -44,9 +44,10 @@@ void BKE_mesh_calc_loop_tangent_single(
  void BKE_mesh_calc_loop_tangent_ex(const float (*vert_positions)[3],
                                     const struct MPoly *mpoly,
                                     uint mpoly_len,
-                                    const struct MLoop *mloop,
+                                    const int *corner_verts,
                                     const struct MLoopTri *looptri,
                                     uint looptri_len,
 +                                   const bool *sharp_faces,
  
                                     struct CustomData *loopdata,
                                     bool calc_active_tangent,
diff --cc source/blender/blenkernel/BKE_shrinkwrap.h
index 5394d7e043a,e444d890c88..f6e5e9cea6d
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@@ -75,8 -75,8 +75,9 @@@ typedef struct ShrinkwrapTreeData 
  
    const struct MPoly *polys;
    const float (*vert_normals)[3];
+   const int *corner_edges;
    const float (*poly_normals)[3];
 +  const bool *sharp_faces;
    const float (*clnors)[3];
    ShrinkwrapBoundaryData *boundary;
  } ShrinkwrapTreeData;
diff --cc source/blender/blenkernel/intern/curve_to_mesh_convert.cc
index 40eacdca168,af75c9ce478..026064b7ede
--- a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
+++ b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
@@@ -104,19 -105,19 +105,18 @@@ static void fill_mesh_topology(const in
        MPoly &poly = polys[ring_poly_offset + i_profile];
        poly.loopstart = ring_segment_loop_offset;
        poly.totloop = 4;
 -      poly.flag = ME_SMOOTH;
  
-       MLoop &loop_a = loops[ring_segment_loop_offset];
-       loop_a.v = ring_vert_offset + i_profile;
-       loop_a.e = ring_edge_start + i_profile;
-       MLoop &loop_b = loops[ring_segment_loop_offset + 1];
-       loop_b.v = ring_vert_offset + i_next_profile;
-       loop_b.e = next_main_edge_start + i_ring;
-       MLoop &loop_c = loops[ring_segment_loop_offset + 2];
-       loop_c.v = next_ring_vert_offset + i_next_profile;
-       loop_c.e = next_ring_edge_offset + i_profile;
-       MLoop &loop_d = loops[ring_segment_loop_offset + 3];
-       loop_d.v = next_ring_vert_offset + i_profile;
-       loop_d.e = main_edge_start + i_ring;
+       corner_verts[ring_segment_loop_offset] = ring_vert_offset + i_profile;
+       corner_edges[ring_segment_loop_offset] = ring_edge_start + i_profile;
+ 
+       corner_verts[ring_segment_loop_offset + 1] = ring_vert_offset + i_next_profile;
+       corner_edges[ring_segment_loop_offset + 1] = next_main_edge_start + i_ring;
+ 
+       corner_verts[ring_segment_loop_offset + 2] = next_ring_vert_offset + i_next_profile;
+       corner_edges[ring_segment_loop_offset + 2] = next_ring_edge_offset + i_profile;
+ 
+       corner_verts[ring_segment_loop_offset + 3] = next_ring_vert_offset + i_profile;
+       corner_edges[ring_segment_loop_offset + 3] = main_edge_start + i_ring;
      }
    }
  
@@@ -672,8 -672,8 +671,9 @@@ Mesh *curve_to_mesh_sweep(const CurvesG
    MutableSpan<float3> positions = mesh->vert_positions_for_write();
    MutableSpan<MEdge> edges = mesh->edges_for_write();
    MutableSpan<MPoly> polys = mesh->polys_for_write();
-   MutableSpan<MLoop> loops = mesh->loops_for_write();
+   MutableSpan<int> corner_verts = mesh->corner_verts_for_write();
+   MutableSpan<int> corner_edges = mesh->corner_edges_for_write();
 +  MutableAttributeAccessor mesh_attributes = mesh->attributes_for_write();
  
    foreach_curve_combination(curves_info, offsets, [&](const CombinationInfo &info) {
      fill_mesh_topology(info.vert_range.start(),
diff --cc source/blender/blenkernel/intern/fluid.cc
index a314a5c0886,ef2889f99df..79cd391d374
--- a/source/blender/blenkernel/intern/fluid.cc
+++ b/source/blender/blenkernel/intern/fluid.cc
@@@ -3244,12 -3254,8 +3244,12 @@@ static Mesh *create_liquid_geometry(Flu
    }
    float(*positions)[3] = BKE_mesh_vert_positions_for_write(me);
    mpolys = BKE_mesh_polys_for_write(me);
-   mloops = BKE_mesh_loops_for_write(me);
+   corner_verts = me->corner_verts_for_write().data();
  
 +  const bool is_sharp = orgmesh->attributes().lookup_or_default<bool>(
 +      "sharp_face", ATTR_DOMAIN_FACE, false)[0];
 +  BKE_mesh_smooth_flag_set(me, !is_sharp);
 +
    /* Get size (dimension) but considering scaling. */
    copy_v3_v3(cell_size_scaled, fds->cell_size);
    mul_v3_v3(cell_size_scaled, ob->scale);
@@@ -3334,9 -3340,10 +3334,9 @@@
    int *material_indices = BKE_mesh_material_indices_for_write(me);
  
    /* Loop for triangles. */
-   for (i = 0; i < num_faces; i++, mpolys++, mloops += 3) {
+   for (i = 0; i < num_faces; i++, mpolys++, corner_verts += 3) {
      /* Initialize from existing face. */
      material_indices[i] = mp_mat_nr;
 -    mpolys->flag = mp_flag;
  
      mpolys->loopstart = i * 3;
      mpolys->totloop = 3;
diff --cc source/blender/blenkernel/intern/geometry_component_mesh.cc
index 45a9b528823,bdf41c43509..511be82d881
--- a/source/blender/blenkernel/intern/geometry_component_mesh.cc
+++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc
@@@ -1253,17 -1247,49 +1237,48 @@@ static ComponentAttributeProviders crea
                                                         nullptr,
                                                         AttributeValidator{&material_index_clamp});
  
+   /* Note: This clamping is more of a last resort, since it's quite easy to make an
+    * invalid mesh that will crash Blender by arbitrarily editing this attribute. */
+   static const auto int_index_clamp = mf::build::SI1_SO<int, int>(
+       "Index Validate",
+       [](int value) { return std::max(value, 0); },
+       mf::build::exec_presets::AllSpanOrSingle());
+   static BuiltinCustomDataLayerProvider corner_vert(".corner_vert",
+                                                     ATTR_DOMAIN_CORNER,
+                                                     CD_PROP_INT32,
+                                                     CD_PROP_INT32,
+                                                     BuiltinAttributeProvider::NonCreatable,
+                                                     BuiltinAttributeProvider::Writable,
+                                                     Builtin

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list