[Bf-blender-cvs] [d1c88abb319] refactor-mesh-bevel-weight-generic: Always write with legacy mesh format

Hans Goudey noreply at git.blender.org
Wed Jul 20 19:51:18 CEST 2022


Commit: d1c88abb319d4ddce973f752a5dd359bb28f107f
Author: Hans Goudey
Date:   Wed Jul 20 12:51:09 2022 -0500
Branches: refactor-mesh-bevel-weight-generic
https://developer.blender.org/rBd1c88abb319d4ddce973f752a5dd359bb28f107f

Always write with legacy mesh format

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

M	source/blender/blenkernel/BKE_blender_version.h
M	source/blender/blenkernel/BKE_mesh_legacy_convert.h
M	source/blender/blenkernel/intern/mesh.cc
M	source/blender/blenkernel/intern/mesh_legacy_convert.cc
M	source/blender/blenloader/BLO_read_write.h
M	source/blender/blenloader/BLO_writefile.h
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/windowmanager/intern/wm_files.c

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

diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index 605e700dd16..efe44ec657b 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -25,7 +25,7 @@ extern "C" {
 
 /* Blender file format version. */
 #define BLENDER_FILE_VERSION BLENDER_VERSION
-#define BLENDER_FILE_SUBVERSION 6
+#define BLENDER_FILE_SUBVERSION 5
 
 /* Minimum Blender version that supports reading file written with the current
  * version. Older Blender versions will test this and show a warning if the file
diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index 909fd0e0dea..208f0877e11 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -17,6 +17,15 @@ struct CustomData;
 struct Mesh;
 struct MFace;
 
+/**
+ * Copy bevel weights from separate layers into vertices and edges.
+ */
+void BKE_mesh_legacy_bevel_weight_from_layers(struct Mesh *mesh);
+/**
+ * Copy bevel weights from vertices and edges to separate layers.
+ */
+void BKE_mesh_legacy_bevel_weight_to_layers(struct Mesh *mesh);
+
 /**
  * Recreate #MFace Tessellation.
  *
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index cb8be3b2ed2..b777642368c 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -211,39 +211,6 @@ static void mesh_foreach_path(ID *id, BPathForeachPathData *bpath_data)
   }
 }
 
-/**
- * \note This can change the mesh, but it only affects legacy fields that shouldn't be read anyway.
- */
-static void prepare_legacy_bevel_weight_data_for_writing(Mesh &mesh)
-{
-  MutableSpan<MVert> verts(mesh.mvert, mesh.totvert);
-  const float *vert_bevel = (const float *)CustomData_get_layer(&mesh.vdata, CD_BWEIGHT);
-  if (vert_bevel == nullptr) {
-    for (const int i : verts.index_range()) {
-      verts[i].bweight = 0;
-    }
-  }
-  else {
-    mesh.cd_flag |= ME_CDFLAG_VERT_BWEIGHT;
-    for (const int i : verts.index_range()) {
-      verts[i].bweight = std::clamp(vert_bevel[i], 0.0f, 1.0f) * 255.0f;
-    }
-  }
-  MutableSpan<MEdge> edges(mesh.medge, mesh.totedge);
-  const float *edge_bevel = (const float *)CustomData_get_layer(&mesh.edata, CD_BWEIGHT);
-  if (edge_bevel == nullptr) {
-    for (const int i : edges.index_range()) {
-      edges[i].bweight = 0;
-    }
-  }
-  else {
-    mesh.cd_flag |= ME_CDFLAG_EDGE_BWEIGHT;
-    for (const int i : edges.index_range()) {
-      edges[i].bweight = std::clamp(edge_bevel[i], 0.0f, 1.0f) * 255.0f;
-    }
-  }
-}
-
 static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
 {
   Mesh *mesh = (Mesh *)id;
@@ -285,9 +252,7 @@ static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address
     CustomData_blend_write_prepare(mesh->pdata, poly_layers);
   }
 
-  if (BLO_write_use_legacy_mesh_format(writer)) {
-    prepare_legacy_bevel_weight_data_for_writing(*mesh);
-  }
+  BKE_mesh_legacy_bevel_weight_from_layers(mesh);
 
   BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
   BKE_id_blend_write(writer, &mesh->id);
@@ -365,6 +330,8 @@ static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
     }
   }
 
+  BKE_mesh_legacy_bevel_weight_to_layers(mesh);
+
   /* We don't expect to load normals from files, since they are derived data. */
   BKE_mesh_normals_tag_dirty(mesh);
   BKE_mesh_assert_normals_dirty_or_calculated(mesh);
diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index 479dd6a012a..61464db011f 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -7,7 +7,7 @@
  * Functions to convert mesh data to and from legacy formats like #MFace.
  */
 
-// #include <climits>
+#define DNA_DEPRECATED_ALLOW
 
 #include "MEM_guardedalloc.h"
 
