diff --git a/src/osgPlugins/osg/Drawable.cpp b/src/osgPlugins/osg/Drawable.cpp index 69631c8ca..ad2b8eb5c 100644 --- a/src/osgPlugins/osg/Drawable.cpp +++ b/src/osgPlugins/osg/Drawable.cpp @@ -35,11 +35,29 @@ bool Drawable_readLocalData(Object& obj, Input& fr) iteratorAdvanced = true; } - Shape* shape = static_cast(fr.readObjectOfType(type_wrapper())); - if (shape) { - drawable.setShape(shape); - iteratorAdvanced = true; - } + Shape* shape = static_cast(fr.readObjectOfType(type_wrapper())); + if (shape) { + drawable.setShape(shape); + iteratorAdvanced = true; + } + + Drawable::UpdateCallback* uc = dynamic_cast(fr.readObjectOfType(type_wrapper())); + if (uc) { + drawable.setUpdateCallback(uc); + iteratorAdvanced = true; + } + + Drawable::CullCallback* cc = dynamic_cast(fr.readObjectOfType(type_wrapper())); + if (cc) { + drawable.setCullCallback(cc); + iteratorAdvanced = true; + } + + Drawable::DrawCallback* dc = dynamic_cast(fr.readObjectOfType(type_wrapper())); + if (dc) { + drawable.setDrawCallback(dc); + iteratorAdvanced = true; + } if (fr[0].matchWord("supportsDisplayList")) { @@ -107,6 +125,22 @@ bool Drawable_writeLocalData(const Object& obj, Output& fw) fw.writeObject(*drawable.getShape()); } + if (drawable.getUpdateCallback()) + { + fw.writeObject(*drawable.getUpdateCallback()); + } + + if (drawable.getCullCallback()) + { + fw.writeObject(*drawable.getCullCallback()); + } + + if (drawable.getDrawCallback()) + { + fw.writeObject(*drawable.getDrawCallback()); + } + + if (!drawable.getSupportsDisplayList()) { fw.indent()<<"supportsDisplayList ";