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; _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs