Skip to content

Commit

Permalink
From Guillaume Chouvenc, "I have modified Uniform.cpp and StateSet.cp…
Browse files Browse the repository at this point in the history
…p in src/osgPlugins/osg

to support the reading and writing of Uniform Callback and
StateSet Callback in osg files."
  • Loading branch information
robertosfield committed Aug 25, 2008
1 parent ddcd791 commit 72a22ac
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 0 deletions.
40 changes: 40 additions & 0 deletions src/osgPlugins/osg/StateSet.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down
42 changes: 42 additions & 0 deletions src/osgPlugins/osg/Uniform.cpp
Expand Up @@ -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;
}

Expand All @@ -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;
}

0 comments on commit 72a22ac

Please sign in to comment.