]> git.mxchange.org Git - simgear.git/blob - simgear/canvas/ODGauge.hxx
Refactor Canvas and add some helpers.
[simgear.git] / simgear / canvas / ODGauge.hxx
1 // Owner Drawn Gauge helper class
2 //
3 // Written by Harald JOHNSEN, started May 2005.
4 //
5 // Copyright (C) 2005  Harald JOHNSEN - hjohnsen@evc.net
6 //
7 // Ported to OSG by Tim Moore - Jun 2007
8 //
9 // Heavily modified to be usable for the 2d Canvas by Thomas Geymayer - April 2012
10 // Supports now multisampling/mipmapping, usage of the stencil buffer and placing
11 // the texture in the scene by certain filter criteria
12 //
13 // This library is free software; you can redistribute it and/or
14 // modify it under the terms of the GNU Library General Public
15 // License as published by the Free Software Foundation; either
16 // version 2 of the License, or (at your option) any later version.
17 //
18 // This library is distributed in the hope that it will be useful,
19 // but WITHOUT ANY WARRANTY; without even the implied warranty of
20 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21 // Library General Public License for more details.
22 //
23 // You should have received a copy of the GNU Library General Public
24 // License along with this library; if not, write to the Free Software
25 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
26
27 #ifndef _SG_OD_GAUGE_HXX
28 #define _SG_OD_GAUGE_HXX
29
30 #include "canvas_fwd.hxx"
31
32 #include <osg/NodeCallback>
33 #include <osg/Group>
34
35 namespace osg
36 {
37   class Camera;
38   class Texture2D;
39 }
40
41 namespace simgear
42 {
43 namespace canvas
44 {
45
46   /**
47    * Owner Drawn Gauge (aka render-to-texture) helper class
48    */
49   class ODGauge
50   {
51     public:
52
53       ODGauge();
54       virtual ~ODGauge();
55
56       void setSystemAdapter(const SystemAdapterPtr& system_adapter);
57
58       /**
59        * Set the size of the render target.
60        *
61        * @param size_x    X size
62        * @param size_y    Y size. Defaults to size_x if not specified
63        */
64       void setSize(int size_x, int size_y = -1);
65
66       /**
67        * Set the size of the viewport
68        *
69        * @param width
70        * @param height    Defaults to width if not specified
71        */
72       void setViewSize(int width, int height = -1);
73
74       /**
75        * DEPRECATED
76        *
77        * Get size of squared texture
78        */
79       int size() const { return _size_x; }
80
81       /**
82        * Set whether to use image coordinates or not.
83        *
84        * Default: origin == center of texture
85        * Image Coords: origin == top left corner
86        */
87       void useImageCoords(bool use = true);
88
89       /**
90        * Enable/Disable using a stencil buffer
91        */
92       void useStencil(bool use = true);
93
94       /**
95        * Set sampling parameters for mipmapping and coverage sampling
96        * antialiasing.
97        *
98        * @note color_samples is not allowed to be higher than coverage_samples
99        *
100        */
101       void setSampling( bool mipmapping,
102                         int coverage_samples = 0,
103                         int color_samples = 0 );
104
105       /**
106        * Enable/Disable updating the texture (If disabled the contents of the
107        * texture remains with the outcome of the last rendering pass)
108        */
109       void setRender(bool render);
110
111       /**
112        * Say if we can render to a texture.
113        * @return true if rtt is available
114        */
115       bool serviceable(void);
116
117       /**
118        * Get the OSG camera for drawing this gauge.
119        */
120       osg::Camera* getCamera() const { return camera.get(); }
121
122       osg::Texture2D* getTexture() const { return texture.get(); }
123
124       // Real initialization function. Bad name.
125       void allocRT(osg::NodeCallback* camera_cull_callback = 0);
126
127     protected:
128
129       SystemAdapterPtr _system_adapter;
130
131       int _size_x,
132           _size_y,
133           _view_width,
134           _view_height;
135       bool _use_image_coords,
136            _use_stencil,
137            _use_mipmapping;
138
139       // Multisampling parameters
140       int  _coverage_samples,
141            _color_samples;
142
143       bool rtAvailable;
144       osg::ref_ptr<osg::Camera> camera;
145       osg::ref_ptr<osg::Texture2D> texture;
146
147       void updateCoordinateFrame();
148       void updateStencil();
149       void updateSampling();
150
151   };
152
153 } // namespace canvas
154 } // namespace simgear
155
156 #endif // _SG_OD_GAUGE_HXX