1 commit 791273c61de23d2ec383a270db27015d235a9938
2 Author: Thomas Geymayer <tomgey@gmail.com>
3 Date: Sat Aug 9 17:18:21 2014 +0200
5 Update for OpenSceneGraph 3.3.2 API changes.
7 diff --git a/simgear/canvas/ODGauge.cxx b/simgear/canvas/ODGauge.cxx
8 index 5c547ea..4a2b7fa 100644
9 --- a/simgear/canvas/ODGauge.cxx
10 +++ b/simgear/canvas/ODGauge.cxx
12 #include <osg/ShadeModel>
13 #include <osg/StateSet>
14 #include <osg/FrameBufferObject> // for GL_DEPTH_STENCIL_EXT on Windows
15 +#include <osg/Version>
16 #include <osgUtil/RenderBin>
19 @@ -266,7 +267,15 @@ namespace canvas
20 //----------------------------------------------------------------------------
21 void ODGauge::reinit()
23 - osg::NodeCallback* cull_callback = camera ? camera->getCullCallback() : 0;
24 + osg::NodeCallback* cull_callback =
26 +#if OSG_VERSION_LESS_THAN(3,3,2)
27 + ? camera->getCullCallback()
29 + ? dynamic_cast<osg::NodeCallback*>(camera->getCullCallback())
34 allocRT(cull_callback);
36 diff --git a/simgear/canvas/elements/CanvasElement.cxx b/simgear/canvas/elements/CanvasElement.cxx
37 index 478cfb8..f895292 100644
38 --- a/simgear/canvas/elements/CanvasElement.cxx
39 +++ b/simgear/canvas/elements/CanvasElement.cxx
41 #include <osg/Drawable>
43 #include <osg/Scissor>
44 +#include <osg/Version>
46 #include <boost/algorithm/string/predicate.hpp>
47 #include <boost/foreach.hpp>
48 @@ -649,7 +650,11 @@ namespace canvas
49 osg::BoundingBox Element::getBoundingBox() const
52 +#if OSG_VERSION_LESS_THAN(3,3,2)
53 return _drawable->getBound();
55 + return _drawable->getBoundingBox();
60 @@ -672,7 +677,13 @@ namespace canvas
61 return osg::BoundingBox();
63 osg::BoundingBox transformed;
64 - const osg::BoundingBox& bb = _drawable->getBound();
65 + const osg::BoundingBox& bb =
66 +#if OSG_VERSION_LESS_THAN(3,3,2)
67 + _drawable->getBound();
69 + _drawable->getBoundingBox();
72 for(int i = 0; i < 4; ++i)
73 transformed.expandBy( bb.corner(i) * m );
75 diff --git a/simgear/canvas/elements/CanvasImage.cxx b/simgear/canvas/elements/CanvasImage.cxx
76 index 4f4ffc7..c89c71a 100644
77 --- a/simgear/canvas/elements/CanvasImage.cxx
78 +++ b/simgear/canvas/elements/CanvasImage.cxx
79 @@ -413,7 +413,14 @@ namespace canvas
80 && child->getNameString() == "visible"
81 && child->getBoolValue() )
83 - CullCallback* cb = static_cast<CullCallback*>(_geom->getCullCallback());
85 +#if OSG_VERSION_LESS_THAN(3,3,2)
86 + static_cast<CullCallback*>
88 + dynamic_cast<CullCallback*>
90 + ( _geom->getCullCallback() );
95 diff --git a/simgear/canvas/elements/CanvasPath.cxx b/simgear/canvas/elements/CanvasPath.cxx
96 index ba5351f..9eddcb3 100644
97 --- a/simgear/canvas/elements/CanvasPath.cxx
98 +++ b/simgear/canvas/elements/CanvasPath.cxx
100 #include <simgear/scene/util/parse_color.hxx>
102 #include <osg/Drawable>
103 +#include <osg/Version>
105 #include <vg/openvg.h>
107 @@ -372,7 +373,13 @@ namespace canvas
109 * Compute the bounding box
111 - virtual osg::BoundingBox computeBound() const
112 + virtual osg::BoundingBox
113 +#if OSG_VERSION_LESS_THAN(3,3,2)
116 + computeBoundingBox()
120 if( _path == VG_INVALID_HANDLE || (_attributes_dirty & PATH) )
121 return osg::BoundingBox();
122 diff --git a/simgear/canvas/elements/CanvasText.cxx b/simgear/canvas/elements/CanvasText.cxx
123 index ebe76d4..239383c 100644
124 --- a/simgear/canvas/elements/CanvasText.cxx
125 +++ b/simgear/canvas/elements/CanvasText.cxx
126 @@ -45,7 +45,13 @@ namespace canvas
127 SGVec2i sizeForWidth(int w) const;
128 osg::Vec2 handleHit(const osg::Vec2f& pos);
130 - virtual osg::BoundingBox computeBound() const;
131 + virtual osg::BoundingBox
132 +#if OSG_VERSION_LESS_THAN(3,3,2)
135 + computeBoundingBox()
141 @@ -467,9 +473,20 @@ namespace canvas
144 //----------------------------------------------------------------------------
145 - osg::BoundingBox Text::TextOSG::computeBound() const
147 +#if OSG_VERSION_LESS_THAN(3,3,2)
148 + Text::TextOSG::computeBound()
150 + Text::TextOSG::computeBoundingBox()
154 - osg::BoundingBox bb = osgText::Text::computeBound();
155 + osg::BoundingBox bb =
156 +#if OSG_VERSION_LESS_THAN(3,3,2)
157 + osgText::Text::computeBound();
159 + osgText::Text::computeBoundingBox();
162 #if OSG_VERSION_LESS_THAN(3,1,0)
164 diff --git a/simgear/scene/material/EffectGeode.hxx b/simgear/scene/material/EffectGeode.hxx
165 index 515b1a0..34b87e3 100644
166 --- a/simgear/scene/material/EffectGeode.hxx
167 +++ b/simgear/scene/material/EffectGeode.hxx
169 #define SIMGEAR_EFFECT_GEODE_HXX 1
172 +#include <osg/Version>
174 +#include <boost/iterator/iterator_adaptor.hpp>
176 #include "Effect.hxx"
178 @@ -25,7 +28,41 @@ namespace simgear
180 class EffectGeode : public osg::Geode
185 +#if OSG_VERSION_LESS_THAN(3,3,2)
186 + typedef DrawableList::iterator DrawablesIterator;
188 + class DrawablesIterator:
189 + public boost::iterator_adaptor<
191 + osg::NodeList::iterator,
192 + osg::ref_ptr<osg::Drawable>,
193 + boost::use_default,
194 + osg::ref_ptr<osg::Drawable> // No reference as Reference type.
195 + // The child list does not contain Drawable
196 + // ref_ptr so we can not return any
197 + // references to them.
202 + DrawablesIterator()
205 + explicit DrawablesIterator(osg::NodeList::iterator const& node_it):
206 + DrawablesIterator::iterator_adaptor_(node_it)
210 + friend class boost::iterator_core_access;
211 + osg::ref_ptr<osg::Drawable> dereference() const
213 + return base_reference()->get()->asDrawable();
219 EffectGeode(const EffectGeode& rhs,
220 const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
221 @@ -34,9 +71,15 @@ public:
222 void setEffect(Effect* effect);
223 virtual void resizeGLObjectBuffers(unsigned int maxSize);
224 virtual void releaseGLObjects(osg::State* = 0) const;
225 - typedef DrawableList::iterator DrawablesIterator;
227 +#if OSG_VERSION_LESS_THAN(3,3,2)
228 DrawablesIterator drawablesBegin() { return _drawables.begin(); }
229 DrawablesIterator drawablesEnd() { return _drawables.end(); }
231 + DrawablesIterator drawablesBegin() { return DrawablesIterator(_children.begin()); }
232 + DrawablesIterator drawablesEnd() { return DrawablesIterator(_children.end()); }
235 void runGenerators(osg::Geometry *geometry);
237 osg::ref_ptr<Effect> _effect;
238 diff --git a/simgear/scene/material/Technique.cxx b/simgear/scene/material/Technique.cxx
239 index d5d9b06..93a17b8 100644
240 --- a/simgear/scene/material/Technique.cxx
241 +++ b/simgear/scene/material/Technique.cxx
242 @@ -140,27 +140,40 @@ Technique::processDrawables(const EffectGeode::DrawablesIterator& begin,
243 EffectGeode::DrawablesIterator itr = begin;
245 = cv->getComputeNearFarMode() != CullVisitor::DO_NOT_COMPUTE_NEAR_FAR;
246 - for (int i = 0; i < NUM_DRAWABLES && itr != end; ++itr, ++i) {
247 - Drawable* drawable = itr->get();
248 - const BoundingBox& bb = drawable->getBound();
249 - if ((drawable->getCullCallback()
250 - && drawable->getCullCallback()->cull(cv, drawable,
251 - &cv->getRenderInfo()))
252 - || (isCullingActive && cv->isCulled(bb))) {
253 - depth[i] = FLT_MAX;
256 - if (computeNearFar && bb.valid()) {
257 - if (!cv->updateCalculatedNearFar(matrix, *drawable, false)) {
258 - depth[i] = FLT_MAX;
261 + for (int i = 0; i < NUM_DRAWABLES && itr != end; ++itr, ++i)
263 + Drawable* drawable = itr->get();
265 +#if OSG_VERSION_LESS_THAN(3,3,2)
266 + const BoundingBox& bb = drawable->getBound();
267 + osg::Drawable::CullCallback* cull = drawable->getCullCallback();
269 + const BoundingBox& bb = drawable->getBoundingBox();
270 + osg::Drawable::CullCallback* cull =
271 + dynamic_cast<osg::Drawable::CullCallback*>(drawable->getCullCallback());
274 + if( (cull && cull->cull(cv, drawable, &cv->getRenderInfo()))
275 + || (isCullingActive && cv->isCulled(bb)) )
277 + depth[i] = FLT_MAX;
281 + if( computeNearFar && bb.valid() )
283 + if( !cv->updateCalculatedNearFar(matrix, *drawable, false) )
285 + depth[i] = FLT_MAX;
288 - depth[i] = (bb.valid()
289 - ? cv->getDistanceFromEyePoint(bb.center(), false)
291 - if (isNaN(depth[i]))
292 - depth[i] = FLT_MAX;
295 + depth[i] = bb.valid()
296 + ? cv->getDistanceFromEyePoint(bb.center(), false)
298 + if( isNaN(depth[i]) )
299 + depth[i] = FLT_MAX;
301 EffectCullVisitor* ecv = dynamic_cast<EffectCullVisitor*>( cv );
302 EffectGeode::DrawablesIterator drawablesEnd = itr;
303 diff --git a/simgear/scene/sky/CloudShaderGeometry.hxx b/simgear/scene/sky/CloudShaderGeometry.hxx
304 index 20d0db8..6d78af2 100644
305 --- a/simgear/scene/sky/CloudShaderGeometry.hxx
306 +++ b/simgear/scene/sky/CloudShaderGeometry.hxx
307 @@ -95,7 +95,13 @@ class CloudShaderGeometry : public osg::Drawable
308 { return _cloudsprites[i]; }
310 virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
311 - virtual osg::BoundingBox computeBound() const
312 + virtual osg::BoundingBox
313 +#if OSG_VERSION_LESS_THAN(3,3,2)
316 + computeBoundingBox()
322 diff --git a/simgear/scene/tgdb/SGVasiDrawable.cxx b/simgear/scene/tgdb/SGVasiDrawable.cxx
323 index bb3ce0e..d66474f 100644
324 --- a/simgear/scene/tgdb/SGVasiDrawable.cxx
325 +++ b/simgear/scene/tgdb/SGVasiDrawable.cxx
326 @@ -104,7 +104,12 @@ SGVasiDrawable::drawImplementation(osg::RenderInfo& renderInfo) const
330 -SGVasiDrawable::computeBound() const
331 +#if OSG_VERSION_LESS_THAN(3,3,2)
332 +SGVasiDrawable::computeBound()
334 +SGVasiDrawable::computeBoundingBox()
339 for (unsigned i = 0; i < _lights.size(); ++i)
340 diff --git a/simgear/scene/tgdb/SGVasiDrawable.hxx b/simgear/scene/tgdb/SGVasiDrawable.hxx
341 index 242e393..e4b0479 100644
342 --- a/simgear/scene/tgdb/SGVasiDrawable.hxx
343 +++ b/simgear/scene/tgdb/SGVasiDrawable.hxx
345 #define _SG_VASI_DRAWABLE_HXX
347 #include <simgear/compiler.h>
348 +#include <simgear/math/SGMath.hxx>
350 #include <osg/Drawable>
351 -#include <simgear/math/SGMath.hxx>
352 +#include <osg/Version>
354 class SGVasiDrawable : public osg::Drawable {
356 @@ -49,7 +50,13 @@ public:
359 virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
360 - virtual osg::BoundingBox computeBound() const;
361 + virtual osg::BoundingBox
362 +#if OSG_VERSION_LESS_THAN(3,3,2)
365 + computeBoundingBox()
370 SGVec4f getColor(float angleDeg) const;
371 diff --git a/simgear/scene/tgdb/ShaderGeometry.cxx b/simgear/scene/tgdb/ShaderGeometry.cxx
372 index 36a3093..5d286c3 100644
373 --- a/simgear/scene/tgdb/ShaderGeometry.cxx
374 +++ b/simgear/scene/tgdb/ShaderGeometry.cxx
375 @@ -60,9 +60,21 @@ void ShaderGeometry::drawImplementation(osg::RenderInfo& renderInfo) const
379 -BoundingBox ShaderGeometry::computeBound() const
381 +#if OSG_VERSION_LESS_THAN(3,3,2)
382 +ShaderGeometry::computeBound()
384 +ShaderGeometry::computeBoundingBox()
388 - const BoundingBox& geom_box = _geometry->getBound();
389 + const BoundingBox& geom_box =
390 +#if OSG_VERSION_LESS_THAN(3,3,2)
391 + _geometry->getBound();
393 + _geometry->getBoundingBox();
397 const Vec4Array* posScales = _posScaleArray.get();
399 diff --git a/simgear/scene/tgdb/ShaderGeometry.hxx b/simgear/scene/tgdb/ShaderGeometry.hxx
400 index 30c72fb..a5de095 100644
401 --- a/simgear/scene/tgdb/ShaderGeometry.hxx
402 +++ b/simgear/scene/tgdb/ShaderGeometry.hxx
403 @@ -58,8 +58,15 @@ class ShaderGeometry : public osg::Drawable
404 META_Object(flightgear, ShaderGeometry);
406 virtual void drawImplementation(osg::RenderInfo& renderInfo) const;
407 - virtual osg::BoundingBox computeBound() const;
409 + virtual osg::BoundingBox
410 +#if OSG_VERSION_LESS_THAN(3,3,2)
413 + computeBoundingBox()
417 void setGeometry(osg::Geometry* geometry)
419 _geometry = geometry;
420 diff --git a/simgear/scene/util/SGEnlargeBoundingBox.cxx b/simgear/scene/util/SGEnlargeBoundingBox.cxx
421 index 8e5d8f3..5ff1985 100644
422 --- a/simgear/scene/util/SGEnlargeBoundingBox.cxx
423 +++ b/simgear/scene/util/SGEnlargeBoundingBox.cxx
427 #include "SGEnlargeBoundingBox.hxx"
429 #include <osg/Drawable>
430 +#include <osg/Version>
432 SGEnlargeBoundingBox::SGEnlargeBoundingBox(float offset) :
434 @@ -41,7 +43,13 @@ SGEnlargeBoundingBox::SGEnlargeBoundingBox(const SGEnlargeBoundingBox& cb,
436 SGEnlargeBoundingBox::computeBound(const osg::Drawable& drawable) const
438 - osg::BoundingBox bound = drawable.computeBound();
439 + osg::BoundingBox bound =
440 +#if OSG_VERSION_LESS_THAN(3,3,2)
441 + drawable.computeBound();
443 + drawable.computeBoundingBox();
448 return osg::BoundingBox(bound._min - osg::Vec3(_offset, _offset, _offset),
449 diff --git a/simgear/scene/util/UpdateOnceCallback.cxx b/simgear/scene/util/UpdateOnceCallback.cxx
450 index 2615df4..99d0192 100644
451 --- a/simgear/scene/util/UpdateOnceCallback.cxx
452 +++ b/simgear/scene/util/UpdateOnceCallback.cxx
454 #include "UpdateOnceCallback.hxx"
457 +#include <osg/NodeVisitor>
461 commit 68d0891665683cbe115c0689a9f17f4aa078cf56
462 Author: Thomas Geymayer <tomgey@gmail.com>
463 Date: Sun Aug 10 15:36:27 2014 +0200
465 Canvas: fix element mouse hit detection with OSG 3.3.2.
467 diff --git a/simgear/canvas/elements/CanvasElement.cxx b/simgear/canvas/elements/CanvasElement.cxx
468 index f895292..6d8c930 100644
469 --- a/simgear/canvas/elements/CanvasElement.cxx
470 +++ b/simgear/canvas/elements/CanvasElement.cxx
471 @@ -398,7 +398,13 @@ namespace canvas
473 // Drawables have a bounding box...
475 - return _drawable->getBound().contains(osg::Vec3f(local_pos, 0));
477 +#if OSG_VERSION_LESS_THAN(3,3,2)
482 + .contains(osg::Vec3f(local_pos, 0));
483 else if( _transform.valid() )
484 // ... for other elements, i.e. groups only a bounding sphere is available
485 return _transform->getBound().contains(osg::Vec3f(parent_pos, 0));