Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaia Clary <gaia.clary@machinimatrix.org>2019-06-11 14:56:31 +0300
committerGaia Clary <gaia.clary@machinimatrix.org>2019-06-11 14:56:43 +0300
commit4419dd3bfd00906f9f0f174f083d3490c27b01f8 (patch)
tree0fdf15724193bc6f392a4cb5061c0a3a04d0be5e /source/blender/collada
parent43d35726555575d3fd31ba0912eea886308676db (diff)
fix T65576 collada exporter duplicates node tree when exported material already uses nodes
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/Materials.cpp25
1 files changed, 16 insertions, 9 deletions
diff --git a/source/blender/collada/Materials.cpp b/source/blender/collada/Materials.cpp
index 5b60eadef3d..aa35b71b9db 100644
--- a/source/blender/collada/Materials.cpp
+++ b/source/blender/collada/Materials.cpp
@@ -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)