openscenegraph
StatsHandler
Go to the documentation of this file.
1/* -*-c++-*-
2 * Copyright (C) 2009 Cedric Pinson <mornifle@plopbyte.net>
3 *
4 * This library is open source and may be redistributed and/or modified under
5 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
6 * (at your option) any later version. The full license is in LICENSE file
7 * included with this distribution, and on the openscenegraph.org website.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * OpenSceneGraph Public License for more details.
13*/
14
15#ifndef OSGANIMATION_STATSHANDLER_H
16#define OSGANIMATION_STATSHANDLER_H
17
18#include <osgAnimation/Timeline>
19#include <osgGA/GUIEventHandler>
20#include <osgViewer/ViewerBase>
21#include <osgViewer/Viewer>
22#include <osgText/Text>
23
24namespace osgAnimation
25{
26#if 0
27 struct StatAction
28 {
29
30 std::string _name;
31 osg::ref_ptr<osg::Group> _group;
32 osg::ref_ptr<osg::Geode> _label;
33 osg::ref_ptr<osg::MatrixTransform> _graph;
34 osg::ref_ptr<osgText::Text> _textLabel;
35
36 void init(osg::Stats* stats, const std::string& name, const osg::Vec3& pos, float width, float heigh, const osg::Vec4& color);
37 void setPosition(const osg::Vec3& pos);
38 void setAlpha(float v);
39 };
40
41#endif
42
43/** Event handler for adding on screen stats reporting to Viewers.*/
44 class OSGANIMATION_EXPORT StatsHandler : public osgGA::GUIEventHandler
45 {
46 public:
47
48 StatsHandler();
49
50 enum StatsType
51 {
52 NO_STATS = 0,
53 FRAME_RATE = 1,
54 LAST = 2
55 };
56
57 void setKeyEventTogglesOnScreenStats(int key) { _keyEventTogglesOnScreenStats = key; }
58 int getKeyEventTogglesOnScreenStats() const { return _keyEventTogglesOnScreenStats; }
59
60 void setKeyEventPrintsOutStats(int key) { _keyEventPrintsOutStats = key; }
61 int getKeyEventPrintsOutStats() const { return _keyEventPrintsOutStats; }
62
63 double getBlockMultiplier() const { return _blockMultiplier; }
64
65 void reset();
66
67 osg::Camera* getCamera() { return _camera.get(); }
68 const osg::Camera* getCamera() const { return _camera.get(); }
69
70 virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa);
71
72 /** Get the keyboard and mouse usage of this manipulator.*/
73 virtual void getUsage(osg::ApplicationUsage& usage) const;
74
75 protected:
76
77 void setUpHUDCamera(osgViewer::ViewerBase* viewer);
78
79 osg::Geometry* createBackgroundRectangle(const osg::Vec3& pos, const float width, const float height, osg::Vec4& color);
80
81 osg::Geometry* createGeometry(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numBlocks);
82
83 osg::Geometry* createFrameMarkers(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numBlocks);
84
85 osg::Geometry* createTick(const osg::Vec3& pos, float height, const osg::Vec4& colour, unsigned int numTicks);
86
87 osg::Node* createCameraTimeStats(const std::string& font, osg::Vec3& pos, float startBlocks, bool acquireGPUStats, float characterSize, osg::Stats* viewerStats, osg::Camera* camera);
88
89 void setUpScene(osgViewer::Viewer* viewer);
90
91 int _keyEventTogglesOnScreenStats;
92 int _keyEventPrintsOutStats;
93
94 int _statsType;
95
96 bool _initialized;
97 osg::ref_ptr<osg::Camera> _camera;
98
99 osg::ref_ptr<osg::Switch> _switch;
100 osg::ref_ptr<osg::Group> _group;
101
102 unsigned int _frameRateChildNum;
103 unsigned int _numBlocks;
104 double _blockMultiplier;
105
106 float _statsWidth;
107 float _statsHeight;
108
109// std::map<std::string, StatAction > _actions;
110 };
111
112}
113#endif