[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