Return the NodeDef associated with a legacy ShaderRef element.
| 12 | |
| 13 | // Return the NodeDef associated with a legacy ShaderRef element. |
| 14 | NodeDefPtr getShaderNodeDef(ElementPtr shaderRef) |
| 15 | { |
| 16 | if (shaderRef->hasAttribute(NodeDef::NODE_DEF_ATTRIBUTE)) |
| 17 | { |
| 18 | string nodeDefString = shaderRef->getAttribute(NodeDef::NODE_DEF_ATTRIBUTE); |
| 19 | ConstDocumentPtr doc = shaderRef->getDocument(); |
| 20 | NodeDefPtr child = doc->getNodeDef(shaderRef->getQualifiedName(nodeDefString)); |
| 21 | return child ? child : doc->getNodeDef(nodeDefString); |
| 22 | } |
| 23 | if (shaderRef->hasAttribute(NodeDef::NODE_ATTRIBUTE)) |
| 24 | { |
| 25 | string nodeString = shaderRef->getAttribute(NodeDef::NODE_ATTRIBUTE); |
| 26 | string type = shaderRef->getAttribute(TypedElement::TYPE_ATTRIBUTE); |
| 27 | string target = shaderRef->getAttribute(InterfaceElement::TARGET_ATTRIBUTE); |
| 28 | string version = shaderRef->getAttribute(InterfaceElement::VERSION_ATTRIBUTE); |
| 29 | vector<NodeDefPtr> nodeDefs = shaderRef->getDocument()->getMatchingNodeDefs(shaderRef->getQualifiedName(nodeString)); |
| 30 | vector<NodeDefPtr> secondary = shaderRef->getDocument()->getMatchingNodeDefs(nodeString); |
| 31 | nodeDefs.insert(nodeDefs.end(), secondary.begin(), secondary.end()); |
| 32 | for (NodeDefPtr nodeDef : nodeDefs) |
| 33 | { |
| 34 | if (targetStringsMatch(nodeDef->getTarget(), target) && |
| 35 | nodeDef->isVersionCompatible(version) && |
| 36 | (type.empty() || nodeDef->getType() == type)) |
| 37 | { |
| 38 | return nodeDef; |
| 39 | } |
| 40 | } |
| 41 | } |
| 42 | return NodeDefPtr(); |
| 43 | } |
| 44 | |
| 45 | // Copy an input between nodes, maintaining all existing bindings. |
| 46 | void copyInputWithBindings(NodePtr sourceNode, const string& sourceInputName, |
no test coverage detected