[Bf-blender-cvs] [8e4fb20c366] refactor-mesh-bevel-weight-generic: Merge branch 'master' into refactor-mesh-bevel-weight-generic
Hans Goudey
noreply at git.blender.org
Mon Sep 5 20:18:52 CEST 2022
Commit: 8e4fb20c36635a9f9a3bf4cdfe792a6011d4f884
Author: Hans Goudey
Date: Mon Sep 5 13:08:07 2022 -0500
Branches: refactor-mesh-bevel-weight-generic
https://developer.blender.org/rB8e4fb20c36635a9f9a3bf4cdfe792a6011d4f884
Merge branch 'master' into refactor-mesh-bevel-weight-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/mesh.cc
index af061a9daae,c0379c50de4..caa29c559c0
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -253,8 -248,8 +248,9 @@@ static void mesh_blend_write(BlendWrite
else {
Set<std::string> names_to_skip;
if (!BLO_write_is_undo(writer)) {
+
BKE_mesh_legacy_convert_hide_layers_to_flags(mesh);
+ BKE_mesh_legacy_bevel_weight_from_layers(mesh);
BKE_mesh_legacy_convert_material_indices_to_mpoly(mesh);
/* When converting to the old mesh format, don't save redundant attributes. */
names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly"});
diff --cc source/blender/blenkernel/intern/mesh_legacy_convert.cc
index e0f33fb038e,c2a4b0176c6..6e615a6c88d
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@@ -878,67 -917,6 +917,67 @@@ void BKE_mesh_add_mface_layers(CustomDa
/** \} */
+/* -------------------------------------------------------------------- */
+/** \name Bevel Weight Conversion
+ * \{ */
+
+void BKE_mesh_legacy_bevel_weight_from_layers(Mesh *mesh)
+{
+ using namespace blender;
- MutableSpan<MVert> vertices(mesh->mvert, mesh->totvert);
++ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ if (const float *weights = static_cast<const float *>(
+ CustomData_get_layer(&mesh->vdata, CD_BWEIGHT))) {
+ mesh->cd_flag |= ME_CDFLAG_VERT_BWEIGHT;
- for (const int i : vertices.index_range()) {
- vertices[i].bweight = std::clamp(weights[i], 0.0f, 1.0f) * 255.0f;
++ for (const int i : verts.index_range()) {
++ verts[i].bweight = std::clamp(weights[i], 0.0f, 1.0f) * 255.0f;
+ }
+ }
+ else {
+ mesh->cd_flag &= ~ME_CDFLAG_VERT_BWEIGHT;
- for (const int i : vertices.index_range()) {
- vertices[i].bweight = 0;
++ for (const int i : verts.index_range()) {
++ verts[i].bweight = 0;
+ }
+ }
- MutableSpan<MEdge> edges(mesh->medge, mesh->totedge);
++ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ if (const float *weights = static_cast<const float *>(
+ CustomData_get_layer(&mesh->edata, CD_BWEIGHT))) {
+ mesh->cd_flag |= ME_CDFLAG_EDGE_BWEIGHT;
+ for (const int i : edges.index_range()) {
+ edges[i].bweight = std::clamp(weights[i], 0.0f, 1.0f) * 255.0f;
+ }
+ }
+ else {
+ mesh->cd_flag &= ~ME_CDFLAG_EDGE_BWEIGHT;
+ for (const int i : edges.index_range()) {
+ edges[i].bweight = 0;
+ }
+ }
+}
+
+void BKE_mesh_legacy_bevel_weight_to_layers(Mesh *mesh)
+{
+ using namespace blender;
- const Span<MVert> vertices(mesh->mvert, mesh->totvert);
++ const Span<MVert> verts = mesh->vertices();
+ if (mesh->cd_flag & ME_CDFLAG_VERT_BWEIGHT) {
+ float *weights = static_cast<float *>(
- CustomData_add_layer(&mesh->vdata, CD_BWEIGHT, CD_CONSTRUCT, nullptr, vertices.size()));
- for (const int i : vertices.index_range()) {
- weights[i] = vertices[i].bweight / 255.0f;
++ CustomData_add_layer(&mesh->vdata, CD_BWEIGHT, CD_CONSTRUCT, nullptr, verts.size()));
++ for (const int i : verts.index_range()) {
++ weights[i] = verts[i].bweight / 255.0f;
+ }
+ }
+
- const Span<MEdge> edges(mesh->medge, mesh->totedge);
++ const Span<MEdge> edges = mesh->edges();
+ if (mesh->cd_flag & ME_CDFLAG_EDGE_BWEIGHT) {
+ float *weights = static_cast<float *>(
+ CustomData_add_layer(&mesh->edata, CD_BWEIGHT, CD_CONSTRUCT, nullptr, edges.size()));
+ for (const int i : edges.index_range()) {
+ weights[i] = edges[i].bweight / 255.0f;
+ }
+ }
+}
+
+/** \} */
+
/* -------------------------------------------------------------------- */
/** \name Hide Attribute and Legacy Flag Conversion
* \{ */
diff --cc source/blender/blenkernel/intern/subdiv_mesh.cc
index fef222fe31e,c222fc46800..34bd3e5b3bd
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@@ -778,9 -776,10 +776,9 @@@ static void subdiv_copy_edge_data(Subdi
MEdge *subdiv_edge,
const MEdge *coarse_edge)
{
- const int subdiv_edge_index = subdiv_edge - ctx->subdiv_mesh->medge;
+ const int subdiv_edge_index = subdiv_edge - ctx->subdiv_edges;
if (coarse_edge == nullptr) {
subdiv_edge->crease = 0;
- subdiv_edge->bweight = 0;
subdiv_edge->flag = 0;
if (!ctx->settings->use_optimal_display) {
subdiv_edge->flag |= ME_EDGERENDER;
diff --cc source/blender/bmesh/intern/bmesh_mesh_convert.cc
index b36de36c2e2,0190f91250b..ef621f77f37
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -1259,12 -1302,15 +1252,13 @@@ void BM_mesh_bm_to_me_for_eval(BMesh *b
BMVert *eve;
BMEdge *eed;
BMFace *efa;
- MVert *mvert = me->mvert;
- MEdge *medge = me->medge;
- MLoop *mloop = me->mloop;
- MPoly *mpoly = me->mpoly;
+ MutableSpan<MVert> mvert = me->vertices_for_write();
+ MutableSpan<MEdge> medge = me->edges_for_write();
+ MutableSpan<MPoly> mpoly = me->polygons_for_write();
+ MutableSpan<MLoop> loops = me->loops_for_write();
+ MLoop *mloop = loops.data();
unsigned int i, j;
- const int cd_vert_bweight_offset = CustomData_get_offset(&bm->vdata, CD_BWEIGHT);
- const int cd_edge_bweight_offset = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
const int cd_edge_crease_offset = CustomData_get_offset(&bm->edata, CD_CREASE);
bool need_hide_vert = false;
diff --cc source/blender/modifiers/intern/MOD_solidify_extrude.c
index f679769779b,d7b2db87a60..ad2534db437
--- a/source/blender/modifiers/intern/MOD_solidify_extrude.c
+++ b/source/blender/modifiers/intern/MOD_solidify_extrude.c
@@@ -348,11 -335,16 +335,11 @@@ Mesh *MOD_solidify_extrude_modifyMesh(M
(int)((loops_num * stride) + newLoops),
(int)((polys_num * stride) + newPolys));
- mpoly = result->mpoly;
- mloop = result->mloop;
- medge = result->medge;
- mvert = result->mvert;
+ MVert *mvert = BKE_mesh_vertices_for_write(result);
+ MEdge *medge = BKE_mesh_edges_for_write(result);
+ MPoly *mpoly = BKE_mesh_polygons_for_write(result);
+ MLoop *mloop = BKE_mesh_loops_for_write(result);
- if (do_bevel_convex) {
- /* Make sure bweight is enabled. */
- result->cd_flag |= ME_CDFLAG_EDGE_BWEIGHT;
- }
-
if (do_shell) {
CustomData_copy_data(&mesh->vdata, &result->vdata, 0, 0, (int)verts_num);
CustomData_copy_data(&mesh->vdata, &result->vdata, 0, (int)verts_num, (int)verts_num);
diff --cc source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
index aa871e60bd8,0bce954a67a..cee565b30f4
--- a/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
+++ b/source/blender/modifiers/intern/MOD_solidify_nonmanifold.c
@@@ -188,15 -184,11 +184,15 @@@ Mesh *MOD_solidify_nonmanifold_modifyMe
const bool do_flat_faces = dvert && (smd->flag & MOD_SOLIDIFY_NONMANIFOLD_FLAT_FACES);
- orig_mvert = mesh->mvert;
- orig_medge = mesh->medge;
- orig_mloop = mesh->mloop;
- orig_mpoly = mesh->mpoly;
+ const MVert *orig_mvert = BKE_mesh_vertices(mesh);
+ const MEdge *orig_medge = BKE_mesh_edges(mesh);
+ const MPoly *orig_mpoly = BKE_mesh_polygons(mesh);
+ const MLoop *orig_mloop = BKE_mesh_loops(mesh);
+ /* These might be null. */
+ const float *orig_vert_bweight = CustomData_get_layer(&mesh->vdata, CD_BWEIGHT);
+ const float *orig_edge_bweight = CustomData_get_layer(&mesh->edata, CD_BWEIGHT);
+
uint new_verts_num = 0;
uint new_edges_num = 0;
uint new_loops_num = 0;
More information about the Bf-blender-cvs
mailing list