[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