Moved ViewerBase class out into its own header and source file.

Improved the support for stats collection in CompositeViewer/StatsHandler.
This commit is contained in:
Robert Osfield
2007-09-30 11:37:00 +00:00
parent f8729af8b2
commit 91900254f0
18 changed files with 835 additions and 705 deletions

View File

@@ -17,6 +17,7 @@ SET(LIB_PUBLIC_HEADERS
${HEADER_PATH}/Version
${HEADER_PATH}/View
${HEADER_PATH}/Viewer
${HEADER_PATH}/ViewerBase
${HEADER_PATH}/ViewerEventHandlers
)
@@ -29,6 +30,7 @@ SET(LIB_COMMON_FILES
Version.cpp
View.cpp
Viewer.cpp
ViewerBase.cpp
ViewerEventHandlers.cpp
)

View File

@@ -71,7 +71,7 @@ void CompositeViewer::constructorInit()
_updateVisitor = new osgUtil::UpdateVisitor;
_updateVisitor->setFrameStamp(_frameStamp.get());
setStats(new osg::Stats("CompsiteViewer"));
}
CompositeViewer::~CompositeViewer()
@@ -126,14 +126,13 @@ void CompositeViewer::addView(osgViewer::View* view)
view->_viewerBase = this;
view->setFrameStamp(_frameStamp.get());
view->setStats(new osg::Stats("CompositeViewer"));
if (threadsWereRuinning) startThreading();
}
void CompositeViewer::removeView(osgViewer::View* view)
{
for(Views::iterator itr = _views.begin();
for(RefViews::iterator itr = _views.begin();
itr != _views.end();
++itr)
{
@@ -173,7 +172,7 @@ bool CompositeViewer::isRealized() const
int CompositeViewer::run()
{
for(Views::iterator itr = _views.begin();
for(RefViews::iterator itr = _views.begin();
itr != _views.end();
++itr)
{
@@ -201,7 +200,7 @@ void CompositeViewer::setStartTick(osg::Timer_t tick)
{
_startTick = tick;
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -462,7 +461,7 @@ void CompositeViewer::init()
{
osg::notify(osg::INFO)<<"CompositeViewer::init()"<<std::endl;
for(Views::iterator itr = _views.begin();
for(RefViews::iterator itr = _views.begin();
itr != _views.end();
++itr)
{
@@ -475,7 +474,7 @@ void CompositeViewer::getContexts(Contexts& contexts, bool onlyValid)
typedef std::set<osg::GraphicsContext*> ContextSet;
ContextSet contextSet;
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -514,7 +513,7 @@ void CompositeViewer::getCameras(Cameras& cameras, bool onlyActive)
{
cameras.clear();
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -554,7 +553,7 @@ void CompositeViewer::getScenes(Scenes& scenes, bool onlyValid)
typedef std::set<osgViewer::Scene*> SceneSet;
SceneSet sceneSet;
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -573,6 +572,16 @@ void CompositeViewer::getScenes(Scenes& scenes, bool onlyValid)
}
}
void CompositeViewer::getViews(Views& views, bool onlyValid)
{
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
views.push_back(vitr->get());
}
}
void CompositeViewer::getAllThreads(Threads& threads, bool onlyActive)
{
OperationThreads operationThreads;
@@ -778,23 +787,17 @@ void CompositeViewer::advance(double simulationTime)
_frameStamp->setSimulationTime(simulationTime);
}
for(Views::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
if (getStats() && getStats()->collectStats("frame_rate"))
{
if ((*vitr)->getStats() && (*vitr)->getStats()->collectStats("frame_rate"))
{
// update previous frame stats
double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime;
(*vitr)->getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
(*vitr)->getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
// update previous frame stats
double deltaFrameTime = _frameStamp->getReferenceTime() - prevousReferenceTime;
getStats()->setAttribute(previousFrameNumber, "Frame duration", deltaFrameTime);
getStats()->setAttribute(previousFrameNumber, "Frame rate", 1.0/deltaFrameTime);
// update current frames stats
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
}
// update current frames stats
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
}
}
void CompositeViewer::setCameraWithFocus(osg::Camera* camera)
@@ -803,7 +806,7 @@ void CompositeViewer::setCameraWithFocus(osg::Camera* camera)
if (camera)
{
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -1016,7 +1019,7 @@ void CompositeViewer::eventTraversal()
// osg::notify(osg::NOTICE)<<"mouseEventState Xmin = "<<eventState->getXmin()<<" Ymin="<<eventState->getYmin()<<" xMax="<<eventState->getXmax()<<" Ymax="<<eventState->getYmax()<<std::endl;
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -1140,22 +1143,15 @@ void CompositeViewer::eventTraversal()
}
// stats:
for(Views::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
if ((*vitr)->getStats() && (*vitr)->getStats()->collectStats("event"))
{
double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
}
if (getStats() && getStats()->collectStats("event"))
{
double endEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal begin time", beginEventTraversal);
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal end time", endEventTraversal);
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
}
}
@@ -1191,7 +1187,7 @@ void CompositeViewer::updateTraversal()
_updateOperations->runOperations(this);
}
for(Views::iterator vitr = _views.begin();
for(RefViews::iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{
@@ -1225,21 +1221,18 @@ void CompositeViewer::updateTraversal()
view->getCamera()->setViewMatrix( view->getCameraManipulator()->getInverseMatrix());
}
view->updateSlaves();
// stats
if (view->getStats() && view->getStats()->collectStats("update"))
{
double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
view->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
}
}
if (getStats() && getStats()->collectStats("update"))
{
double endUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal begin time", beginUpdateTraversal);
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal end time", endUpdateTraversal);
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Update traversal time taken", endUpdateTraversal-beginUpdateTraversal);
}
}
@@ -1250,6 +1243,8 @@ void CompositeViewer::renderingTraversals()
if (_done) return;
double beginRenderingTraversals = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
Scenes scenes;
getScenes(scenes);
@@ -1318,11 +1313,21 @@ void CompositeViewer::renderingTraversals()
dp->signalEndFrame();
}
}
if (getStats() && getStats()->collectStats("update"))
{
double endRenderingTraversals = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
// update current frames stats
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Rendering traversals begin time ", beginRenderingTraversals);
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Rendering traversals end time ", endRenderingTraversals);
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Rendering traversals time taken", endRenderingTraversals-beginRenderingTraversals);
}
}
void CompositeViewer::getUsage(osg::ApplicationUsage& usage) const
{
for(Views::const_iterator vitr = _views.begin();
for(RefViews::const_iterator vitr = _views.begin();
vitr != _views.end();
++vitr)
{

View File

@@ -42,10 +42,10 @@ StatsHandler::StatsHandler():
bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa);
if (!view) return false;
osgViewer::View* myview = dynamic_cast<osgViewer::View*>(&aa);
if (!myview) return false;
osgViewer::ViewerBase* viewer = view->getViewerBase();
osgViewer::ViewerBase* viewer = myview->getViewerBase();
if (viewer && _threadingModelText.valid() && viewer->getThreadingModel()!=_threadingModel)
{
_threadingModel = viewer->getThreadingModel();
@@ -61,12 +61,12 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
{
if (ea.getKey()==_keyEventTogglesOnScreenStats)
{
if (view->getStats())
if (viewer->getStats())
{
if (!_initialized)
{
setUpHUDCamera(view);
setUpScene(view);
setUpHUDCamera(viewer);
setUpScene(viewer);
}
++_statsType;
@@ -80,9 +80,9 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
{
case(NO_STATS):
{
view->getStats()->collectStats("frame_rate",false);
view->getStats()->collectStats("event",false);
view->getStats()->collectStats("update",false);
viewer->getStats()->collectStats("frame_rate",false);
viewer->getStats()->collectStats("event",false);
viewer->getStats()->collectStats("update",false);
for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin();
itr != cameras.end();
@@ -98,7 +98,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
}
case(FRAME_RATE):
{
view->getStats()->collectStats("frame_rate",true);
viewer->getStats()->collectStats("frame_rate",true);
_camera->setNodeMask(0xffffffff);
_switch->setValue(_frameRateChildNum, true);
@@ -106,13 +106,22 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
}
case(VIEWER_STATS):
{
if (view->getDatabasePager() && view->getDatabasePager()->isRunning())
ViewerBase::Scenes scenes;
viewer->getScenes(scenes);
for(ViewerBase::Scenes::iterator itr = scenes.begin();
itr != scenes.end();
++itr)
{
view->getDatabasePager()->resetStats();
Scene* scene = *itr;
osgDB::DatabasePager* dp = scene->getDatabasePager();
if (dp && dp->isRunning())
{
dp->resetStats();
}
}
view->getStats()->collectStats("event",true);
view->getStats()->collectStats("update",true);
viewer->getStats()->collectStats("event",true);
viewer->getStats()->collectStats("update",true);
for(osgViewer::ViewerBase::Cameras::iterator itr = cameras.begin();
itr != cameras.end();
@@ -144,12 +153,12 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
}
if (ea.getKey()==_keyEventPrintsOutStats)
{
if (view->getStats())
if (viewer->getStats())
{
osg::notify(osg::NOTICE)<<std::endl<<"Stats report:"<<std::endl;
typedef std::vector<osg::Stats*> StatsList;
StatsList statsList;
statsList.push_back(view->getStats());
statsList.push_back(viewer->getStats());
osgViewer::ViewerBase::Contexts contexts;
viewer->getContexts(contexts);
@@ -169,7 +178,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
}
}
for(int i = view->getStats()->getEarliestFrameNumber(); i<= view->getStats()->getLatestFrameNumber()-1; ++i)
for(int i = viewer->getStats()->getEarliestFrameNumber(); i<= viewer->getStats()->getLatestFrameNumber()-1; ++i)
{
for(StatsList::iterator itr = statsList.begin();
itr != statsList.end();
@@ -212,13 +221,12 @@ void StatsHandler::reset()
_camera->setGraphicsContext(0);
}
void StatsHandler::setUpHUDCamera(osgViewer::View* view)
void StatsHandler::setUpHUDCamera(osgViewer::ViewerBase* viewer)
{
osgViewer::GraphicsWindow* window = dynamic_cast<osgViewer::GraphicsWindow*>(_camera->getGraphicsContext());
osgViewer::ViewerBase* viewer = view->getViewerBase();
osg::GraphicsContext* context;
if (viewer && !window)
if (!window)
{
osgViewer::Viewer::Windows windows;
viewer->getWindows(windows);
@@ -230,10 +238,7 @@ void StatsHandler::setUpHUDCamera(osgViewer::View* view)
context = window;
}
else if (!viewer)
{
context = view->getCamera()->getGraphicsContext();
}
_camera->setGraphicsContext(context);
_camera->setViewport(0, 0, context->getTraits()->width, context->getTraits()->height);
@@ -546,7 +551,7 @@ osg::Geometry* StatsHandler::createTick(const osg::Vec3& pos, float height, cons
return geometry;
}
void StatsHandler::setUpScene(osgViewer::View* view)
void StatsHandler::setUpScene(osgViewer::ViewerBase* viewer)
{
_switch = new osg::Switch;
@@ -562,23 +567,23 @@ void StatsHandler::setUpScene(osgViewer::View* view)
// collect all the relevant camers
typedef std::vector<osg::Camera*> Cameras;
Cameras cameras;
if (view->getCamera()->getStats() && view->getCamera()->getGraphicsContext())
ViewerBase::Cameras validCameras;
viewer->getCameras(validCameras);
ViewerBase::Cameras cameras;
for(ViewerBase::Cameras::iterator itr = validCameras.begin();
itr != validCameras.end();
++itr)
{
cameras.push_back(view->getCamera());
}
for(unsigned int si=0; si<view->getNumSlaves(); ++si)
{
if (view->getSlave(si)._camera->getStats() && view->getSlave(si)._camera->getGraphicsContext())
if ((*itr)->getStats())
{
cameras.push_back(view->getSlave(si)._camera.get());
cameras.push_back(*itr);
}
}
// check for querry time support
unsigned int numCamrasWithTimerQuerySupport = 0;
for(Cameras::iterator citr = cameras.begin();
for(ViewerBase::Cameras::iterator citr = cameras.begin();
citr != cameras.end();
++citr)
{
@@ -634,7 +639,7 @@ void StatsHandler::setUpScene(osgViewer::View* view)
frameRateValue->setPosition(pos);
frameRateValue->setText("0.0");
frameRateValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Frame rate",-1, true, 1.0));
frameRateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Frame rate",-1, true, 1.0));
pos.y() -= characterSize*1.5f;
@@ -693,11 +698,11 @@ void StatsHandler::setUpScene(osgViewer::View* view)
eventValue->setPosition(pos);
eventValue->setText("0.0");
eventValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Event traversal time taken",-1, false, 1000.0));
eventValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, false, 1000.0));
pos.x() = startBlocks;
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, view->getStats(), view->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks));
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks));
geode->addDrawable(geometry);
pos.y() -= characterSize*1.5f;
@@ -726,11 +731,11 @@ void StatsHandler::setUpScene(osgViewer::View* view)
updateValue->setPosition(pos);
updateValue->setText("0.0");
updateValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Update traversal time taken",-1, false, 1000.0));
updateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, false, 1000.0));
pos.x() = startBlocks;
osg::Geometry* geometry = createGeometry(pos, characterSize *0.8, colorUpdateAlpha, _numBlocks);
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, view->getStats(), view->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks));
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, viewer->getStats(), viewer->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks));
geode->addDrawable(geometry);
pos.y() -= characterSize*1.5f;
@@ -740,11 +745,11 @@ void StatsHandler::setUpScene(osgViewer::View* view)
// add camera stats
for(Cameras::iterator citr = cameras.begin();
for(ViewerBase::Cameras::iterator citr = cameras.begin();
citr != cameras.end();
++citr)
{
group->addChild(createCameraStats(font, pos, startBlocks, aquireGPUStats, characterSize, view->getStats(), *citr));
group->addChild(createCameraStats(font, pos, startBlocks, aquireGPUStats, characterSize, viewer->getStats(), *citr));
}
@@ -763,91 +768,98 @@ void StatsHandler::setUpScene(osgViewer::View* view)
geode->addDrawable(ticks);
osg::Geometry* frameMarkers = createFrameMarkers(pos, height, colourTicks, _numBlocks + 1);
frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, view->getStats(), 0, _numBlocks + 1));
frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getStats(), 0, _numBlocks + 1));
geode->addDrawable(frameMarkers);
}
osgDB::DatabasePager* dp = view->getDatabasePager();
if (dp && dp->isRunning())
ViewerBase::Scenes scenes;
viewer->getScenes(scenes);
for(ViewerBase::Scenes::iterator itr = scenes.begin();
itr != scenes.end();
++itr)
{
pos.y() -= characterSize*1.5f;
Scene* scene = *itr;
osgDB::DatabasePager* dp = scene->getDatabasePager();
if (dp && dp->isRunning())
{
pos.y() -= characterSize*1.5f;
pos.x() = leftPos;
osg::ref_ptr<osgText::Text> averageLabel = new osgText::Text;
geode->addDrawable( averageLabel.get() );
averageLabel->setColor(colorDP);
averageLabel->setFont(font);
averageLabel->setCharacterSize(characterSize);
averageLabel->setPosition(pos);
averageLabel->setText("DatabasePager time to merge new tiles - average: ");
pos.x() = averageLabel->getBound().xMax();
osg::ref_ptr<osgText::Text> averageValue = new osgText::Text;
geode->addDrawable( averageValue.get() );
averageValue->setColor(colorDP);
averageValue->setFont(font);
averageValue->setCharacterSize(characterSize);
averageValue->setPosition(pos);
averageValue->setText("1000");
pos.x() = averageValue->getBound().xMax() + 2.0f*characterSize;
osg::ref_ptr<osgText::Text> minLabel = new osgText::Text;
geode->addDrawable( minLabel.get() );
minLabel->setColor(colorDP);
minLabel->setFont(font);
minLabel->setCharacterSize(characterSize);
minLabel->setPosition(pos);
minLabel->setText("min: ");
pos.x() = minLabel->getBound().xMax();
osg::ref_ptr<osgText::Text> minValue = new osgText::Text;
geode->addDrawable( minValue.get() );
minValue->setColor(colorDP);
minValue->setFont(font);
minValue->setCharacterSize(characterSize);
minValue->setPosition(pos);
minValue->setText("1000");
pos.x() = minValue->getBound().xMax() + 2.0f*characterSize;
osg::ref_ptr<osgText::Text> maxLabel = new osgText::Text;
geode->addDrawable( maxLabel.get() );
maxLabel->setColor(colorDP);
maxLabel->setFont(font);
maxLabel->setCharacterSize(characterSize);
maxLabel->setPosition(pos);
maxLabel->setText("max: ");
pos.x() = maxLabel->getBound().xMax();
osg::ref_ptr<osgText::Text> maxValue = new osgText::Text;
geode->addDrawable( maxValue.get() );
maxValue->setColor(colorDP);
maxValue->setFont(font);
maxValue->setCharacterSize(characterSize);
maxValue->setPosition(pos);
maxValue->setText("1000");
pos.x() = maxLabel->getBound().xMax();
geode->setCullCallback(new PagerCallback(dp, minValue.get(), maxValue.get(), averageValue.get(), 1000.0));
}
pos.x() = leftPos;
osg::ref_ptr<osgText::Text> averageLabel = new osgText::Text;
geode->addDrawable( averageLabel.get() );
averageLabel->setColor(colorDP);
averageLabel->setFont(font);
averageLabel->setCharacterSize(characterSize);
averageLabel->setPosition(pos);
averageLabel->setText("DatabasePager time to merge new tiles - average: ");
pos.x() = averageLabel->getBound().xMax();
osg::ref_ptr<osgText::Text> averageValue = new osgText::Text;
geode->addDrawable( averageValue.get() );
averageValue->setColor(colorDP);
averageValue->setFont(font);
averageValue->setCharacterSize(characterSize);
averageValue->setPosition(pos);
averageValue->setText("1000");
pos.x() = averageValue->getBound().xMax() + 2.0f*characterSize;
osg::ref_ptr<osgText::Text> minLabel = new osgText::Text;
geode->addDrawable( minLabel.get() );
minLabel->setColor(colorDP);
minLabel->setFont(font);
minLabel->setCharacterSize(characterSize);
minLabel->setPosition(pos);
minLabel->setText("min: ");
pos.x() = minLabel->getBound().xMax();
osg::ref_ptr<osgText::Text> minValue = new osgText::Text;
geode->addDrawable( minValue.get() );
minValue->setColor(colorDP);
minValue->setFont(font);
minValue->setCharacterSize(characterSize);
minValue->setPosition(pos);
minValue->setText("1000");
pos.x() = minValue->getBound().xMax() + 2.0f*characterSize;
osg::ref_ptr<osgText::Text> maxLabel = new osgText::Text;
geode->addDrawable( maxLabel.get() );
maxLabel->setColor(colorDP);
maxLabel->setFont(font);
maxLabel->setCharacterSize(characterSize);
maxLabel->setPosition(pos);
maxLabel->setText("max: ");
pos.x() = maxLabel->getBound().xMax();
osg::ref_ptr<osgText::Text> maxValue = new osgText::Text;
geode->addDrawable( maxValue.get() );
maxValue->setColor(colorDP);
maxValue->setFont(font);
maxValue->setCharacterSize(characterSize);
maxValue->setPosition(pos);
maxValue->setText("1000");
pos.x() = maxLabel->getBound().xMax();
geode->setCullCallback(new PagerCallback(dp, minValue.get(), maxValue.get(), averageValue.get(), 1000.0));
}
pos.x() = leftPos;
}
#if 0
// scene stats

