From 19608966d0b388a4bc94d53d6a8a2b6e68bba170 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 8 Feb 2007 12:47:35 +0000 Subject: [PATCH] Added the threading model to stats --- include/osgViewer/StatsHandler | 25 ++++++++++++++--------- src/osgViewer/StatsHandler.cpp | 37 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/include/osgViewer/StatsHandler b/include/osgViewer/StatsHandler index 21e517a78..2b6e8d467 100644 --- a/include/osgViewer/StatsHandler +++ b/include/osgViewer/StatsHandler @@ -58,19 +58,24 @@ class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler osg::Node* createCameraStats(const std::string& font, osg::Vec3& pos, float startBlocks, bool aquireGPUStats, float characterSize, osg::Stats* viewerStats, osg::Camera* camera); void setUpScene(osgViewer::Viewer* viewer); + + void updateThreadingModelText(); - int _keyEventTogglesOnScreenStats; - int _keyEventPrintsOutStats; + int _keyEventTogglesOnScreenStats; + int _keyEventPrintsOutStats; - int _statsType; - osg::ref_ptr _camera; - osg::ref_ptr _switch; + int _statsType; + osg::ref_ptr _camera; + osg::ref_ptr _switch; + + osgViewer::Viewer::ThreadingModel _threadingModel; + osg::ref_ptr _threadingModelText; - unsigned int _frameRateChildNum; - unsigned int _viewerChildNum; - unsigned int _sceneChildNum; - unsigned int _numBlocks; - double _blockMultiplier; + unsigned int _frameRateChildNum; + unsigned int _viewerChildNum; + unsigned int _sceneChildNum; + unsigned int _numBlocks; + double _blockMultiplier; }; diff --git a/src/osgViewer/StatsHandler.cpp b/src/osgViewer/StatsHandler.cpp index 554cd0ffa..9d58ab8b7 100644 --- a/src/osgViewer/StatsHandler.cpp +++ b/src/osgViewer/StatsHandler.cpp @@ -22,6 +22,7 @@ StatsHandler::StatsHandler(): _keyEventTogglesOnScreenStats('s'), _keyEventPrintsOutStats('S'), _statsType(NO_STATS), + _threadingModel(osgViewer::Viewer::SingleThreaded), _frameRateChildNum(0), _viewerChildNum(0), _sceneChildNum(0), @@ -34,6 +35,12 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap { osgViewer::Viewer* viewer = dynamic_cast(&aa); if (!viewer) return false; + + if (_threadingModelText.valid() && viewer->getThreadingModel()!=_threadingModel) + { + _threadingModel = viewer->getThreadingModel(); + updateThreadingModelText(); + } switch(ea.getEventType()) { @@ -165,6 +172,18 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap } +void StatsHandler::updateThreadingModelText() +{ + switch(_threadingModel) + { + case(osgViewer::Viewer::SingleThreaded): _threadingModelText->setText("ThreadingModel: SingleThreaded"); break; + case(osgViewer::Viewer::CullDrawThreadPerContext): _threadingModelText->setText("ThreadingModel: CullDrawThreadPerContext"); break; + case(osgViewer::Viewer::DrawThreadPerContext): _threadingModelText->setText("ThreadingModel: DrawThreadPerContext"); break; + case(osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext): _threadingModelText->setText("ThreadingModel: CullThreadPerCameraDrawThreadPerContext"); break; + case(osgViewer::Viewer::AutomaticSelection): _threadingModelText->setText("ThreadingModel: AutomaticSelection"); break; + } +} + void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer) { osgViewer::Viewer::Windows windows; @@ -519,6 +538,24 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer) osg::Geode* geode = new osg::Geode(); group->addChild(geode); + + { + pos.x() = leftPos; + + _threadingModelText = new osgText::Text; + geode->addDrawable( _threadingModelText.get() ); + + _threadingModelText->setColor(colorFR); + _threadingModelText->setFont(font); + _threadingModelText->setCharacterSize(characterSize); + _threadingModelText->setPosition(pos); + + updateThreadingModelText(); + + pos.y() -= characterSize*1.5f; + } + + float topOfViewerStats = pos.y() + characterSize; {