From Guillaume Chouvenc, "I have added the file StateAttribute.cpp in src/osgPlugins/osg

to support the reading and writing of StateAttribute Callback
in osg files.
"
This commit is contained in:
Robert Osfield 2008-08-25 14:59:06 +00:00
parent 8d5bfeddee
commit 43d19c11cf
2 changed files with 82 additions and 0 deletions

View File

@ -61,6 +61,7 @@ ShadeModel.cpp
Shader.cpp
Shape.cpp
ShapeDrawable.cpp
StateAttribute.cpp
StateSet.cpp
Stencil.cpp
Switch.cpp

View File

@ -0,0 +1,81 @@
#include "osg/StateAttribute"
#include "osgDB/Registry"
#include "osgDB/Input"
#include "osgDB/Output"
using namespace osg;
using namespace osgDB;
using namespace std;
// forward declare functions to use later.
bool StateAttribute_readLocalData(Object& obj, Input& fr);
bool StateAttribute_writeLocalData(const Object& obj, Output& fw);
// register the read and write functions with the osgDB::Registry.
osg::StateAttribute* g_stateAttribute = 0;
RegisterDotOsgWrapperProxy g_StateAttributeProxy
(
g_stateAttribute, // no instance, osg::StateAttribute is an abstract class.
"StateAttribute",
"Object StateAttribute",
&StateAttribute_readLocalData,
&StateAttribute_writeLocalData
);
bool StateAttribute_readLocalData(Object& obj, Input& fr)
{
bool iteratorAdvanced = false;
StateAttribute& stateAttribute = static_cast<StateAttribute&>(obj);
static ref_ptr<StateAttribute::Callback> s_callback = new osg::StateAttribute::Callback;
while (fr.matchSequence("UpdateCallback {"))
{
int entry = fr[0].getNoNestedBrackets();
fr += 2;
StateAttribute::Callback* callback = dynamic_cast<StateAttribute::Callback*>(fr.readObjectOfType(*s_callback));
if (callback) {
stateAttribute.setUpdateCallback(callback);
}
iteratorAdvanced = true;
}
while (fr.matchSequence("EventCallback {"))
{
int entry = fr[0].getNoNestedBrackets();
fr += 2;
StateAttribute::Callback* callback = dynamic_cast<StateAttribute::Callback*>(fr.readObjectOfType(*s_callback));
if (callback) {
stateAttribute.setEventCallback(callback);
}
iteratorAdvanced = true;
}
return iteratorAdvanced;
}
bool StateAttribute_writeLocalData(const Object& obj,Output& fw)
{
const StateAttribute& stateAttribute = static_cast<const StateAttribute&>(obj);
if (stateAttribute.getUpdateCallback())
{
fw.indent() << "UpdateCallback {" << std::endl;
fw.moveIn();
fw.writeObject(*stateAttribute.getUpdateCallback());
fw.moveOut();
fw.indent() << "}" << std::endl;
}
if (stateAttribute.getEventCallback())
{
fw.indent() << "EventCallback {" << std::endl;
fw.moveIn();
fw.writeObject(*stateAttribute.getEventCallback());
fw.moveOut();
fw.indent() << "}" << std::endl;
}
return true;
}