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. @@ _______________________________________________ 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