#include <string>
#include <cstring>
+#include <osg/Object>
#include <osgDB/Registry>
#include <boost/bind.hpp>
template<typename FromType,typename ToType>
struct bidirectional_map
{
+#if _MSC_VER >= 1600
+ struct value_type {
+ FromType first;
+ ToType second;
+ value_type(FromType f, ToType s) : first(f),second(s){}
+ };
+#else
typedef std::pair<FromType,ToType> value_type;
+#endif
/* A bidirectional map can be simulated as a multi_index_container
* of pairs of (FromType,ToType) with two unique indices, one
* for each member of the pair.
*/
-
typedef multi_index_container<
value_type,
indexed_by<
if (parentName[parentName.size() - 1] != '/')
parentName.append("/");
NameItr itr = defaultNames;
- for (int i = 0; i < vecSize; ++i, ++itr)
+ for (size_t i = 0; i < vecSize; ++i, ++itr)
result.push_back(parentName + *itr);
} else if (useProps.size() == vecSize) {
string parentName = useProps[0]->getStringValue();
(func, 0, namesBegin, namesEnd);
}
+/**
+ * Set DYNAMIC data variance on an osg::Object.
+ */
+
+inline void setDynamicVariance(void* obj)
+{
+}
+
+inline void setDynamicVariance(osg::Object* obj)
+{
+ obj->setDataVariance(osg::Object::DYNAMIC);
+}
+
/**
* Initialize the value and the possible updating of an effect
* attribute. If the value is specified directly, set it. Otherwise,
const SGPropertyNode* valProp = getEffectPropertyNode(effect, prop);
if (!valProp)
return;
+ setDynamicVariance(obj);
if (valProp->nChildren() == 0) {
setter(obj, valProp->getValue<OSGParamType>());
} else {
- std::string propName = getGlobalProperty(prop, options);
+ std::string propName = getGlobalProperty(valProp, options);
ScalarChangeListener<OSGParamType, ObjType, F>* listener
= new ScalarChangeListener<OSGParamType, ObjType, F>(obj, setter,
propName);
const SGPropertyNode* valProp = getEffectPropertyNode(effect, prop);
if (!valProp)
return;
+ setDynamicVariance(obj);
if (valProp->nChildren() == 0) { // Has <use>?
setter(obj, Bridge<OSGParamType>::get(valProp->getValue<sg_type>()));
} else {