void ShaderOptions::fromConfig(const Config& conf) { _code = conf.value(); _samplers.clear(); ConfigSet s = conf.children("sampler"); for (ConfigSet::const_iterator i = s.begin(); i != s.end(); ++i) { _samplers.push_back(Sampler()); _samplers.back()._name = i->value("name"); const Config* urlarray = i->find("array"); if (urlarray) { ConfigSet uris = urlarray->children("url"); for (ConfigSet::const_iterator j = uris.begin(); j != uris.end(); ++j) { URI uri(j->value(), URIContext(conf.referrer())); _samplers.back()._uris.push_back(uri); } } else { optional<URI> uri; i->get("url", uri); if (uri.isSet()) _samplers.back()._uris.push_back(uri.get()); } } s = conf.children("uniform"); for (ConfigSet::const_iterator i = s.begin(); i != s.end(); ++i) { _uniforms.push_back(Uniform()); _uniforms.back()._name = i->value("name"); i->get("value", _uniforms.back()._value); } }
const Config* Config::find( const std::string& key, bool checkMe ) const { if ( checkMe && key == this->key() ) return this; for( ConfigSet::const_iterator c = _children.begin(); c != _children.end(); ++c ) if ( key == c->key() ) return &(*c); for( ConfigSet::const_iterator c = _children.begin(); c != _children.end(); ++c ) { const Config* r = c->find(key, false); if ( r ) return r; } return 0L; }