Added a concrete osg::DeleteHandler implementation which provides support for

retain objects for several frames before deleting them.  Also added RenderStageCache
into CullVistor.cpp that is used for handling RTT osg::Camera's that are being
used in double buffered SceneView usage.
This commit is contained in:
Robert Osfield
2007-02-02 12:41:13 +00:00
parent 158921574c
commit 6d9641a78b
11 changed files with 309 additions and 67 deletions

View File

@@ -12,6 +12,7 @@
*/
#include <osg/GLExtensions>
#include <osg/DeleteHandler>
#include <osgUtil/GLObjectsVisitor>
#include <osgGA/TrackballManipulator>
#include <osgViewer/Viewer>
@@ -20,6 +21,7 @@
using namespace osgViewer;
class ViewerQuerySupport
{
public:
@@ -544,6 +546,8 @@ Viewer::Viewer():
_eventVisitor->setActionAdapter(this);
setStats(new osg::Stats("Viewer"));
osg::Referenced::setDeleteHandler(new osg::DeleteHandler(2));
}
Viewer::~Viewer()
@@ -569,6 +573,11 @@ Viewer::~Viewer()
(*citr)->close();
}
if (osg::Referenced::getDeleteHandler())
{
osg::Referenced::getDeleteHandler()->setNumFramesToRetainObjects(0);
osg::Referenced::getDeleteHandler()->flushAll();
}
//osg::notify(osg::NOTICE)<<"finish Viewer::~Viewer()"<<std::endl;
}
@@ -1350,6 +1359,13 @@ void Viewer::advance(double simulationTime)
// update current frames stats
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
}
if (osg::Referenced::getDeleteHandler())
{
osg::Referenced::getDeleteHandler()->flush();
osg::Referenced::getDeleteHandler()->setFrameNumber(_frameStamp->getFrameNumber());
}
}
void Viewer::eventTraversal()