2 # include <simgear_config.h>
5 #include <simgear/scene/util/SGReaderWriterOptions.hxx>
6 #include <simgear/scene/tgdb/userdata.hxx>
8 #include "EffectBuilder.hxx"
14 // Given a property node from a pass, get its value either from it or
15 // from the effect parameters.
16 const SGPropertyNode* getEffectPropertyNode(Effect* effect,
17 const SGPropertyNode* prop)
21 if (prop->nChildren() > 0) {
22 const SGPropertyNode* useProp = prop->getChild("use");
23 if (!useProp || !effect->parametersProp)
25 return effect->parametersProp->getNode(useProp->getStringValue());
30 // Get a named child property from pass parameters or effect
32 const SGPropertyNode* getEffectPropertyChild(Effect* effect,
33 const SGPropertyNode* prop,
36 const SGPropertyNode* child = prop->getChild(name);
40 return getEffectPropertyNode(effect, child);
43 string getGlobalProperty(const SGPropertyNode* prop,
44 const SGReaderWriterOptions* options)
48 const SGPropertyNode* useProp = prop->getChild("use");
51 string propName = useProp->getStringValue();
52 SGPropertyNode_ptr propRoot;
53 if (propName[0] == '/') {
55 } else if ((propRoot = options->getPropertyNode())) {
56 string result = propRoot->getPath();
58 result.append(propName);
62 BuilderException("No property root to use with relative name "
66 return useProp->getStringValue();
71 BuilderException::BuilderException()
75 BuilderException::BuilderException(const char* message, const char* origin)
76 : sg_exception(message, origin)
80 BuilderException::BuilderException(const std::string& message,
81 const std::string& origin)
82 : sg_exception(message, origin)
86 BuilderException::~BuilderException() throw()
92 bool isAttributeActive(Effect* effect, const SGPropertyNode* prop)
94 const SGPropertyNode* activeProp
95 = getEffectPropertyChild(effect, prop, "active");
96 return !activeProp || activeProp->getValue<bool>();
101 const char* colorFields[] = {"red", "green", "blue", "alpha"};
104 PassAttributeBuilder::~PassAttributeBuilder()
108 } // of namespace simgear