Files
OpenSceneGraph/src/osgPlugins/osgFX/IO_MultiTextureControl.cpp
2005-03-09 16:54:10 +00:00

80 lines
2.0 KiB
C++

#include <osgFX/MultiTextureControl>
#include <osgDB/Registry>
#include <osgDB/Input>
#include <osgDB/Output>
bool MultiTextureControl_readLocalData(osg::Object &obj, osgDB::Input &fr);
bool MultiTextureControl_writeLocalData(const osg::Object &obj, osgDB::Output &fw);
osgDB::RegisterDotOsgWrapperProxy MultiTextureControl_Proxy
(
new osgFX::MultiTextureControl,
"osgFX::MultiTextureControl",
"Object Node osgFX::MultiTextureControl Group",
MultiTextureControl_readLocalData,
MultiTextureControl_writeLocalData
);
bool MultiTextureControl_readLocalData(osg::Object &obj, osgDB::Input &fr)
{
osgFX::MultiTextureControl &mtc = static_cast<osgFX::MultiTextureControl &>(obj);
bool iteratorAdvanced = false;
bool matchFirst = false;
if ((matchFirst=fr.matchSequence("TextureWeights {")) || fr.matchSequence("TextureWeights %i {"))
{
// set up coordinates.
int entry = fr[0].getNoNestedBrackets();
if (matchFirst)
{
fr += 2;
}
else
{
fr += 3;
}
float weight=0.0f;
unsigned int i=0;
while (!fr.eof() && fr[0].getNoNestedBrackets()>entry)
{
if (fr[0].getFloat(weight))
{
mtc.setTextureWeight(i,weight);
++fr;
++i;
}
else
{
++fr;
}
}
iteratorAdvanced = true;
++fr;
}
return iteratorAdvanced;
}
bool MultiTextureControl_writeLocalData(const osg::Object &obj, osgDB::Output &fw)
{
const osgFX::MultiTextureControl &mtc = static_cast<const osgFX::MultiTextureControl &>(obj);
fw.indent() << "TextureWeights "<<mtc.getNumTextureWeights()<<" {"<< std::endl;
fw.moveIn();
for(unsigned int i=0; i<mtc.getNumTextureWeights();++i)
{
fw.indent() << mtc.getTextureWeight(i)<<std::endl;
}
fw.moveOut();
fw.indent() << "}"<< std::endl;
return true;
}