From Guillaume Chouvenc, "I have modified Uniform.cpp and StateSet.cpp in src/osgPlugins/osg

to support the reading and writing of Uniform Callback and
StateSet Callback in osg files."
This commit is contained in:
Robert Osfield
2008-08-25 14:54:11 +00:00
parent 6c047f7abe
commit 8d5bfeddee
2 changed files with 82 additions and 0 deletions

View File

@@ -333,6 +333,28 @@ bool StateSet_readLocalData(Object& obj, Input& fr)
stateset.setRenderBinDetails(binNumber,binName,rbmode);
}
static ref_ptr<StateSet::Callback> s_callback = new osg::StateSet::Callback;
while (fr.matchSequence("UpdateCallback {"))
{
int entry = fr[0].getNoNestedBrackets();
fr += 2;
StateSet::Callback* callback = dynamic_cast<StateSet::Callback*>(fr.readObjectOfType(*s_callback));
if (callback) {
stateset.setUpdateCallback(callback);
}
iteratorAdvanced = true;
}
while (fr.matchSequence("EventCallback {"))
{
int entry = fr[0].getNoNestedBrackets();
fr += 2;
StateSet::Callback* callback = dynamic_cast<StateSet::Callback*>(fr.readObjectOfType(*s_callback));
if (callback) {
stateset.setEventCallback(callback);
}
iteratorAdvanced = true;
}
bool readingMode = true;
StateAttribute::GLModeValue value;
@@ -599,6 +621,24 @@ bool StateSet_writeLocalData(const Object& obj, Output& fw)
fw.moveOut();
fw.indent()<<"}"<< std::endl;
}
if (stateset.getUpdateCallback())
{
fw.indent() << "UpdateCallback {" << std::endl;
fw.moveIn();
fw.writeObject(*stateset.getUpdateCallback());
fw.moveOut();
fw.indent() << "}" << std::endl;
}
if (stateset.getEventCallback())
{
fw.indent() << "EventCallback {" << std::endl;
fw.moveIn();
fw.writeObject(*stateset.getEventCallback());
fw.moveOut();
fw.indent() << "}" << std::endl;
}
return true;
}

View File

@@ -196,6 +196,29 @@ bool Uniform_readLocalData(Object& obj, Input& fr)
}
#endif //]
static ref_ptr<Uniform::Callback> s_callback = new osg::Uniform::Callback;
while (fr.matchSequence("UpdateCallback {"))
{
int entry = fr[0].getNoNestedBrackets();
fr += 2;
Uniform::Callback* callback = dynamic_cast<Uniform::Callback*>(fr.readObjectOfType(*s_callback));
if (callback) {
uniform.setUpdateCallback(callback);
}
iteratorAdvanced = true;
}
while (fr.matchSequence("EventCallback {"))
{
int entry = fr[0].getNoNestedBrackets();
fr += 2;
Uniform::Callback* callback = dynamic_cast<Uniform::Callback*>(fr.readObjectOfType(*s_callback));
if (callback) {
uniform.setEventCallback(callback);
}
iteratorAdvanced = true;
}
return iteratorAdvanced;
}
@@ -210,5 +233,24 @@ bool Uniform_writeLocalData(const Object& obj,Output& fw)
if( uniform.getFloatArray() ) Array_writeLocalData( *uniform.getFloatArray(), fw );
if( uniform.getIntArray() ) Array_writeLocalData( *uniform.getIntArray(), fw );
if (uniform.getUpdateCallback())
{
fw.indent() << "UpdateCallback {" << std::endl;
fw.moveIn();
fw.writeObject(*uniform.getUpdateCallback());
fw.moveOut();
fw.indent() << "}" << std::endl;
}
if (uniform.getEventCallback())
{
fw.indent() << "EventCallback {" << std::endl;
fw.moveIn();
fw.writeObject(*uniform.getEventCallback());
fw.moveOut();
fw.indent() << "}" << std::endl;
}
return true;
}