View File

@@ -124,44 +124,6 @@ protected:
};
ViewerBase::ViewerBase():
osg::Object(true)
{
_done = false;
_keyEventSetsDone = osgGA::GUIEventAdapter::KEY_Escape;
_quitEventSetsDone = true;
_threadingModel = AutomaticSelection;
_threadsRunning = false;
}
ViewerBase::ViewerBase(const ViewerBase& base):
osg::Object(true)
{
}
void ViewerBase::addUpdateOperation(osg::Operation* operation)
{
if (!operation) return;
if (!_updateOperations) _updateOperations = new osg::OperationQueue;
_updateOperations->add(operation);
}
void ViewerBase::removeUpdateOperation(osg::Operation* operation)
{
if (!operation) return;
if (_updateOperations.valid())
{
_updateOperations->remove(operation);
}
}
View::View():
_fusionDistanceMode(osgUtil::SceneView::PROPORTIONAL_TO_SCREEN_DISTANCE),
_fusionDistanceValue(1.0f)

View File

@@ -1408,7 +1408,6 @@ void Viewer::eventTraversal()
getStats()->setAttribute(_frameStamp->getFrameNumber(), "Event traversal time taken", endEventTraversal-beginEventTraversal);
}
}
void Viewer::updateTraversal()
@@ -1585,6 +1584,11 @@ void Viewer::getScenes(Scenes& scenes, bool onlyValid)
scenes.push_back(_scene.get());
}
void Viewer::getViews(Views& views, bool onlyValid)
{
views.push_back(this);
}
struct LessGraphicsContext
{
bool operator () (const osg::GraphicsContext* lhs, const osg::GraphicsContext* rhs) const

View File

@@ -0,0 +1,60 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#include <osgViewer/ViewerBase>
#include <osg/io_utils>
#include <osg/TextureCubeMap>
#include <osg/TextureRectangle>
#include <osg/TexMat>
#include <osgUtil/Optimizer>
#include <osgUtil/IntersectionVisitor>
using namespace osgViewer;
ViewerBase::ViewerBase():
osg::Object(true)
{
_done = false;
_keyEventSetsDone = osgGA::GUIEventAdapter::KEY_Escape;
_quitEventSetsDone = true;
_threadingModel = AutomaticSelection;
_threadsRunning = false;
}
ViewerBase::ViewerBase(const ViewerBase& base):
osg::Object(true)
{
}
void ViewerBase::addUpdateOperation(osg::Operation* operation)
{
if (!operation) return;
if (!_updateOperations) _updateOperations = new osg::OperationQueue;
_updateOperations->add(operation);
}
void ViewerBase::removeUpdateOperation(osg::Operation* operation)
{
if (!operation) return;
if (_updateOperations.valid())
{
_updateOperations->remove(operation);
}
}