fix T65576 collada exporter duplicates node tree when exported material already uses nodes

This commit is contained in:
Gaia Clary 2019-06-11 13:56:31 +02:00
parent 43d3572655
commit 4419dd3bfd
Notes: blender-bot 2023-02-14 05:41:57 +01:00
Referenced by issue #65576, Blender 2.80 collada (dae) error
1 changed files with 16 additions and 9 deletions

View File

@ -19,11 +19,13 @@
MaterialNode::MaterialNode(bContext *C, Material *ma, KeyImageMap &key_image_map)
: mContext(C), material(ma), effect(nullptr), key_image_map(&key_image_map)
{
ntree = prepare_material_nodetree();
bNodeTree *new_ntree = prepare_material_nodetree();
setShaderType();
shader_node = add_node(SH_NODE_BSDF_PRINCIPLED, 0, 300, "");
output_node = add_node(SH_NODE_OUTPUT_MATERIAL, 300, 300, "");
add_link(shader_node, 0, output_node, 0);
if (new_ntree) {
shader_node = add_node(SH_NODE_BSDF_PRINCIPLED, 0, 300, "");
output_node = add_node(SH_NODE_OUTPUT_MATERIAL, 300, 300, "");
add_link(shader_node, 0, output_node, 0);
}
}
MaterialNode::MaterialNode(bContext *C,
@ -32,7 +34,7 @@ MaterialNode::MaterialNode(bContext *C,
UidImageMap &uid_image_map)
: mContext(C), material(ma), effect(ef), uid_image_map(&uid_image_map)
{
ntree = prepare_material_nodetree();
prepare_material_nodetree();
setShaderType();
std::map<std::string, bNode *> nmap;
@ -89,13 +91,18 @@ void MaterialNode::setShaderType()
#endif
}
// returns null if material already has a node tree
bNodeTree *MaterialNode::prepare_material_nodetree()
{
if (material->nodetree == NULL) {
material->nodetree = ntreeAddTree(NULL, "Shader Nodetree", "ShaderNodeTree");
material->use_nodes = true;
if (material->nodetree) {
ntree = material->nodetree;
return NULL;
}
return material->nodetree;
material->nodetree = ntreeAddTree(NULL, "Shader Nodetree", "ShaderNodeTree");
material->use_nodes = true;
ntree = material->nodetree;
return ntree;
}
bNode *MaterialNode::add_node(int node_type, int locx, int locy, std::string label)