Added next stage of support for osg::Uniform in .osg plugin
This commit is contained in:
parent
0a995f8093
commit
648677ce44
@ -47,6 +47,7 @@ class OSGDB_EXPORT Input : public FieldReaderIterator
|
|||||||
virtual osg::Image* readImage();
|
virtual osg::Image* readImage();
|
||||||
virtual osg::Drawable* readDrawable();
|
virtual osg::Drawable* readDrawable();
|
||||||
virtual osg::StateAttribute* readStateAttribute();
|
virtual osg::StateAttribute* readStateAttribute();
|
||||||
|
virtual osg::Uniform* readUniform();
|
||||||
virtual osg::Node* readNode();
|
virtual osg::Node* readNode();
|
||||||
|
|
||||||
virtual osg::Object* readObject(const std::string& fileName);
|
virtual osg::Object* readObject(const std::string& fileName);
|
||||||
|
@ -111,6 +111,7 @@ class OSGDB_EXPORT Registry : public osg::Referenced
|
|||||||
osg::Object* readObject(Input& fr);
|
osg::Object* readObject(Input& fr);
|
||||||
osg::Image* readImage(Input& fr);
|
osg::Image* readImage(Input& fr);
|
||||||
osg::Drawable* readDrawable(Input& fr);
|
osg::Drawable* readDrawable(Input& fr);
|
||||||
|
osg::Uniform* readUniform(Input& fr);
|
||||||
osg::StateAttribute* readStateAttribute(Input& fr);
|
osg::StateAttribute* readStateAttribute(Input& fr);
|
||||||
osg::Node* readNode(Input& fr);
|
osg::Node* readNode(Input& fr);
|
||||||
|
|
||||||
@ -449,6 +450,7 @@ class OSGDB_EXPORT Registry : public osg::Referenced
|
|||||||
DotOsgWrapperMap _imageWrapperMap;
|
DotOsgWrapperMap _imageWrapperMap;
|
||||||
DotOsgWrapperMap _drawableWrapperMap;
|
DotOsgWrapperMap _drawableWrapperMap;
|
||||||
DotOsgWrapperMap _stateAttrWrapperMap;
|
DotOsgWrapperMap _stateAttrWrapperMap;
|
||||||
|
DotOsgWrapperMap _uniformWrapperMap;
|
||||||
DotOsgWrapperMap _nodeWrapperMap;
|
DotOsgWrapperMap _nodeWrapperMap;
|
||||||
|
|
||||||
DotOsgWrapperMap _classNameWrapperMap;
|
DotOsgWrapperMap _classNameWrapperMap;
|
||||||
|
@ -72,6 +72,10 @@ osg::StateAttribute* Input::readStateAttribute()
|
|||||||
{
|
{
|
||||||
return Registry::instance()->readStateAttribute(*this);
|
return Registry::instance()->readStateAttribute(*this);
|
||||||
}
|
}
|
||||||
|
osg::Uniform* Input::readUniform()
|
||||||
|
{
|
||||||
|
return Registry::instance()->readUniform(*this);
|
||||||
|
}
|
||||||
|
|
||||||
osg::Node* Input::readNode()
|
osg::Node* Input::readNode()
|
||||||
{
|
{
|
||||||
|
@ -479,6 +479,11 @@ void Registry::addDotOsgWrapper(DotOsgWrapper* wrapper)
|
|||||||
_stateAttrWrapperMap[name] = wrapper;
|
_stateAttrWrapperMap[name] = wrapper;
|
||||||
_stateAttrWrapperMap[compositeName] = wrapper;
|
_stateAttrWrapperMap[compositeName] = wrapper;
|
||||||
}
|
}
|
||||||
|
if (dynamic_cast<const Uniform*>(proto))
|
||||||
|
{
|
||||||
|
_uniformWrapperMap[name] = wrapper;
|
||||||
|
_uniformWrapperMap[compositeName] = wrapper;
|
||||||
|
}
|
||||||
if (dynamic_cast<const Node*>(proto))
|
if (dynamic_cast<const Node*>(proto))
|
||||||
{
|
{
|
||||||
_nodeWrapperMap[name] = wrapper;
|
_nodeWrapperMap[name] = wrapper;
|
||||||
@ -518,6 +523,7 @@ void Registry::removeDotOsgWrapper(DotOsgWrapper* wrapper)
|
|||||||
eraseWrapper(_classNameWrapperMap,wrapper);
|
eraseWrapper(_classNameWrapperMap,wrapper);
|
||||||
eraseWrapper(_imageWrapperMap,wrapper);
|
eraseWrapper(_imageWrapperMap,wrapper);
|
||||||
eraseWrapper(_drawableWrapperMap,wrapper);
|
eraseWrapper(_drawableWrapperMap,wrapper);
|
||||||
|
eraseWrapper(_uniformWrapperMap,wrapper);
|
||||||
eraseWrapper(_stateAttrWrapperMap,wrapper);
|
eraseWrapper(_stateAttrWrapperMap,wrapper);
|
||||||
eraseWrapper(_nodeWrapperMap,wrapper);
|
eraseWrapper(_nodeWrapperMap,wrapper);
|
||||||
}
|
}
|
||||||
@ -1075,6 +1081,27 @@ StateAttribute* Registry::readStateAttribute(Input& fr)
|
|||||||
return dynamic_cast<StateAttribute*>(readObject(_stateAttrWrapperMap,fr));
|
return dynamic_cast<StateAttribute*>(readObject(_stateAttrWrapperMap,fr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// read drawable from input iterator.
|
||||||
|
//
|
||||||
|
Uniform* Registry::readUniform(Input& fr)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (fr[0].matchWord("Use"))
|
||||||
|
{
|
||||||
|
if (fr[1].isString())
|
||||||
|
{
|
||||||
|
Uniform* attribute = dynamic_cast<Uniform*>(fr.getObjectForUniqueID(fr[1].getStr()));
|
||||||
|
if (attribute) fr+=2;
|
||||||
|
return attribute;
|
||||||
|
}
|
||||||
|
else return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return dynamic_cast<Uniform*>(readObject(_uniformWrapperMap,fr));
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// read node from input iterator.
|
// read node from input iterator.
|
||||||
//
|
//
|
||||||
|
@ -385,6 +385,13 @@ bool StateSet_readLocalData(Object& obj, Input& fr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new code using osg::Registry's list of prototypes to loaded attributes.
|
||||||
|
Uniform* uniform = NULL;
|
||||||
|
while((uniform=fr.readUniform())!=NULL)
|
||||||
|
{
|
||||||
|
stateset.addUniform(uniform);
|
||||||
|
iteratorAdvanced = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// new code using osg::Registry's list of prototypes to loaded attributes.
|
// new code using osg::Registry's list of prototypes to loaded attributes.
|
||||||
@ -515,8 +522,6 @@ bool StateSet_writeLocalData(const Object& obj, Output& fw)
|
|||||||
|
|
||||||
|
|
||||||
const StateSet::ModeList& ml = stateset.getModeList();
|
const StateSet::ModeList& ml = stateset.getModeList();
|
||||||
const StateSet::AttributeList& sl = stateset.getAttributeList();
|
|
||||||
|
|
||||||
for(StateSet::ModeList::const_iterator mitr=ml.begin();
|
for(StateSet::ModeList::const_iterator mitr=ml.begin();
|
||||||
mitr!=ml.end();
|
mitr!=ml.end();
|
||||||
++mitr)
|
++mitr)
|
||||||
@ -533,12 +538,22 @@ bool StateSet_writeLocalData(const Object& obj, Output& fw)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const StateSet::UniformList& ul = stateset.getUniformList();
|
||||||
|
for(StateSet::UniformList::const_iterator uitr=ul.begin();
|
||||||
|
uitr!=ul.end();
|
||||||
|
++uitr)
|
||||||
|
{
|
||||||
|
fw.writeObject(*(uitr->second.first));
|
||||||
|
}
|
||||||
|
|
||||||
|
const StateSet::AttributeList& sl = stateset.getAttributeList();
|
||||||
for(StateSet::AttributeList::const_iterator sitr=sl.begin();
|
for(StateSet::AttributeList::const_iterator sitr=sl.begin();
|
||||||
sitr!=sl.end();
|
sitr!=sl.end();
|
||||||
++sitr)
|
++sitr)
|
||||||
{
|
{
|
||||||
fw.writeObject(*(sitr->second.first));
|
fw.writeObject(*(sitr->second.first));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const StateSet::TextureModeList& tml = stateset.getTextureModeList();
|
const StateSet::TextureModeList& tml = stateset.getTextureModeList();
|
||||||
const StateSet::TextureAttributeList& tal = stateset.getTextureAttributeList();
|
const StateSet::TextureAttributeList& tal = stateset.getTextureAttributeList();
|
||||||
|
Loading…
Reference in New Issue
Block a user