Fix: Shader node editor UI causes CPU subdivision to be used

Don't access Object.data through the RNA API.
This commit is contained in:
Brecht Van Lommel
2025-03-23 15:58:40 +01:00
parent f506564a47
commit 0991ca7169
4 changed files with 19 additions and 19 deletions

View File

@@ -38,14 +38,14 @@ static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, PointerRN
if (RNA_enum_get(ptr, "space") == SHD_SPACE_TANGENT) {
PointerRNA obptr = CTX_data_pointer_get(C, "active_object");
Object *object = static_cast<Object *>(obptr.data);
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA eval_obptr;
if (object && object->type == OB_MESH) {
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
if (depsgraph) {
DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr);
PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data");
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
return;
}

View File

@@ -27,14 +27,14 @@ static void node_shader_buts_tangent(uiLayout *layout, bContext *C, PointerRNA *
if (RNA_enum_get(ptr, "direction_type") == SHD_TANGENT_UVMAP) {
PointerRNA obptr = CTX_data_pointer_get(C, "active_object");
Object *object = static_cast<Object *>(obptr.data);
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA eval_obptr;
if (object && object->type == OB_MESH) {
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
if (depsgraph) {
DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr);
PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data");
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
return;
}

View File

@@ -29,15 +29,14 @@ static void node_shader_buts_uvmap(uiLayout *layout, bContext *C, PointerRNA *pt
if (!RNA_boolean_get(ptr, "from_instancer")) {
PointerRNA obptr = CTX_data_pointer_get(C, "active_object");
Object *object = static_cast<Object *>(obptr.data);
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA eval_obptr;
if (object && object->type == OB_MESH) {
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
if (depsgraph) {
DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr);
PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data");
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
return;
}

View File

@@ -25,13 +25,14 @@ static void node_declare(NodeDeclarationBuilder &b)
static void node_shader_buts_vertex_color(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
PointerRNA obptr = CTX_data_pointer_get(C, "active_object");
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
PointerRNA eval_obptr;
Object *object = static_cast<Object *>(obptr.data);
if (object && object->type == OB_MESH) {
Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
if (depsgraph) {
DEG_get_evaluated_rna_pointer(depsgraph, &obptr, &eval_obptr);
PointerRNA dataptr = RNA_pointer_get(&eval_obptr, "data");
Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
PointerRNA dataptr = RNA_id_pointer_create(static_cast<ID *>(object_eval->data));
uiItemPointerR(layout, ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL);
return;
}