From a42f307915e49500ca7c2e18e2092dcef85f7f6e Mon Sep 17 00:00:00 2001 From: Martijn Versteegh Date: Mon, 23 Jan 2023 19:59:46 +0100 Subject: [PATCH] Shader Nodes: Use layers from evaluated mesh The list was populated from the base (unevaluated) object, but now that Geometry nodes can generate various layers this is impractical.. Differential Revision: https://developer.blender.org/D17093 --- .../blender/nodes/shader/nodes/node_shader_normal_map.cc | 8 +++++++- source/blender/nodes/shader/nodes/node_shader_tangent.cc | 8 +++++++- source/blender/nodes/shader/nodes/node_shader_uvmap.cc | 8 +++++++- .../nodes/shader/nodes/node_shader_vertex_color.cc | 7 ++++++- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/source/blender/nodes/shader/nodes/node_shader_normal_map.cc b/source/blender/nodes/shader/nodes/node_shader_normal_map.cc index 0bc1318a1f6..a29faff2093 100644 --- a/source/blender/nodes/shader/nodes/node_shader_normal_map.cc +++ b/source/blender/nodes/shader/nodes/node_shader_normal_map.cc @@ -6,6 +6,8 @@ #include "BKE_context.h" #include "BKE_node_runtime.hh" +#include "DEG_depsgraph_query.h" + #include "UI_interface.h" #include "UI_resources.h" @@ -26,7 +28,11 @@ static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, PointerRN PointerRNA obptr = CTX_data_pointer_get(C, "active_object"); if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) { - PointerRNA dataptr = RNA_pointer_get(&obptr, "data"); + PointerRNA eval_obptr; + + Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr); + PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data"); uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_NONE); } else { diff --git a/source/blender/nodes/shader/nodes/node_shader_tangent.cc b/source/blender/nodes/shader/nodes/node_shader_tangent.cc index 9b09eb09bba..cb0c3f34e40 100644 --- a/source/blender/nodes/shader/nodes/node_shader_tangent.cc +++ b/source/blender/nodes/shader/nodes/node_shader_tangent.cc @@ -5,6 +5,8 @@ #include "BKE_context.h" +#include "DEG_depsgraph_query.h" + #include "UI_interface.h" #include "UI_resources.h" @@ -29,7 +31,11 @@ static void node_shader_buts_tangent(uiLayout *layout, bContext *C, PointerRNA * PointerRNA obptr = CTX_data_pointer_get(C, "active_object"); if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) { - PointerRNA dataptr = RNA_pointer_get(&obptr, "data"); + PointerRNA eval_obptr; + + Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr); + PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data"); uiItemPointerR(row, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_NONE); } else { diff --git a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc index 483e06f1192..de8221e3e97 100644 --- a/source/blender/nodes/shader/nodes/node_shader_uvmap.cc +++ b/source/blender/nodes/shader/nodes/node_shader_uvmap.cc @@ -7,6 +7,8 @@ #include "DNA_customdata_types.h" +#include "DEG_depsgraph_query.h" + #include "UI_interface.h" #include "UI_resources.h" @@ -25,7 +27,11 @@ static void node_shader_buts_uvmap(uiLayout *layout, bContext *C, PointerRNA *pt PointerRNA obptr = CTX_data_pointer_get(C, "active_object"); if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) { - PointerRNA dataptr = RNA_pointer_get(&obptr, "data"); + PointerRNA eval_obptr; + + Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr); + PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data"); uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_NONE); } } diff --git a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc index 8f7e30b99df..0e0f9496851 100644 --- a/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc +++ b/source/blender/nodes/shader/nodes/node_shader_vertex_color.cc @@ -5,6 +5,8 @@ #include "BKE_context.h" +#include "DEG_depsgraph_query.h" + #include "UI_interface.h" #include "UI_resources.h" @@ -20,8 +22,11 @@ static void node_shader_buts_vertex_color(uiLayout *layout, bContext *C, Pointer { PointerRNA obptr = CTX_data_pointer_get(C, "active_object"); if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) { - PointerRNA dataptr = RNA_pointer_get(&obptr, "data"); + PointerRNA eval_obptr; + Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); + DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr); + PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data"); uiItemPointerR(layout, ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL); } else {