[Bf-blender-cvs] [9b2338f686d] refactor-mesh-bevel-weight-generic: Merge branch 'master' into refactor-mesh-bevel-weight-generic
Hans Goudey
noreply at git.blender.org
Sat Aug 27 04:02:23 CEST 2022
Commit: 9b2338f686d47e0a04e4903d1345ded1332cd4ab
Author: Hans Goudey
Date: Fri Aug 26 20:41:14 2022 -0500
Branches: refactor-mesh-bevel-weight-generic
https://developer.blender.org/rB9b2338f686d47e0a04e4903d1345ded1332cd4ab
Merge branch 'master' into refactor-mesh-bevel-weight-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/customdata.cc
index 6c6160ac0f1,1f70ab587bf..bcecfc1b289
--- a/source/blender/blenkernel/intern/customdata.cc
+++ b/source/blender/blenkernel/intern/customdata.cc
@@@ -5133,7 -5136,7 +5136,7 @@@ void CustomData_data_transfer(const Mes
else {
const LayerTypeInfo *type_info = layerType_getInfo(data_type);
- /* NOTE: we can use 'fake' CDLayers, like e.g. for crease :/. */
- /* NOTE: we can use 'fake' CDLayers, like e.g. for crease, bweight, etc. :/. */
++ /* NOTE: we can use 'fake' CDLayers for crease :/. */
data_size = (size_t)type_info->size;
data_step = laymap->elem_size ? laymap->elem_size : data_size;
data_offset = laymap->data_offset;
diff --cc source/blender/blenkernel/intern/mball_tessellate.c
index 54def0189b1,61f5a5f315f..1ca4f120bc2
--- a/source/blender/blenkernel/intern/mball_tessellate.c
+++ b/source/blender/blenkernel/intern/mball_tessellate.c
@@@ -1436,34 -1436,57 +1436,56 @@@ Mesh *BKE_mball_polygonize(Depsgraph *d
polygonize(&process);
if (process.curindex == 0) {
freepolygonize(&process);
- return;
+ return NULL;
}
- /* add resulting surface to displist */
+ freepolygonize(&process);
+
+ Mesh *mesh = (Mesh *)BKE_id_new_nomain(ID_ME, ((ID *)ob->data)->name + 2);
- /* Avoid over-allocation since this is stored in the displist. */
- if (process.curindex != process.totindex) {
- process.indices = MEM_reallocN(process.indices, sizeof(int[4]) * process.curindex);
+ mesh->totvert = (int)process.curvertex;
+ MVert *mvert = CustomData_add_layer(&mesh->vdata, CD_MVERT, CD_DEFAULT, NULL, mesh->totvert);
+ for (int i = 0; i < mesh->totvert; i++) {
+ copy_v3_v3(mvert[i].co, process.co[i]);
- mvert->bweight = 0;
+ mvert->flag = 0;
}
- if (process.curvertex != process.totvertex) {
- process.co = MEM_reallocN(process.co, process.curvertex * sizeof(float[3]));
- process.no = MEM_reallocN(process.no, process.curvertex * sizeof(float[3]));
+ MEM_freeN(process.co);
+
+ mesh->totpoly = (int)process.curindex;
+ MPoly *mpoly = CustomData_add_layer(&mesh->pdata, CD_MPOLY, CD_DEFAULT, NULL, mesh->totpoly);
+ MLoop *mloop = CustomData_add_layer(&mesh->ldata, CD_MLOOP, CD_DEFAULT, NULL, mesh->totpoly * 4);
+
+ int loop_offset = 0;
+ for (int i = 0; i < mesh->totpoly; i++) {
+ const int *indices = process.indices[i];
+
+ const int count = indices[2] != indices[3] ? 4 : 3;
+ mpoly[i].loopstart = loop_offset;
+ mpoly[i].totloop = count;
+ mpoly[i].flag = ME_SMOOTH;
+
+ mloop[loop_offset].v = (uint32_t)indices[0];
+ mloop[loop_offset + 1].v = (uint32_t)indices[1];
+ mloop[loop_offset + 2].v = (uint32_t)indices[2];
+ if (count == 4) {
+ mloop[loop_offset + 3].v = (uint32_t)indices[3];
+ }
+
+ loop_offset += count;
}
+ MEM_freeN(process.indices);
- DispList *dl = MEM_callocN(sizeof(DispList), "mballdisp");
- BLI_addtail(dispbase, dl);
- dl->type = DL_INDEX4;
- dl->nr = (int)process.curvertex;
- dl->parts = (int)process.curindex;
+ for (int i = 0; i < mesh->totvert; i++) {
+ normalize_v3(process.no[i]);
+ }
+ mesh->runtime.vert_normals = process.no;
+ BKE_mesh_vertex_normals_clear_dirty(mesh);
- dl->index = (int *)process.indices;
+ mesh->totloop = loop_offset;
- for (uint a = 0; a < process.curvertex; a++) {
- normalize_v3(process.no[a]);
- }
+ BKE_mesh_update_customdata_pointers(mesh, false);
- dl->verts = (float *)process.co;
- dl->nors = (float *)process.no;
+ BKE_mesh_calc_edges(mesh, false, false);
- freepolygonize(&process);
+ return mesh;
}
diff --cc source/blender/blenkernel/intern/mesh.cc
index 3ec3c0ef3b4,272dd922caa..cd076b370f1
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -245,15 -246,17 +246,18 @@@ static void mesh_blend_write(BlendWrite
memset(&mesh->pdata, 0, sizeof(mesh->pdata));
}
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);
+ /* When converting to the old mesh format, don't save redundant attributes. */
+ names_to_skip.add_multiple_new({".hide_vert", ".hide_edge", ".hide_poly"});
}
- CustomData_blend_write_prepare(mesh->vdata, vert_layers, {".hide_vert"});
- CustomData_blend_write_prepare(mesh->edata, edge_layers, {".hide_edge"});
- CustomData_blend_write_prepare(mesh->ldata, loop_layers);
- CustomData_blend_write_prepare(mesh->pdata, poly_layers, {".hide_poly"});
+ CustomData_blend_write_prepare(mesh->vdata, vert_layers, names_to_skip);
+ CustomData_blend_write_prepare(mesh->edata, edge_layers, names_to_skip);
+ CustomData_blend_write_prepare(mesh->ldata, loop_layers, names_to_skip);
+ CustomData_blend_write_prepare(mesh->pdata, poly_layers, names_to_skip);
}
BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
diff --cc source/blender/blenkernel/intern/mesh_legacy_convert.cc
index f6c2a8066fb,cc96a5e8c60..19594282b3f
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@@ -877,65 -877,6 +877,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);
- if (const float *weights = (const float *)CustomData_get_layer(&mesh->vdata, CD_BWEIGHT)) {
++ 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;
+ }
+ }
+ else {
+ mesh->cd_flag &= ~ME_CDFLAG_VERT_BWEIGHT;
+ for (const int i : vertices.index_range()) {
+ vertices[i].bweight = 0;
+ }
+ }
+ MutableSpan<MEdge> edges(mesh->medge, mesh->totedge);
- if (const float *weights = (const float *)CustomData_get_layer(&mesh->edata, CD_BWEIGHT)) {
++ 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);
+ if (mesh->cd_flag & ME_CDFLAG_VERT_BWEIGHT) {
- float *weights = (float *)CustomData_add_layer(
- &mesh->vdata, CD_BWEIGHT, CD_DEFAULT, nullptr, vertices.size());
++ float *weights = static_cast<float *>(
++ CustomData_add_layer(&mesh->vdata, CD_BWEIGHT, CD_DEFAULT, nullptr, vertices.size()));
+ for (const int i : vertices.index_range()) {
+ weights[i] = vertices[i].bweight / 255.0f;
+ }
+ }
+
+ const Span<MEdge> edges(mesh->medge, mesh->totedge);
+ if (mesh->cd_flag & ME_CDFLAG_EDGE_BWEIGHT) {
- float *weights = (float *)CustomData_add_layer(
- &mesh->edata, CD_BWEIGHT, CD_DEFAULT, nullptr, edges.size());
++ float *weights = static_cast<float *>(
++ CustomData_add_layer(&mesh->edata, CD_BWEIGHT, CD_DEFAULT, 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 22479f70433,e026a013498..fe6fd5f6052
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@@ -773,8 -779,9 +779,8 @@@ static void subdiv_copy_edge_data(Subdi
const MEdge *coarse_edge)
{
const int subdiv_edge_index = subdiv_edge - ctx->subdiv_mesh->medge;
- if (coarse_edge == NULL) {
+ 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 eadf87d7ebd,b9c004b5392..f9efbdd74d3
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@@ -1273,11 -1325,15 +1273,7 @@@ void BM_mesh_bm_to_me_for_eval(BMesh *b
if (BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
need_hide_vert = true;
}
-
- if (cd_vert_bweight_offset != -1) {
- mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
- }
- if (cd_vert_bweight_offset != -1) {
- mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
- }
-
- if (cd_vert_bweight_offset != -1) {
- mv->bweight = BM_ELEM_CD_GET_FLOAT_AS_UCHAR(eve, cd_vert_bweight_offset);
- }
-
CustomData_from_bmesh_block(&bm->vdata, &me->vdata, eve->head.data, i);
}
bm->elem_index_dirty &= ~BM_VERT;
More information about the Bf-blender-cvs
mailing list