From f70ec0aa02f16fbcf328ad8d85958c9364d75354 Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Fri, 24 Feb 2023 20:15:31 +0100 Subject: [PATCH 1/3] Fix 104730: Suppress using anonymous UV layers for rendering. When an object has no UV layers and an anonymous UV layer is created, the anonymous layer gets set as the default (render) layer. This is very confusing because it then uses a hidden anonmous layer for rendering. This patch suppresses the usage of anonymous layers for rendering. --- source/blender/blenkernel/BKE_customdata.h | 4 ++++ source/blender/blenkernel/intern/customdata.cc | 9 +++++++++ source/blender/draw/intern/draw_cache_impl_mesh.cc | 2 +- .../extract_mesh_vbo_edituv_stretch_angle.cc | 2 +- .../draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc | 2 +- 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 297cd3c2433..aa03d26c2c5 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -475,6 +475,8 @@ const char *CustomData_get_active_layer_name(const struct CustomData *data, int */ const char *CustomData_get_render_layer_name(const struct CustomData *data, int type); +bool CustomData_layer_is_anonymous(const struct CustomData *data, int type, int n); + void CustomData_bmesh_set(const struct CustomData *data, void *block, int type, @@ -506,6 +508,8 @@ void CustomData_set_layer_stencil_index(struct CustomData *data, int type, int n void CustomData_set_layer_flag(struct CustomData *data, int type, int flag); void CustomData_clear_layer_flag(struct CustomData *data, int type, int flag); + + void CustomData_bmesh_set_default(struct CustomData *data, void **block); void CustomData_bmesh_free_block(struct CustomData *data, void **block); void CustomData_bmesh_alloc_block(struct CustomData *data, void **block); diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 2da8cb8aeca..c3a44bcf659 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -2686,6 +2686,15 @@ void CustomData_clear_layer_flag(CustomData *data, const int type, const int fla } } +bool CustomData_layer_is_anonymous(const struct CustomData *data, int type, int n) +{ + const int layer_index = data->typemap[type]; + BLI_assert(customdata_typemap_is_valid(data)); + BLI_assert(data->layers[layer_index + n].type == type); + + return data->layers[layer_index + n].anonymous_id != nullptr; +} + static bool customData_resize(CustomData *data, const int amount) { CustomDataLayer *tmp = static_cast( diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.cc b/source/blender/draw/intern/draw_cache_impl_mesh.cc index f8077882c12..28d45782d65 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.cc +++ b/source/blender/draw/intern/draw_cache_impl_mesh.cc @@ -358,7 +358,7 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Object *object, CustomData_get_named_layer(cd_ldata, CD_PROP_FLOAT2, name) : CustomData_get_render_layer(cd_ldata, CD_PROP_FLOAT2); } - if (layer != -1) { + if (layer != -1 && !CustomData_layer_is_anonymous(cd_ldata, CD_PROP_FLOAT2, layer)) { cd_used.uv |= (1 << layer); } break; diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc index 174223221fa..225855875ee 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_stretch_angle.cc @@ -248,7 +248,7 @@ static void extract_edituv_stretch_angle_init_subdiv(const DRWSubdivCache *subdi /* HACK to fix #68857 */ if (mr->extract_type == MR_EXTRACT_BMESH && cache->cd_used.edit_uv == 1) { int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); - if (layer != -1) { + if (layer != -1 && !CustomData_layer_is_anonymous(cd_ldata, CD_PROP_FLOAT2, layer)) { uv_layers |= (1 << layer); } } diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc index bc73c59f556..b92d367ac0e 100644 --- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc +++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_uv.cc @@ -31,7 +31,7 @@ static bool mesh_extract_uv_format_init(GPUVertFormat *format, /* HACK to fix #68857 */ if (extract_type == MR_EXTRACT_BMESH && cache->cd_used.edit_uv == 1) { int layer = CustomData_get_active_layer(cd_ldata, CD_PROP_FLOAT2); - if (layer != -1) { + if (layer != -1 && !CustomData_layer_is_anonymous(cd_ldata, CD_PROP_FLOAT2, layer)) { uv_layers |= (1 << layer); } } -- 2.30.2 From 1132ab485156ee28a268aed3212bd3ab200c53ea Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Tue, 14 Mar 2023 16:52:50 +0100 Subject: [PATCH 2/3] Implement CustomData_layer_is_anonymous() usin CustomData_get_layer_index_n() --- source/blender/blenkernel/intern/customdata.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 6fafe6a0876..7536faaa442 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -2688,11 +2688,11 @@ void CustomData_clear_layer_flag(CustomData *data, const int type, const int fla bool CustomData_layer_is_anonymous(const struct CustomData *data, int type, int n) { - const int layer_index = data->typemap[type]; - BLI_assert(customdata_typemap_is_valid(data)); - BLI_assert(data->layers[layer_index + n].type == type); + const int layer_index = CustomData_get_layer_index_n(data, type, n); - return data->layers[layer_index + n].anonymous_id != nullptr; + BLI_assert(layer_index >=0); + + return data->layers[layer_index].anonymous_id != nullptr; } static bool customData_resize(CustomData *data, const int amount) -- 2.30.2 From 9a9d581706c81c52b550c883345344b12eb61fe5 Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Tue, 14 Mar 2023 16:57:23 +0100 Subject: [PATCH 3/3] Cleanup:Make format --- source/blender/blenkernel/BKE_customdata.h | 2 -- source/blender/blenkernel/intern/customdata.cc | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 2e77422939c..ddfe0f9c158 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -519,8 +519,6 @@ void CustomData_set_layer_stencil_index(struct CustomData *data, int type, int n void CustomData_set_layer_flag(struct CustomData *data, int type, int flag); void CustomData_clear_layer_flag(struct CustomData *data, int type, int flag); - - void CustomData_bmesh_set_default(struct CustomData *data, void **block); void CustomData_bmesh_free_block(struct CustomData *data, void **block); void CustomData_bmesh_alloc_block(struct CustomData *data, void **block); diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 7536faaa442..d270b04bf50 100644 --- a/source/blender/blenkernel/intern/customdata.cc +++ b/source/blender/blenkernel/intern/customdata.cc @@ -2690,7 +2690,7 @@ bool CustomData_layer_is_anonymous(const struct CustomData *data, int type, int { const int layer_index = CustomData_get_layer_index_n(data, type, n); - BLI_assert(layer_index >=0); + BLI_assert(layer_index >= 0); return data->layers[layer_index].anonymous_id != nullptr; } -- 2.30.2