@@ -874,3 +874,62 @@ void BKE_mesh_add_mface_layers(CustomData *fdata, CustomData *ldata, int total)
 }
 
 /** \} */
+
+/* -------------------------------------------------------------------- */
+/** \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)) {
+    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)) {
+    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());
+    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->vdata, CD_BWEIGHT, CD_DEFAULT, nullptr, vertices.size());
+    for (const int i : vertices.index_range()) {
+      weights[i] = vertices[i].bweight / 255.0f;
+    }
+  }
+}
+
+/** \} */
diff --git a/source/blender/blenloader/BLO_read_write.h b/source/blender/blenloader/BLO_read_write.h
index 5d0bb8231d1..536c3989aff 100644
--- a/source/blender/blenloader/BLO_read_write.h
+++ b/source/blender/blenloader/BLO_read_write.h
@@ -181,8 +181,6 @@ void BLO_write_string(BlendWriter *writer, const char *data_ptr);
  */
 bool BLO_write_is_undo(BlendWriter *writer);
 
-bool BLO_write_use_legacy_mesh_format(const BlendWriter *writer);
-
 /** \} */
 
 /* -------------------------------------------------------------------- */
diff --git a/source/blender/blenloader/BLO_writefile.h b/source/blender/blenloader/BLO_writefile.h
index a2c2c036f5a..93f1ea5090f 100644
--- a/source/blender/blenloader/BLO_writefile.h
+++ b/source/blender/blenloader/BLO_writefile.h
@@ -44,7 +44,6 @@ struct BlendFileWriteParams {
   uint use_save_versions : 1;
   /** On write, restore paths after editing them (see #BLO_WRITE_PATH_REMAP_RELATIVE). */
   uint use_save_as_copy : 1;
-  uint use_legacy_mesh_format : 1;
   uint use_userdef : 1;
   const struct BlendThumbnail *thumb;
 };
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index a0aa4471e37..bbbeba4d687 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -33,7 +33,6 @@
 #include "DNA_mask_types.h"
 #include "DNA_material_types.h"
 #include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
@@ -3258,27 +3257,6 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
       }
     }
   }
-
-  if (!MAIN_VERSION_ATLEAST(bmain, 303, 6)) {
-    /* Move mesh bevel weights from structs to dedicated custom data layers, like edit mode. */
-    LISTBASE_FOREACH (Mesh *, mesh, &bmain->meshes) {
-      if (mesh->cd_flag & ME_CDFLAG_EDGE_BWEIGHT) {
-        float *weights = (float *)CustomData_add_layer(
-            &mesh->edata, CD_BWEIGHT, CD_DEFAULT, NULL, mesh->totedge);
-        for (int i = 0; i < mesh->totedge; i++) {
-          weights[i] = mesh->medge[i].bweight / 255.0f;
-        }
-      }
-      if (mesh->cd_flag & ME_CDFLAG_VERT_BWEIGHT) {
-        float *weights = (float *)CustomData_add_layer(
-            &mesh->vdata, CD_BWEIGHT, CD_DEFAULT, NULL, mesh->totvert);
-        for (int i = 0; i < mesh->totvert; i++) {
-          weights[i] = mesh->mvert[i].bweight / 255.0f;
-        }
-      }
-    }
-  }
-
   /**
    * Versioning code until next subversion bump goes here.
    *
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index e34abbd32ec..68171f26a66 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -422,8 +422,6 @@ typedef struct {
   /** When true, write to #WriteData.current, could also call 'is_undo'. */
   bool use_memfile;
 
-  bool use_legacy_mesh_format;
-
   /**
    * Wrap writing, so we can use zstd or
    * other compression types later, see: G_FILE_COMPRESS
@@ -1085,7 +1083,6 @@ static bool write_file_handle(Main *mainvar,
                               MemFile *current,
                               int write_flags,
                               bool use_userdef,
-                              const bool use_legacy_mesh_format,
                               const BlendThumbnail *thumb)
 {
   BHead bhead;
@@ -1096,7 +1093,6 @@ static bool write_file_handle(Main *mainvar,
   blo_split_main(&mainlist, mainvar);
 
   wd = mywrite_begin(ww, compare, current);
-  wd->use_legacy_mesh_format = use_legacy_mesh_format;
   BlendWriter writer = {wd};
 
   sprintf(buf,
@@ -1436,8 +1432,7 @@ bool BLO_write_file(Main *mainvar,
   }
 
   /* actual file writing */
-  const bool err = write_file_handle(
-      mainvar, &ww, NULL, NULL, write_flags, use_userdef, params->use_legacy_mesh_format, thumb);
+  const bool err = write_file_handle(mainvar, &ww, NULL, NULL, write_flags, use_userdef, thumb);
 
   ww.close(

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list