From 4892a132bc151fc06c0112a8194618b7a4ba34c6 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Fri, 17 Mar 2023 08:03:55 +0100 Subject: [PATCH 1/2] Python: Unable to use `gpu.state.scissor_test_set`. `scissor_test_set` wasn't able to parse the arguments that were passed correctly, due to incorrect control data during functino registration. This patch uses the correct control data during registration and is able to parse arguments. Ref: #104911 Pull Request: https://projects.blender.org/blender/blender/pulls/105850 --- source/blender/python/gpu/gpu_py_state.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/python/gpu/gpu_py_state.c b/source/blender/python/gpu/gpu_py_state.c index 870a83eb9a8..2db477bfa9b 100644 --- a/source/blender/python/gpu/gpu_py_state.c +++ b/source/blender/python/gpu/gpu_py_state.c @@ -470,7 +470,7 @@ static struct PyMethodDef pygpu_state__tp_methods[] = { pygpu_state_scissor_get_doc}, {"scissor_test_set", (PyCFunction)pygpu_state_scissor_test_set, - METH_VARARGS, + METH_O, pygpu_state_scissor_test_set_doc}, {"line_width_set", (PyCFunction)pygpu_state_line_width_set, From aca3039740e55a9f67b177c93aea60040c17733a Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Fri, 17 Mar 2023 09:41:52 +0100 Subject: [PATCH 2/2] 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. This patch suppresses the usage of anonymous layers for rendering. Pull Request: https://projects.blender.org/blender/blender/pulls/105192 --- source/blender/blenkernel/BKE_customdata.h | 2 ++ 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, 14 insertions(+), 3 deletions(-) diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h index 9cddc39f43c..4a1925c0fad 100644 --- a/source/blender/blenkernel/BKE_customdata.h +++ b/source/blender/blenkernel/BKE_customdata.h @@ -474,6 +474,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, diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc index 7b9b0348dfb..2d605439606 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 = CustomData_get_layer_index_n(data, type, n); + + BLI_assert(layer_index >= 0); + + return data->layers[layer_index].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); } }