[Bf-blender-cvs] [2d5c8b0a9cb] refactor-mesh-uv-map-generic: Merge branch 'master' into refactor-mesh-uv-map-generic
Martijn Versteegh
noreply at git.blender.org
Thu Nov 24 21:36:36 CET 2022
Commit: 2d5c8b0a9cb02db756fb252f49229a17cbc4afb8
Author: Martijn Versteegh
Date: Thu Nov 24 21:28:31 2022 +0100
Branches: refactor-mesh-uv-map-generic
https://developer.blender.org/rB2d5c8b0a9cb02db756fb252f49229a17cbc4afb8
Merge branch 'master' into refactor-mesh-uv-map-generic
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/mesh.cc
index 35ac5634af9,02d375bd782..d26f381cbdc
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@@ -276,12 -275,10 +276,14 @@@ static void mesh_blend_write(BlendWrite
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);
+
+ if (!BLO_write_is_undo(writer)) {
+ BKE_mesh_legacy_convert_uvs_to_struct(mesh, temp_arrays_for_legacy_format, loop_layers);
+ }
}
+ mesh->runtime = nullptr;
+
BLO_write_id_struct(writer, Mesh, id_address, &mesh->id);
BKE_id_blend_write(writer, &mesh->id);
diff --cc source/blender/bmesh/intern/bmesh_interp.c
index fdae1d71f04,8ceefc94d8a..ab7978d7d70
--- a/source/blender/bmesh/intern/bmesh_interp.c
+++ b/source/blender/bmesh/intern/bmesh_interp.c
@@@ -874,58 -864,17 +866,54 @@@ void BM_data_layer_add_named(BMesh *bm
}
}
+void BM_data_layer_ensure_named(BMesh *bm, CustomData *data, int type, const char *name)
+{
+ if (CustomData_get_named_layer_index(data, type, name) == -1) {
+ BM_data_layer_add_named(bm, data, type, name);
+ }
+}
+
+void BM_uv_map_ensure_selection_pin_attributes(BMesh *bm, const char *uv_map_name)
+{
+ char name[MAX_CUSTOMDATA_LAYER_NAME];
+ BM_data_layer_ensure_named(
+ bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_vert_selection_name(uv_map_name, name));
+ BM_data_layer_ensure_named(
+ bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_edge_selection_name(uv_map_name, name));
+ BM_data_layer_ensure_named(bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_pin_name(uv_map_name, name));
+}
+
+void BM_uv_map_ensure_vert_selection_attribute(BMesh *bm, const char *uv_map_name)
+{
+ char name[MAX_CUSTOMDATA_LAYER_NAME];
+ BM_data_layer_ensure_named(
+ bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_vert_selection_name(uv_map_name, name));
+}
+
+void BM_uv_map_ensure_edge_selection_attribute(BMesh *bm, const char *uv_map_name)
+{
+ char name[MAX_CUSTOMDATA_LAYER_NAME];
+ BM_data_layer_ensure_named(
+ bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_edge_selection_name(uv_map_name, name));
+}
+
+void BM_uv_map_ensure_pin_attribute(BMesh *bm, const char *uv_map_name)
+{
+ char name[MAX_CUSTOMDATA_LAYER_NAME];
+ BM_data_layer_ensure_named(bm, &bm->ldata, CD_PROP_BOOL, get_uv_map_pin_name(uv_map_name, name));
+}
+
void BM_data_layer_free(BMesh *bm, CustomData *data, int type)
{
- CustomData olddata;
- bool has_layer;
-
- olddata = *data;
+ CustomData olddata = *data;
olddata.layers = (olddata.layers) ? MEM_dupallocN(olddata.layers) : NULL;
-
- /* the pool is now owned by olddata and must not be shared */
+ /* The pool is now owned by `olddata` and must not be shared. */
data->pool = NULL;
- has_layer = CustomData_free_layer_active(data, type, 0);
+ const bool had_layer = CustomData_free_layer_active(data, type, 0);
/* Assert because its expensive to realloc - better not do if layer isn't present. */
- BLI_assert(has_layer != false);
- UNUSED_VARS_NDEBUG(has_layer);
+ BLI_assert(had_layer != false);
+ UNUSED_VARS_NDEBUG(had_layer);
update_data_blocks(bm, &olddata, data);
if (olddata.layers) {
diff --cc source/blender/editors/include/ED_mesh.h
index 76f7e3b2c3e,bab1f7e4c5e..b717a9d4b4e
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@@ -552,13 -552,8 +552,15 @@@ void ED_mesh_geometry_clear(struct Mes
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, bool calc_edges, bool calc_edges_loose);
+bool *ED_mesh_uv_map_ensure_vert_selection(struct Mesh *mesh, int uv_index);
+bool *ED_mesh_uv_map_ensure_edge_selection(struct Mesh *mesh, int uv_index);
+bool *ED_mesh_uv_map_ensure_pin(struct Mesh *mesh, int uv_index);
+const bool *ED_mesh_uv_map_get_vert_selection(const struct Mesh *mesh, int uv_index);
+const bool *ED_mesh_uv_map_get_edge_selection(const struct Mesh *mesh, int uv_index);
+const bool *ED_mesh_uv_map_get_pin(const struct Mesh *mesh, int uv_index);
+
+ bool ED_mesh_edge_is_loose(const struct Mesh *mesh, int index);
+
void ED_mesh_uv_ensure(struct Mesh *me, const char *name);
int ED_mesh_uv_add(
struct Mesh *me, const char *name, bool active_set, bool do_init, struct ReportList *reports);
diff --cc source/blender/editors/sculpt_paint/paint_image_proj.cc
index 7cb117ab6bc,107c592a10c..60728f26e79
--- a/source/blender/editors/sculpt_paint/paint_image_proj.cc
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.cc
@@@ -514,10 -514,12 +514,11 @@@ BLI_INLINE const MPoly *ps_tri_index_to
}
#define PS_LOOPTRI_AS_VERT_INDEX_3(ps, lt) \
- ps->mloop_eval[lt->tri[0]].v, ps->mloop_eval[lt->tri[1]].v, ps->mloop_eval[lt->tri[2]].v,
+ int(ps->mloop_eval[lt->tri[0]].v), int(ps->mloop_eval[lt->tri[1]].v), \
+ int(ps->mloop_eval[lt->tri[2]].v),
#define PS_LOOPTRI_AS_UV_3(uvlayer, lt) \
- uvlayer[lt->poly][lt->tri[0]].uv, uvlayer[lt->poly][lt->tri[1]].uv, \
- uvlayer[lt->poly][lt->tri[2]].uv,
+ uvlayer[lt->poly][lt->tri[0]], uvlayer[lt->poly][lt->tri[1]], uvlayer[lt->poly][lt->tri[2]],
#define PS_LOOPTRI_ASSIGN_UV_3(uv_tri, uvlayer, lt) \
{ \
@@@ -1658,11 -1660,11 +1659,11 @@@ static float project_paint_uvpixel_mask
ImBuf *ibuf_other;
Image *other_tpage = ps->stencil_ima;
- if (other_tpage && (ibuf_other = BKE_image_acquire_ibuf(other_tpage, NULL, NULL))) {
+ if (other_tpage && (ibuf_other = BKE_image_acquire_ibuf(other_tpage, nullptr, nullptr))) {
const MLoopTri *lt_other = &ps->mlooptri_eval[tri_index];
- const float *lt_other_tri_uv[3] = {ps->mloopuv_stencil_eval[lt_other->tri[0]].uv,
- ps->mloopuv_stencil_eval[lt_other->tri[1]].uv,
- ps->mloopuv_stencil_eval[lt_other->tri[2]].uv};
+ const float *lt_other_tri_uv[3] = {ps->mloopuv_stencil_eval[lt_other->tri[0]],
+ ps->mloopuv_stencil_eval[lt_other->tri[1]],
+ ps->mloopuv_stencil_eval[lt_other->tri[2]]};
/* #BKE_image_acquire_ibuf - TODO: this may be slow. */
uchar rgba_ub[4];
@@@ -4039,8 -4050,8 +4049,8 @@@ static bool proj_paint_state_mesh_eval_
}
ps->me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, &cddata_masks);
- if (!CustomData_has_layer(&ps->me_eval->ldata, CD_MLOOPUV)) {
+ if (!CustomData_has_layer(&ps->me_eval->ldata, CD_PROP_FLOAT2)) {
- ps->me_eval = NULL;
+ ps->me_eval = nullptr;
return false;
}
@@@ -4076,7 -4088,8 +4087,7 @@@
ps->mlooptri_eval = BKE_mesh_runtime_looptri_ensure(ps->me_eval);
ps->totlooptri_eval = BKE_mesh_runtime_looptri_len(ps->me_eval);
- ps->poly_to_loop_uv = MEM_mallocN(ps->totpoly_eval * sizeof(float(*)[2]), "proj_paint_mtfaces");
- ps->poly_to_loop_uv = static_cast<const MLoopUV **>(
- MEM_mallocN(ps->totpoly_eval * sizeof(MLoopUV *), "proj_paint_mtfaces"));
++ ps->poly_to_loop_uv = static_cast<const float (**)[2]>(MEM_mallocN(ps->totpoly_eval * sizeof(float(*)[2]), "proj_paint_mtfaces"));
return true;
}
@@@ -4089,23 -4102,24 +4100,25 @@@ typedef struct
static void proj_paint_layer_clone_init(ProjPaintState *ps, ProjPaintLayerClone *layer_clone)
{
- const float(*mloopuv_clone_base)[2] = NULL;
- const MLoopUV *mloopuv_clone_base = nullptr;
++ const float(*mloopuv_clone_base)[2] = nullptr;
/* use clone mtface? */
if (ps->do_layer_clone) {
- const int layer_num = CustomData_get_clone_layer(&((Mesh *)ps->ob->data)->ldata, CD_MLOOPUV);
+ const int layer_num = CustomData_get_clone_layer(&((Mesh *)ps->ob->data)->ldata,
+ CD_PROP_FLOAT2);
- ps->poly_to_loop_uv_clone = MEM_mallocN(ps->totpoly_eval * sizeof(float(*)[2]),
- "proj_paint_mtfaces");
- ps->poly_to_loop_uv_clone = static_cast<const MLoopUV **>(
- MEM_mallocN(ps->totpoly_eval * sizeof(MLoopUV *), "proj_paint_mtfaces"));
++ ps->poly_to_loop_uv_clone = static_cast<const float(**)[2]>(
++ MEM_mallocN(ps->totpoly_eval * sizeof(float (*)[2]), "proj_paint_mtfaces"));
if (layer_num != -1) {
- mloopuv_clone_base = CustomData_get_layer_n(&ps->me_eval->ldata, CD_PROP_FLOAT2, layer_num);
- mloopuv_clone_base = static_cast<const MLoopUV *>(
- CustomData_get_layer_n(&ps->me_eval->ldata, CD_MLOOPUV, layer_num));
++ mloopuv_clone_base = static_cast<const float (*)[2](
++ CustomData_get_layer_n(&ps->me_eval->ldata, CD_PROP_FLOAT2, layer_num));
}
- if (mloopuv_clone_base == NULL) {
+ if (mloopuv_clone_base == nullptr) {
/* get active instead */
- mloopuv_clone_base = CustomData_get_layer(&ps->me_eval->ldata, CD_PROP_FLOAT2);
- mloopuv_clone_base = static_cast<const MLoopUV *>(
- CustomData_get_layer(&ps->me_eval->ldata, CD_MLOOPUV));
++ mloopuv_clone_base = static_cast<const float (*)[2]>(
++ CustomData_get_layer(&ps->me_eval->ldata, CD_PROP_FLOAT2));
}
}
@@@ -4134,9 -4148,10 +4147,10 @@@ static bool project_paint_clone_face_sk
if (ps->do_material_slots) {
if (lc->slot_clone != lc->slot_last_clone) {
if (!lc->slot_clone->uvname ||
- !(lc->mloopuv_clone_base = CustomData_get_layer_named(
- &ps->me_eval->ldata, CD_PROP_FLOAT2, lc->slot_clone->uvname))) {
- lc->mloopuv_clone_base = CustomData_get_layer(&ps->me_eval->ldata, CD_PROP_FLOAT2);
- !(lc->mloopuv_clone_base = static_cast<const MLoopUV *>(CustomData_get_layer_named(
- &ps->me_eval->ldata, CD_MLOOPUV, lc->slot_clone->uvname)))) {
- lc->mloopuv_clone_base = static_cast<const MLoopUV *>(
- CustomData_get_layer(&ps->me_eval->ldata, CD_MLOOPUV));
++ !(lc->mloopuv_clone_base = static_cast<const float (*)[2]>(CustomData_get_layer_named(
++
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list