From Stephan Huber, add basic support for CompositeViewer in StatsHandler
This commit is contained in:
@@ -34,6 +34,7 @@
|
||||
#include <osgGA/TrackballManipulator>
|
||||
#include <osgGA/FlightManipulator>
|
||||
#include <osgGA/StateSetManipulator>
|
||||
#include <osgViewer/ViewerEventHandlers>
|
||||
|
||||
#include <osgViewer/CompositeViewer>
|
||||
|
||||
@@ -139,12 +140,18 @@ int main( int argc, char **argv )
|
||||
osgViewer::CompositeViewer viewer;
|
||||
|
||||
|
||||
|
||||
|
||||
if (arguments.read("-1"))
|
||||
{
|
||||
{
|
||||
osgViewer::View* view = new osgViewer::View;
|
||||
view->setSceneData(osgDB::readNodeFile("fountain.osg"));
|
||||
|
||||
|
||||
osg::ref_ptr<osgViewer::StatsHandler> statsHandler = new osgViewer::StatsHandler;
|
||||
view->addEventHandler( statsHandler.get() );
|
||||
|
||||
|
||||
view->setUpViewAcrossAllScreens();
|
||||
view->setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
viewer.addView(view);
|
||||
@@ -179,6 +186,10 @@ int main( int argc, char **argv )
|
||||
view->setSceneData(scene.get());
|
||||
view->setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
|
||||
osg::ref_ptr<osgViewer::StatsHandler> statsHandler = new osgViewer::StatsHandler;
|
||||
view->addEventHandler( statsHandler.get() );
|
||||
|
||||
|
||||
// add the handler for doing the picking
|
||||
view->addEventHandler(new PickHandler());
|
||||
}
|
||||
@@ -237,6 +248,9 @@ int main( int argc, char **argv )
|
||||
statesetManipulator->setStateSet(view->getCamera()->getOrCreateStateSet());
|
||||
|
||||
view->addEventHandler( statesetManipulator.get() );
|
||||
|
||||
osg::ref_ptr<osgViewer::StatsHandler> statsHandler = new osgViewer::StatsHandler;
|
||||
view->addEventHandler( statsHandler.get() );
|
||||
}
|
||||
|
||||
// view two
|
||||
|
||||
@@ -175,6 +175,12 @@ class OSGVIEWER_EXPORT View : public osg::View, public osgGA::GUIActionAdapter
|
||||
virtual void requestRedraw();
|
||||
virtual void requestContinuousUpdate(bool needed=true);
|
||||
virtual void requestWarpPointer(float x,float y);
|
||||
|
||||
typedef std::vector<osg::Camera*> Cameras;
|
||||
void getCameras(Cameras& cameras, bool onlyActive=true);
|
||||
|
||||
typedef std::vector<osg::GraphicsContext*> Contexts;
|
||||
void getContexts(Contexts& contexts, bool onlyValid=true);
|
||||
|
||||
public:
|
||||
|
||||
|
||||
@@ -180,14 +180,8 @@ class OSGVIEWER_EXPORT Viewer : public osgViewer::View
|
||||
osg::Camera* getCameraWithFocus() { return _cameraWithFocus.get(); }
|
||||
const osg::Camera* getCameraWithFocus() const { return _cameraWithFocus.get(); }
|
||||
|
||||
typedef std::vector<osg::GraphicsContext*> Contexts;
|
||||
void getContexts(Contexts& contexts, bool onlyValid=true);
|
||||
|
||||
typedef std::vector<osgViewer::GraphicsWindow*> Windows;
|
||||
void getWindows(Windows& windows, bool onlyValid=true);
|
||||
|
||||
typedef std::vector<osg::Camera*> Cameras;
|
||||
void getCameras(Cameras& cameras, bool onlyActive=true);
|
||||
|
||||
typedef std::vector<OpenThreads::Thread*> Threads;
|
||||
void getAllThreads(Threads& threads, bool onlyActive=true);
|
||||
|
||||
@@ -101,7 +101,7 @@ class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler
|
||||
|
||||
protected:
|
||||
|
||||
void setUpHUDCamera(osgViewer::Viewer* viewer);
|
||||
void setUpHUDCamera(osgViewer::View* view);
|
||||
|
||||
osg::Geometry* createGeometry(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numBlocks);
|
||||
|
||||
@@ -111,7 +111,7 @@ 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 setUpScene(osgViewer::View* view);
|
||||
|
||||
void updateThreadingModelText();
|
||||
|
||||
@@ -125,7 +125,7 @@ class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler
|
||||
|
||||
osg::ref_ptr<osg::Switch> _switch;
|
||||
|
||||
osgViewer::Viewer::ThreadingModel _threadingModel;
|
||||
unsigned int _threadingModel;
|
||||
osg::ref_ptr<osgText::Text> _threadingModelText;
|
||||
|
||||
unsigned int _frameRateChildNum;
|
||||
|
||||
@@ -131,6 +131,7 @@ void CompositeViewer::addView(osgViewer::View* view)
|
||||
_views.push_back(view);
|
||||
|
||||
view->setFrameStamp(_frameStamp.get());
|
||||
view->setStats(new osg::Stats("CompositeViewer"));
|
||||
|
||||
if (threadsWereRuinning) startThreading();
|
||||
}
|
||||
@@ -661,6 +662,10 @@ void CompositeViewer::frame(double simulationTime)
|
||||
void CompositeViewer::advance(double simulationTime)
|
||||
{
|
||||
if (_done) return;
|
||||
|
||||
double prevousReferenceTime = _frameStamp->getReferenceTime();
|
||||
int previousFrameNumber = _frameStamp->getFrameNumber();
|
||||
|
||||
|
||||
_frameStamp->setFrameNumber(_frameStamp->getFrameNumber()+1);
|
||||
|
||||
@@ -674,6 +679,24 @@ void CompositeViewer::advance(double simulationTime)
|
||||
{
|
||||
_frameStamp->setSimulationTime(simulationTime);
|
||||
}
|
||||
|
||||
for(Views::iterator vitr = _views.begin();
|
||||
vitr != _views.end();
|
||||
++vitr)
|
||||
{
|
||||
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 current frames stats
|
||||
(*vitr)->getStats()->setAttribute(_frameStamp->getFrameNumber(), "Reference time", _frameStamp->getReferenceTime());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void CompositeViewer::setCameraWithFocus(osg::Camera* camera)
|
||||
@@ -703,6 +726,8 @@ void CompositeViewer::eventTraversal()
|
||||
if (_done) return;
|
||||
|
||||
if (_views.empty()) return;
|
||||
|
||||
double beginEventTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
|
||||
|
||||
// osg::notify(osg::NOTICE)<<"CompositeViewer::frameEventTraversal()."<<std::endl;
|
||||
|
||||
@@ -1016,6 +1041,24 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1041,6 +1084,8 @@ void CompositeViewer::removeUpdateOperation(osg::Operation* operation)
|
||||
void CompositeViewer::updateTraversal()
|
||||
{
|
||||
if (_done) return;
|
||||
|
||||
double beginUpdateTraversal = osg::Timer::instance()->delta_s(_startTick, osg::Timer::instance()->tick());
|
||||
|
||||
Scenes scenes;
|
||||
getScenes(scenes);
|
||||
@@ -1101,7 +1146,21 @@ 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ StatsHandler::StatsHandler():
|
||||
_keyEventPrintsOutStats('S'),
|
||||
_statsType(NO_STATS),
|
||||
_initialized(false),
|
||||
_threadingModel(osgViewer::Viewer::SingleThreaded),
|
||||
_threadingModel(0xffff),
|
||||
_frameRateChildNum(0),
|
||||
_viewerChildNum(0),
|
||||
_sceneChildNum(0),
|
||||
@@ -41,15 +41,18 @@ StatsHandler::StatsHandler():
|
||||
|
||||
bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
|
||||
{
|
||||
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
|
||||
if (!viewer) return false;
|
||||
|
||||
if (_threadingModelText.valid() && viewer->getThreadingModel()!=_threadingModel)
|
||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa);
|
||||
if (!view) return false;
|
||||
|
||||
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
|
||||
if (viewer && _threadingModelText.valid() && viewer->getThreadingModel()!=_threadingModel)
|
||||
{
|
||||
_threadingModel = viewer->getThreadingModel();
|
||||
updateThreadingModelText();
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (ea.getHandled()) return false;
|
||||
|
||||
switch(ea.getEventType())
|
||||
@@ -58,30 +61,30 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
{
|
||||
if (ea.getKey()==_keyEventTogglesOnScreenStats)
|
||||
{
|
||||
if (viewer->getStats())
|
||||
if (view->getStats())
|
||||
{
|
||||
if (!_initialized)
|
||||
{
|
||||
setUpHUDCamera(viewer);
|
||||
setUpScene(viewer);
|
||||
setUpHUDCamera(view);
|
||||
setUpScene(view);
|
||||
}
|
||||
|
||||
++_statsType;
|
||||
|
||||
if (_statsType==LAST) _statsType = NO_STATS;
|
||||
|
||||
osgViewer::Viewer::Cameras cameras;
|
||||
viewer->getCameras(cameras);
|
||||
osgViewer::View::Cameras cameras;
|
||||
view->getCameras(cameras);
|
||||
|
||||
switch(_statsType)
|
||||
{
|
||||
case(NO_STATS):
|
||||
{
|
||||
viewer->getStats()->collectStats("frame_rate",false);
|
||||
viewer->getStats()->collectStats("event",false);
|
||||
viewer->getStats()->collectStats("update",false);
|
||||
view->getStats()->collectStats("frame_rate",false);
|
||||
view->getStats()->collectStats("event",false);
|
||||
view->getStats()->collectStats("update",false);
|
||||
|
||||
for(osgViewer::Viewer::Cameras::iterator itr = cameras.begin();
|
||||
for(osgViewer::View::Cameras::iterator itr = cameras.begin();
|
||||
itr != cameras.end();
|
||||
++itr)
|
||||
{
|
||||
@@ -95,7 +98,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
case(FRAME_RATE):
|
||||
{
|
||||
viewer->getStats()->collectStats("frame_rate",true);
|
||||
view->getStats()->collectStats("frame_rate",true);
|
||||
|
||||
_camera->setNodeMask(0xffffffff);
|
||||
_switch->setValue(_frameRateChildNum, true);
|
||||
@@ -103,15 +106,15 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
case(VIEWER_STATS):
|
||||
{
|
||||
if (viewer->getDatabasePager() && viewer->getDatabasePager()->isRunning())
|
||||
if (view->getDatabasePager() && view->getDatabasePager()->isRunning())
|
||||
{
|
||||
viewer->getDatabasePager()->resetStats();
|
||||
view->getDatabasePager()->resetStats();
|
||||
}
|
||||
|
||||
viewer->getStats()->collectStats("event",true);
|
||||
viewer->getStats()->collectStats("update",true);
|
||||
view->getStats()->collectStats("event",true);
|
||||
view->getStats()->collectStats("update",true);
|
||||
|
||||
for(osgViewer::Viewer::Cameras::iterator itr = cameras.begin();
|
||||
for(osgViewer::View::Cameras::iterator itr = cameras.begin();
|
||||
itr != cameras.end();
|
||||
++itr)
|
||||
{
|
||||
@@ -141,16 +144,16 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
if (ea.getKey()==_keyEventPrintsOutStats)
|
||||
{
|
||||
if (viewer->getStats())
|
||||
if (view->getStats())
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<std::endl<<"Stats report:"<<std::endl;
|
||||
typedef std::vector<osg::Stats*> StatsList;
|
||||
StatsList statsList;
|
||||
statsList.push_back(viewer->getStats());
|
||||
statsList.push_back(view->getStats());
|
||||
|
||||
osgViewer::Viewer::Contexts contexts;
|
||||
viewer->getContexts(contexts);
|
||||
for(osgViewer::Viewer::Contexts::iterator gcitr = contexts.begin();
|
||||
osgViewer::View::Contexts contexts;
|
||||
view->getContexts(contexts);
|
||||
for(osgViewer::View::Contexts::iterator gcitr = contexts.begin();
|
||||
gcitr != contexts.end();
|
||||
++gcitr)
|
||||
{
|
||||
@@ -166,7 +169,7 @@ bool StatsHandler::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdap
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = viewer->getStats()->getEarliestFrameNumber(); i<= viewer->getStats()->getLatestFrameNumber()-1; ++i)
|
||||
for(int i = view->getStats()->getEarliestFrameNumber(); i<= view->getStats()->getLatestFrameNumber()-1; ++i)
|
||||
{
|
||||
for(StatsList::iterator itr = statsList.begin();
|
||||
itr != statsList.end();
|
||||
@@ -198,6 +201,8 @@ void StatsHandler::updateThreadingModelText()
|
||||
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;
|
||||
default:
|
||||
_threadingModelText->setText("ThreadingModel: unknown"); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,11 +212,16 @@ void StatsHandler::reset()
|
||||
_camera->setGraphicsContext(0);
|
||||
}
|
||||
|
||||
void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer)
|
||||
void StatsHandler::setUpHUDCamera(osgViewer::View* view)
|
||||
{
|
||||
|
||||
|
||||
|
||||
osgViewer::GraphicsWindow* window = dynamic_cast<osgViewer::GraphicsWindow*>(_camera->getGraphicsContext());
|
||||
|
||||
if (!window)
|
||||
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(view);
|
||||
osg::GraphicsContext* context;
|
||||
|
||||
if (viewer && !window)
|
||||
{
|
||||
osgViewer::Viewer::Windows windows;
|
||||
viewer->getWindows(windows);
|
||||
@@ -220,10 +230,16 @@ void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer)
|
||||
|
||||
window = windows.front();
|
||||
|
||||
_camera->setGraphicsContext(window);
|
||||
|
||||
context = window;
|
||||
}
|
||||
else if (!viewer)
|
||||
{
|
||||
context = view->getCamera()->getGraphicsContext();
|
||||
}
|
||||
_camera->setGraphicsContext(context);
|
||||
|
||||
_camera->setViewport(0, 0, window->getTraits()->width, window->getTraits()->height);
|
||||
_camera->setViewport(0, 0, context->getTraits()->width, context->getTraits()->height);
|
||||
_camera->setRenderOrder(osg::Camera::POST_RENDER, 10);
|
||||
|
||||
_camera->setProjectionMatrix(osg::Matrix::ortho2D(0,1280,0,1024));
|
||||
@@ -533,7 +549,7 @@ osg::Geometry* StatsHandler::createTick(const osg::Vec3& pos, float height, cons
|
||||
return geometry;
|
||||
}
|
||||
|
||||
void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
void StatsHandler::setUpScene(osgViewer::View* view)
|
||||
{
|
||||
_switch = new osg::Switch;
|
||||
|
||||
@@ -551,15 +567,15 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
// collect all the relevant camers
|
||||
typedef std::vector<osg::Camera*> Cameras;
|
||||
Cameras cameras;
|
||||
if (viewer->getCamera()->getStats() && viewer->getCamera()->getGraphicsContext())
|
||||
if (view->getCamera()->getStats() && view->getCamera()->getGraphicsContext())
|
||||
{
|
||||
cameras.push_back(viewer->getCamera());
|
||||
cameras.push_back(view->getCamera());
|
||||
}
|
||||
for(unsigned int si=0; si<viewer->getNumSlaves(); ++si)
|
||||
for(unsigned int si=0; si<view->getNumSlaves(); ++si)
|
||||
{
|
||||
if (viewer->getSlave(si)._camera->getStats() && viewer->getSlave(si)._camera->getGraphicsContext())
|
||||
if (view->getSlave(si)._camera->getStats() && view->getSlave(si)._camera->getGraphicsContext())
|
||||
{
|
||||
cameras.push_back(viewer->getSlave(si)._camera.get());
|
||||
cameras.push_back(view->getSlave(si)._camera.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -621,7 +637,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
frameRateValue->setPosition(pos);
|
||||
frameRateValue->setText("0.0");
|
||||
|
||||
frameRateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Frame rate",-1, true, 1.0));
|
||||
frameRateValue->setDrawCallback(new TextDrawCallback(view->getStats(),"Frame rate",-1, true, 1.0));
|
||||
|
||||
pos.y() -= characterSize*1.5f;
|
||||
|
||||
@@ -680,11 +696,11 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
eventValue->setPosition(pos);
|
||||
eventValue->setText("0.0");
|
||||
|
||||
eventValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Event traversal time taken",-1, false, 1000.0));
|
||||
eventValue->setDrawCallback(new TextDrawCallback(view->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, viewer->getStats(), viewer->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks));
|
||||
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, view->getStats(), view->getStats(), "Event traversal begin time", "Event traversal end time", -1, _numBlocks));
|
||||
geode->addDrawable(geometry);
|
||||
|
||||
pos.y() -= characterSize*1.5f;
|
||||
@@ -713,11 +729,11 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
updateValue->setPosition(pos);
|
||||
updateValue->setText("0.0");
|
||||
|
||||
updateValue->setDrawCallback(new TextDrawCallback(viewer->getStats(),"Update traversal time taken",-1, false, 1000.0));
|
||||
updateValue->setDrawCallback(new TextDrawCallback(view->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, viewer->getStats(), viewer->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks));
|
||||
geometry->setDrawCallback(new BlockDrawCallback(this, startBlocks, view->getStats(), view->getStats(), "Update traversal begin time", "Update traversal end time", -1, _numBlocks));
|
||||
geode->addDrawable(geometry);
|
||||
|
||||
pos.y() -= characterSize*1.5f;
|
||||
@@ -731,7 +747,7 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
citr != cameras.end();
|
||||
++citr)
|
||||
{
|
||||
group->addChild(createCameraStats(font, pos, startBlocks, aquireGPUStats, characterSize, viewer->getStats(), *citr));
|
||||
group->addChild(createCameraStats(font, pos, startBlocks, aquireGPUStats, characterSize, view->getStats(), *citr));
|
||||
}
|
||||
|
||||
|
||||
@@ -750,12 +766,12 @@ void StatsHandler::setUpScene(osgViewer::Viewer* viewer)
|
||||
geode->addDrawable(ticks);
|
||||
|
||||
osg::Geometry* frameMarkers = createFrameMarkers(pos, height, colourTicks, _numBlocks + 1);
|
||||
frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, viewer->getStats(), 0, _numBlocks + 1));
|
||||
frameMarkers->setDrawCallback(new FrameMarkerDrawCallback(this, startBlocks, view->getStats(), 0, _numBlocks + 1));
|
||||
geode->addDrawable(frameMarkers);
|
||||
}
|
||||
|
||||
|
||||
osgDB::DatabasePager* dp = viewer->getDatabasePager();
|
||||
osgDB::DatabasePager* dp = view->getDatabasePager();
|
||||
if (dp && dp->isRunning())
|
||||
{
|
||||
pos.y() -= characterSize*1.5f;
|
||||
|
||||
@@ -1625,3 +1625,85 @@ bool View::computeIntersections(float x,float y, osg::NodePath& nodePath, osgUti
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void View::getCameras(Cameras& cameras, bool onlyActive)
|
||||
{
|
||||
cameras.clear();
|
||||
|
||||
if (_camera.valid() &&
|
||||
(!onlyActive || (_camera->getGraphicsContext() && _camera->getGraphicsContext()->valid())) ) cameras.push_back(_camera.get());
|
||||
|
||||
for(Slaves::iterator itr = _slaves.begin();
|
||||
itr != _slaves.end();
|
||||
++itr)
|
||||
{
|
||||
if (itr->_camera.valid() &&
|
||||
(!onlyActive || (itr->_camera->getGraphicsContext() && itr->_camera->getGraphicsContext()->valid())) ) cameras.push_back(itr->_camera.get());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
struct LessGraphicsContext
|
||||
{
|
||||
bool operator () (const osg::GraphicsContext* lhs, const osg::GraphicsContext* rhs) const
|
||||
{
|
||||
int screenLeft = lhs->getTraits()? lhs->getTraits()->screenNum : 0;
|
||||
int screenRight = rhs->getTraits()? rhs->getTraits()->screenNum : 0;
|
||||
if (screenLeft < screenRight) return true;
|
||||
if (screenLeft > screenRight) return false;
|
||||
|
||||
screenLeft = lhs->getTraits()? lhs->getTraits()->x : 0;
|
||||
screenRight = rhs->getTraits()? rhs->getTraits()->x : 0;
|
||||
if (screenLeft < screenRight) return true;
|
||||
if (screenLeft > screenRight) return false;
|
||||
|
||||
screenLeft = lhs->getTraits()? lhs->getTraits()->y : 0;
|
||||
screenRight = rhs->getTraits()? rhs->getTraits()->y : 0;
|
||||
if (screenLeft < screenRight) return true;
|
||||
if (screenLeft > screenRight) return false;
|
||||
|
||||
return lhs < rhs;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
void View::getContexts(Contexts& contexts, bool onlyValid)
|
||||
{
|
||||
typedef std::set<osg::GraphicsContext*> ContextSet;
|
||||
ContextSet contextSet;
|
||||
|
||||
if (_camera.valid() &&
|
||||
_camera->getGraphicsContext() &&
|
||||
(_camera->getGraphicsContext()->valid() || !onlyValid))
|
||||
{
|
||||
contextSet.insert(_camera->getGraphicsContext());
|
||||
}
|
||||
|
||||
for(unsigned int i=0; i<getNumSlaves(); ++i)
|
||||
{
|
||||
Slave& slave = getSlave(i);
|
||||
if (slave._camera.valid() &&
|
||||
slave._camera->getGraphicsContext() &&
|
||||
(slave._camera->getGraphicsContext()->valid() || !onlyValid))
|
||||
{
|
||||
contextSet.insert(slave._camera->getGraphicsContext());
|
||||
}
|
||||
}
|
||||
|
||||
contexts.clear();
|
||||
contexts.reserve(contextSet.size());
|
||||
|
||||
for(ContextSet::iterator itr = contextSet.begin();
|
||||
itr != contextSet.end();
|
||||
++itr)
|
||||
{
|
||||
contexts.push_back(const_cast<osg::GraphicsContext*>(*itr));
|
||||
}
|
||||
|
||||
if (contexts.size()>=2)
|
||||
{
|
||||
std::sort(contexts.begin(), contexts.end(), LessGraphicsContext());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -824,67 +824,8 @@ void Viewer::checkWindowStatus()
|
||||
}
|
||||
|
||||
|
||||
struct LessGraphicsContext
|
||||
{
|
||||
bool operator () (const osg::GraphicsContext* lhs, const osg::GraphicsContext* rhs) const
|
||||
{
|
||||
int screenLeft = lhs->getTraits()? lhs->getTraits()->screenNum : 0;
|
||||
int screenRight = rhs->getTraits()? rhs->getTraits()->screenNum : 0;
|
||||
if (screenLeft < screenRight) return true;
|
||||
if (screenLeft > screenRight) return false;
|
||||
|
||||
screenLeft = lhs->getTraits()? lhs->getTraits()->x : 0;
|
||||
screenRight = rhs->getTraits()? rhs->getTraits()->x : 0;
|
||||
if (screenLeft < screenRight) return true;
|
||||
if (screenLeft > screenRight) return false;
|
||||
|
||||
screenLeft = lhs->getTraits()? lhs->getTraits()->y : 0;
|
||||
screenRight = rhs->getTraits()? rhs->getTraits()->y : 0;
|
||||
if (screenLeft < screenRight) return true;
|
||||
if (screenLeft > screenRight) return false;
|
||||
|
||||
return lhs < rhs;
|
||||
}
|
||||
};
|
||||
|
||||
void Viewer::getContexts(Contexts& contexts, bool onlyValid)
|
||||
{
|
||||
typedef std::set<osg::GraphicsContext*> ContextSet;
|
||||
ContextSet contextSet;
|
||||
|
||||
if (_camera.valid() &&
|
||||
_camera->getGraphicsContext() &&
|
||||
(_camera->getGraphicsContext()->valid() || !onlyValid))
|
||||
{
|
||||
contextSet.insert(_camera->getGraphicsContext());
|
||||
}
|
||||
|
||||
for(unsigned int i=0; i<getNumSlaves(); ++i)
|
||||
{
|
||||
Slave& slave = getSlave(i);
|
||||
if (slave._camera.valid() &&
|
||||
slave._camera->getGraphicsContext() &&
|
||||
(slave._camera->getGraphicsContext()->valid() || !onlyValid))
|
||||
{
|
||||
contextSet.insert(slave._camera->getGraphicsContext());
|
||||
}
|
||||
}
|
||||
|
||||
contexts.clear();
|
||||
contexts.reserve(contextSet.size());
|
||||
|
||||
for(ContextSet::iterator itr = contextSet.begin();
|
||||
itr != contextSet.end();
|
||||
++itr)
|
||||
{
|
||||
contexts.push_back(const_cast<osg::GraphicsContext*>(*itr));
|
||||
}
|
||||
|
||||
if (contexts.size()>=2)
|
||||
{
|
||||
std::sort(contexts.begin(), contexts.end(), LessGraphicsContext());
|
||||
}
|
||||
}
|
||||
|
||||
void Viewer::getWindows(Windows& windows, bool onlyValid)
|
||||
{
|
||||
@@ -902,22 +843,6 @@ void Viewer::getWindows(Windows& windows, bool onlyValid)
|
||||
}
|
||||
}
|
||||
|
||||
void Viewer::getCameras(Cameras& cameras, bool onlyActive)
|
||||
{
|
||||
cameras.clear();
|
||||
|
||||
if (_camera.valid() &&
|
||||
(!onlyActive || (_camera->getGraphicsContext() && _camera->getGraphicsContext()->valid())) ) cameras.push_back(_camera.get());
|
||||
|
||||
for(Slaves::iterator itr = _slaves.begin();
|
||||
itr != _slaves.end();
|
||||
++itr)
|
||||
{
|
||||
if (itr->_camera.valid() &&
|
||||
(!onlyActive || (itr->_camera->getGraphicsContext() && itr->_camera->getGraphicsContext()->valid())) ) cameras.push_back(itr->_camera.get());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void Viewer::getAllThreads(Threads& threads, bool onlyActive)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user