Fix #111508: Shader node previews crash when the user deletes the common output #111604
|
@ -697,25 +697,24 @@ static void shader_preview_startjob(void *customdata,
|
||||||
job_data->tree_previews->preview_size = U.node_preview_res;
|
job_data->tree_previews->preview_size = U.node_preview_res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (bNode *node_iter : job_data->mat_copy->nodetree->all_nodes()) {
|
||||||
|
if (node_iter->flag & NODE_DO_OUTPUT) {
|
||||||
|
node_iter->flag &= ~NODE_DO_OUTPUT;
|
||||||
|
bNodeSocket *disp_socket = nodeFindSocket(node_iter, SOCK_IN, "Displacement");
|
||||||
|
if (disp_socket != nullptr && disp_socket->link != nullptr) {
|
||||||
|
job_data->mat_displacement_copy = std::make_pair(disp_socket->link->fromnode,
|
||||||
|
disp_socket->link->fromsock);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Add a new output node used only for the previews. This is useful to keep the previously
|
/* Add a new output node used only for the previews. This is useful to keep the previously
|
||||||
* connected links (for previewing the output nodes for example). */
|
* connected links (for previewing the output nodes for example). */
|
||||||
job_data->mat_output_copy = nodeAddStaticNode(
|
job_data->mat_output_copy = nodeAddStaticNode(
|
||||||
nullptr, job_data->mat_copy->nodetree, SH_NODE_OUTPUT_MATERIAL);
|
nullptr, job_data->mat_copy->nodetree, SH_NODE_OUTPUT_MATERIAL);
|
||||||
bNode *active_user_output_node = nullptr;
|
|
||||||
for (bNode *node_iter : job_data->mat_copy->nodetree->all_nodes()) {
|
|
||||||
if (node_iter->flag & NODE_DO_OUTPUT) {
|
|
||||||
node_iter->flag &= ~NODE_DO_OUTPUT;
|
|
||||||
active_user_output_node = node_iter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
job_data->mat_output_copy->flag |= NODE_DO_OUTPUT;
|
job_data->mat_output_copy->flag |= NODE_DO_OUTPUT;
|
||||||
|
|
||||||
bNodeSocket *disp_socket = nodeFindSocket(active_user_output_node, SOCK_IN, "Displacement");
|
|
||||||
if (disp_socket != nullptr && disp_socket->link != nullptr) {
|
|
||||||
job_data->mat_displacement_copy = std::make_pair(disp_socket->link->fromnode,
|
|
||||||
disp_socket->link->fromsock);
|
|
||||||
}
|
|
||||||
|
|
||||||
bNodeTree *active_nodetree = job_data->treepath_copy.last()->nodetree;
|
bNodeTree *active_nodetree = job_data->treepath_copy.last()->nodetree;
|
||||||
for (bNode *node : active_nodetree->all_nodes()) {
|
for (bNode *node : active_nodetree->all_nodes()) {
|
||||||
if (!(node->flag & NODE_PREVIEW)) {
|
if (!(node->flag & NODE_PREVIEW)) {
|
||||||
|
|
Loading…
Reference in New Issue