Fixed multi-threaded/multi-pipe crash when primitive stats where output in osgProducer::Viewer's stats.

This commit is contained in:
Robert Osfield
2006-07-29 16:47:28 +00:00
parent f977d7c606
commit b1994cc60d
7 changed files with 90 additions and 92 deletions

View File

@@ -21,7 +21,8 @@ using namespace osgUtil;
using namespace osgProducer;
OsgSceneHandler::OsgSceneHandler( osg::DisplaySettings *ds) :
_sceneView(new osgUtil::SceneView(ds))
_sceneView(new osgUtil::SceneView(ds)),
_collectStats(false)
{
_frameStartTick = 0;
_previousFrameStartTick = 0;
@@ -59,6 +60,7 @@ void OsgSceneHandler::clearImplementation(Producer::Camera& /*camera*/)
void OsgSceneHandler::cullImplementation(Producer::Camera &cam)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_cullMutex);
_sceneView->getProjectionMatrix().set(cam.getProjectionMatrix());
_sceneView->getViewMatrix().set(cam.getPositionAndAttitudeMatrix());
@@ -74,6 +76,23 @@ void OsgSceneHandler::cullImplementation(Producer::Camera &cam)
_sceneView->setClearColor(clear_color);
_sceneView->cull();
if (_collectStats)
{
_stats.reset();
_sceneView->getStats(_stats);
}
}
bool OsgSceneHandler::getStats(Statistics& primStats)
{
if (!_collectStats) return false;
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_cullMutex);
primStats.add(_stats);
return true;
}
void OsgSceneHandler::drawImplementation(Producer::Camera &)