/* -*-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. */ #ifndef OSGVIEWER_STATSHANDLER #define OSGVIEWER_STATSHANDLER 1 #include #include #include namespace osgViewer { class OSGVIEWER_EXPORT StatsHandler : public osgGA::GUIEventHandler { public: StatsHandler(); enum StatsType { NO_STATS = 0, FRAME_RATE = 1, VIEWER_STATS = 2, SCENE_STATS = 3, LAST = 4 }; void setKeyEventTogglesOnScreenStats(int key) { _keyEventTogglesOnScreenStats = key; } int getKeyEventTogglesOnScreenStats() const { return _keyEventTogglesOnScreenStats; } void setKeyEventPrintsOutStats(int key) { _keyEventPrintsOutStats = key; } int getKeyEventPrintsOutStats() const { return _keyEventPrintsOutStats; } double getBlockMultiplier() const { return _blockMultiplier; } void reset(); osg::Camera* getCamera() { return _camera.get(); } const osg::Camera* getCamera() const { return _camera.get(); } virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa); /** Get the keyboard and mouse usage of this manipulator.*/ virtual void getUsage(osg::ApplicationUsage& usage) const; protected: void setUpHUDCamera(osgViewer::Viewer* viewer); osg::Geometry* createGeometry(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numBlocks); osg::Geometry* createFrameMarkers(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numBlocks); osg::Geometry* createTick(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numTicks); 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 _statsType; bool _initialized; 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; }; } #endif