Fix #82483: Random Cycles baking hangs with node editor open
CTX_data_ensure_evaluated_depsgraph should not be used in drawing code. This triggered a depsgraph updated which in turn called DRW_notify_view_update. This would bind the GPU context a second time and hang due to recursive mutex calls.
This commit is contained in:
@@ -40,14 +40,16 @@ static void node_shader_buts_normal_map(uiLayout *layout, bContext *C, PointerRN
|
||||
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
|
||||
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_GROUP_UVS);
|
||||
}
|
||||
else {
|
||||
uiItemR(layout, ptr, "uv_map", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
|
||||
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");
|
||||
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
uiItemR(layout, ptr, "uv_map", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,14 +31,16 @@ static void node_shader_buts_tangent(uiLayout *layout, bContext *C, PointerRNA *
|
||||
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
|
||||
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_GROUP_UVS);
|
||||
}
|
||||
else {
|
||||
uiItemR(layout, ptr, "uv_map", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_GROUP_UVS);
|
||||
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");
|
||||
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
uiItemR(layout, ptr, "uv_map", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_GROUP_UVS);
|
||||
}
|
||||
else {
|
||||
uiItemR(
|
||||
|
||||
@@ -33,11 +33,17 @@ static void node_shader_buts_uvmap(uiLayout *layout, bContext *C, PointerRNA *pt
|
||||
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
|
||||
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_GROUP_UVS);
|
||||
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");
|
||||
uiItemPointerR(layout, ptr, "uv_map", &dataptr, "uv_layers", "", ICON_GROUP_UVS);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
uiItemR(layout, ptr, "uv_map", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_GROUP_UVS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,14 +28,16 @@ static void node_shader_buts_vertex_color(uiLayout *layout, bContext *C, Pointer
|
||||
if (obptr.data && RNA_enum_get(&obptr, "type") == OB_MESH) {
|
||||
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 {
|
||||
uiItemL(layout, RPT_("No mesh in active object"), ICON_ERROR);
|
||||
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");
|
||||
uiItemPointerR(layout, ptr, "layer_name", &dataptr, "color_attributes", "", ICON_GROUP_VCOL);
|
||||
}
|
||||
}
|
||||
|
||||
uiItemR(layout, ptr, "layer_name", UI_ITEM_R_SPLIT_EMPTY_NAME, nullptr, ICON_GROUP_VCOL);
|
||||
uiItemL(layout, RPT_("No mesh in active object"), ICON_ERROR);
|
||||
}
|
||||
|
||||
static void node_shader_init_vertex_color(bNodeTree * /*ntree*/, bNode *node)
|
||||
|
||||
Reference in New Issue
Block a user