[osgearth] 02/09: New upstream version 2.9.0+dfsg
Bas Couwenberg
sebastic at debian.org
Wed Feb 7 19:44:23 UTC 2018
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch master
in repository osgearth.
commit 469256725409788bfb8d4c776655c690418d4c1a
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Wed Feb 7 18:48:59 2018 +0100
New upstream version 2.9.0+dfsg
---
CMakeModules/FindRocksDB.cmake | 6 +--
src/applications/osgearth_manip/osgearth_manip.cpp | 5 +++
src/osgEarth/Map.cpp | 4 +-
src/osgEarth/MapNode.cpp | 4 ++
src/osgEarth/Registry | 13 ++++--
src/osgEarth/Registry.cpp | 39 +++++++++++++++++-
src/osgEarth/ResourceReleaser | 4 ++
src/osgEarth/ResourceReleaser.cpp | 27 +++++++++----
src/osgEarth/SceneGraphCallback | 2 +-
src/osgEarth/SceneGraphCallback.cpp | 18 ++++-----
src/osgEarth/SpatialReference | 9 +++--
src/osgEarth/SpatialReference.cpp | 46 ++++++----------------
src/osgEarth/StateSetCache.cpp | 1 +
src/osgEarth/Version | 2 +-
src/osgEarth/VirtualProgram.cpp | 4 ++
src/osgEarthDrivers/engine_rex/GeometryPool.cpp | 4 +-
src/osgEarthDrivers/engine_rex/MaskGenerator.cpp | 6 ++-
.../engine_rex/RexTerrainEngineNode.cpp | 4 ++
src/osgEarthDrivers/engine_rex/TileNode | 2 +
src/osgEarthDrivers/engine_rex/TileNode.cpp | 16 +++++++-
src/osgEarthDrivers/wms/ReaderWriterWMS.cpp | 4 +-
src/osgEarthTriton/TritonContext | 2 +
src/osgEarthTriton/TritonContext.cpp | 8 ++++
src/osgEarthUtil/Controls.cpp | 4 +-
src/osgEarthUtil/EarthManipulator.cpp | 15 ++++++-
src/osgEarthUtil/TMS.cpp | 2 +-
tests/boston.earth | 6 +--
27 files changed, 172 insertions(+), 85 deletions(-)
diff --git a/CMakeModules/FindRocksDB.cmake b/CMakeModules/FindRocksDB.cmake
index 17fb335..868228b 100644
--- a/CMakeModules/FindRocksDB.cmake
+++ b/CMakeModules/FindRocksDB.cmake
@@ -5,11 +5,9 @@ SET(ROCKSDB_DIR "" CACHE PATH "Root directory of RocksDB distribution")
FIND_PATH(ROCKSDB_INCLUDE_DIR rocksdb/db.h
PATHS
${ROCKSDB_DIR}
- NO_DEFAULT_PATH
- PATH_SUFFIXES include
)
-find_library(ROCKSDB_LIBRARY NAMES ROCKSDBLIB
+find_library(ROCKSDB_LIBRARY NAMES ROCKSDBLIB rocksdb
PATHS
${ROCKSDB_DIR}
${ROCKSDB_DIR}/bin/Release
@@ -18,7 +16,7 @@ find_library(ROCKSDB_LIBRARY NAMES ROCKSDBLIB
)
-find_library(ROCKSDB_LIBRARY_DEBUG NAMES ROCKSDBLIB
+find_library(ROCKSDB_LIBRARY_DEBUG NAMES ROCKSDBLIB rocksdb
PATHS
${ROCKSDB_DIR}
${ROCKSDB_DIR}/bin/Debug
diff --git a/src/applications/osgearth_manip/osgearth_manip.cpp b/src/applications/osgearth_manip/osgearth_manip.cpp
index 9e89536..e0c874b 100644
--- a/src/applications/osgearth_manip/osgearth_manip.cpp
+++ b/src/applications/osgearth_manip/osgearth_manip.cpp
@@ -724,6 +724,11 @@ int main(int argc, char** argv)
osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON,
osgGA::GUIEventAdapter::MODKEY_SHIFT );
+ manip->getSettings()->bindMouseClick(
+ EarthManipulator::ACTION_GOTO,
+ osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON,
+ osgGA::GUIEventAdapter::MODKEY_SHIFT);
+
manip->getSettings()->setArcViewpointTransitions( true );
manip->setTetherCallback( new TetherCB() );
diff --git a/src/osgEarth/Map.cpp b/src/osgEarth/Map.cpp
index 03a55bc..c99c452 100644
--- a/src/osgEarth/Map.cpp
+++ b/src/osgEarth/Map.cpp
@@ -640,8 +640,8 @@ Map::calculateProfile()
if (!profile.valid())
{
- OE_WARN << LC << "No profile information available; defaulting to Mercator projection\n";
- profile = Registry::instance()->getGlobalMercatorProfile();
+ OE_WARN << LC << "No profile information available; defaulting to Spherical Mercator projection\n";
+ profile = Registry::instance()->getSphericalMercatorProfile();
}
}
diff --git a/src/osgEarth/MapNode.cpp b/src/osgEarth/MapNode.cpp
index 15c36c9..3ab915e 100644
--- a/src/osgEarth/MapNode.cpp
+++ b/src/osgEarth/MapNode.cpp
@@ -806,6 +806,8 @@ MapNode::traverse( osg::NodeVisitor& nv )
void
MapNode::resizeGLObjectBuffers(unsigned maxSize)
{
+ osg::Group::resizeGLObjectBuffers(maxSize);
+
LayerVector layers;
getMap()->getLayers(layers);
for (LayerVector::const_iterator i = layers.begin(); i != layers.end(); ++i)
@@ -819,6 +821,8 @@ MapNode::resizeGLObjectBuffers(unsigned maxSize)
void
MapNode::releaseGLObjects(osg::State* state) const
{
+ osg::Group::releaseGLObjects(state);
+
LayerVector layers;
getMap()->getLayers(layers);
for (LayerVector::const_iterator i = layers.begin(); i != layers.end(); ++i)
diff --git a/src/osgEarth/Registry b/src/osgEarth/Registry
index 1dd7ec0..597280f 100644
--- a/src/osgEarth/Registry
+++ b/src/osgEarth/Registry
@@ -29,6 +29,7 @@
#include <OpenThreads/ReentrantMutex>
#include <OpenThreads/ScopedLock>
#include <osgEarth/ThreadingUtils>
+#include <osgEarth/SpatialReference>
#include <osg/Referenced>
#include <osg/OperationThread>
#include <set>
@@ -68,22 +69,24 @@ namespace osgEarth
static Registry* instance(bool erase = false);
-
/** Gets a well-known named profile instance. */
const Profile* getNamedProfile( const std::string& name ) const;
/** Gets the global-geodetic builtin profile */
const Profile* getGlobalGeodeticProfile() const;
- /** Gets the global-meractor builtin profile (mercator/WGS84 datum) */
+ /** @deprecated Gets the global-meractor builtin profile (mercator/WGS84 datum) */
const Profile* getGlobalMercatorProfile() const;
/** Gets the spherical-mercator builtin profile (mercator/sphere) */
const Profile* getSphericalMercatorProfile() const;
- /** Gets the unified cube builtin profile */
+ /** @deprecated Gets the unified cube builtin profile */
const Profile* getCubeProfile() const;
+ /** Gets a spatial reference object */
+ SpatialReference* getOrCreateSRS(const SpatialReference::Key& key);
+
/** Access to the application-wide GDAL serialization mutex. GDAL is not thread-safe. */
OpenThreads::ReentrantMutex& getGDALMutex();
@@ -372,6 +375,10 @@ namespace osgEarth
unsigned _threadPoolSize;
float _devicePixelRatio;
+
+ typedef std::map<SpatialReference::Key, osg::ref_ptr<SpatialReference> > SRSCache;
+ mutable SRSCache _srsCache;
+ mutable Threading::Mutex _srsMutex;
};
}
diff --git a/src/osgEarth/Registry.cpp b/src/osgEarth/Registry.cpp
index 97e8c8d..38c249a 100644
--- a/src/osgEarth/Registry.cpp
+++ b/src/osgEarth/Registry.cpp
@@ -173,6 +173,15 @@ _devicePixelRatio(1.0f)
Registry::~Registry()
{
+ OE_DEBUG << LC << "Registry shutting down...\n";
+ _srsMutex.lock();
+ _srsCache.clear();
+ _srsMutex.unlock();
+ _global_geodetic_profile = 0L;
+ _spherical_mercator_profile = 0L;
+ _cube_profile = 0L;
+ OE_DEBUG << LC << "Registry shutdown complete.\n";
+
// pop the custom error handler
CPLPopErrorHandler();
}
@@ -180,6 +189,10 @@ Registry::~Registry()
Registry*
Registry::instance(bool erase)
{
+ // Make sure the gdal mutex is created before the Registry so it will still be around when the registry is destroyed statically.
+ // This is to prevent crash on exit where the gdal mutex is deleted before the registry is.
+ osgEarth::getGDALMutex();
+
static osg::ref_ptr<Registry> s_registry = new Registry;
if (erase)
@@ -194,7 +207,7 @@ Registry::instance(bool erase)
void
Registry::destruct()
{
- //nop
+ //NOP
}
OpenThreads::ReentrantMutex& osgEarth::getGDALMutex()
@@ -283,6 +296,30 @@ Registry::getNamedProfile( const std::string& name ) const
return NULL;
}
+SpatialReference*
+Registry::getOrCreateSRS(const SpatialReference::Key& key)
+{
+ Threading::ScopedMutexLock exclusiveLock(_srsMutex);
+
+ SpatialReference* srs;
+
+ SRSCache::iterator i = _srsCache.find(key);
+ if (i != _srsCache.end())
+ {
+ srs = i->second.get();
+ }
+ else
+ {
+ srs = SpatialReference::create(key);
+ if (srs)
+ {
+ _srsCache[key] = srs;
+ }
+ }
+
+ return srs;
+}
+
void
Registry::setDefaultCachePolicy( const CachePolicy& value )
{
diff --git a/src/osgEarth/ResourceReleaser b/src/osgEarth/ResourceReleaser
index b781761..88f2f31 100644
--- a/src/osgEarth/ResourceReleaser
+++ b/src/osgEarth/ResourceReleaser
@@ -49,6 +49,10 @@ namespace osgEarth
/** Calls releaseGLObjects() on all objects in the list, then clears the list. */
void drawImplementation(osg::RenderInfo& ri) const;
+ public: // osg::Node
+
+ void releaseGLObjects(osg::State* state) const;
+
private:
mutable ObjectList _toRelease;
mutable Threading::Mutex _mutex;
diff --git a/src/osgEarth/ResourceReleaser.cpp b/src/osgEarth/ResourceReleaser.cpp
index 7b7b7bc..fd304e5 100644
--- a/src/osgEarth/ResourceReleaser.cpp
+++ b/src/osgEarth/ResourceReleaser.cpp
@@ -19,6 +19,9 @@
#include <osgEarth/ResourceReleaser>
#include <osgEarth/Metrics>
#include <osg/Version>
+#if OSG_VERSION_GREATER_OR_EQUAL(3,5,0)
+#include <osg/ContextData>
+#endif
using namespace osgEarth;
@@ -38,24 +41,34 @@ ResourceReleaser::ResourceReleaser()
}
void
-ResourceReleaser::push(osg::Object* node)
+ResourceReleaser::push(osg::Object* object)
{
Threading::ScopedMutexLock lock(_mutex);
- _toRelease.push_back(node);
+
+ _toRelease.push_back(object);
}
void
-ResourceReleaser::push(const ObjectList& nodes)
+ResourceReleaser::push(const ObjectList& objects)
{
Threading::ScopedMutexLock lock(_mutex);
- _toRelease.reserve(_toRelease.size() + nodes.size());
- for (unsigned i = 0; i<nodes.size(); ++i)
- _toRelease.push_back(nodes[i].get());
+
+ _toRelease.reserve(_toRelease.size() + objects.size());
+ for (unsigned i = 0; i<objects.size(); ++i)
+ _toRelease.push_back(objects[i].get());
}
void
ResourceReleaser::drawImplementation(osg::RenderInfo& ri) const
{
+ releaseGLObjects(ri.getState());
+}
+
+void
+ResourceReleaser::releaseGLObjects(osg::State* state) const
+{
+ osg::Drawable::releaseGLObjects(state);
+
if (!_toRelease.empty())
{
Threading::ScopedMutexLock lock(_mutex);
@@ -65,7 +78,7 @@ ResourceReleaser::drawImplementation(osg::RenderInfo& ri) const
for (ObjectList::const_iterator i = _toRelease.begin(); i != _toRelease.end(); ++i)
{
osg::Object* object = i->get();
- object->releaseGLObjects(ri.getState());
+ object->releaseGLObjects(state);
}
OE_DEBUG << LC << "Released " << _toRelease.size() << " objects\n";
_toRelease.clear();
diff --git a/src/osgEarth/SceneGraphCallback b/src/osgEarth/SceneGraphCallback
index 51fe3ee..6ea0cac 100644
--- a/src/osgEarth/SceneGraphCallback
+++ b/src/osgEarth/SceneGraphCallback
@@ -105,7 +105,7 @@ namespace osgEarth
virtual bool addChild(osg::Node* child);
virtual bool insertChild(unsigned index, osg::Node* child);
virtual bool replaceChild(osg::Node* origChild, osg::Node* newChild);
- virtual bool removeChild(osg::Node* child);
+ virtual void childRemoved(unsigned pos, unsigned num);
private:
osg::observer_ptr<SceneGraphCallbacks> _host;
diff --git a/src/osgEarth/SceneGraphCallback.cpp b/src/osgEarth/SceneGraphCallback.cpp
index 3884f65..094aa82 100644
--- a/src/osgEarth/SceneGraphCallback.cpp
+++ b/src/osgEarth/SceneGraphCallback.cpp
@@ -133,17 +133,15 @@ PagedLODWithSceneGraphCallbacks::replaceChild(osg::Node* oldChild, osg::Node* ne
return ok;
}
-bool
-PagedLODWithSceneGraphCallbacks::removeChild(osg::Node* child)
+void
+PagedLODWithSceneGraphCallbacks::childRemoved(unsigned pos, unsigned num)
{
- bool ok = false;
- if (child)
+ osg::ref_ptr<SceneGraphCallbacks> host;
+ if (_host.lock(host))
{
- osg::ref_ptr<osg::Node> node = child;
- ok = osg::PagedLOD::removeChild(child);
- osg::ref_ptr<SceneGraphCallbacks> host;
- if (_host.lock(host))
- host->fireRemoveNode(node.get());
+ for (unsigned i = pos; i < pos + num; ++i)
+ {
+ host->fireRemoveNode(getChild(i));
+ }
}
- return ok;
}
diff --git a/src/osgEarth/SpatialReference b/src/osgEarth/SpatialReference
index 081c155..0f5c044 100644
--- a/src/osgEarth/SpatialReference
+++ b/src/osgEarth/SpatialReference
@@ -395,13 +395,12 @@ namespace osgEarth
const SpatialReference* outputSRS,
bool pointsAreGeodetic) const;
- typedef std::map<Key, osg::ref_ptr<SpatialReference> > SRSCache;
- static SRSCache& getSRSCache();
-
private:
- static SpatialReference* create( const Key& key, bool useCache );
+ static SpatialReference* create(const Key& key);
+
+ static SpatialReference* create(const Key& key, bool useCache);
static SpatialReference* createFromWKT(
const std::string& wkt,
@@ -419,6 +418,8 @@ namespace osgEarth
SpatialReference* fixWKT();
+
+ friend class Registry;
};
}
diff --git a/src/osgEarth/SpatialReference.cpp b/src/osgEarth/SpatialReference.cpp
index cf7c719..5260fd8 100644
--- a/src/osgEarth/SpatialReference.cpp
+++ b/src/osgEarth/SpatialReference.cpp
@@ -75,14 +75,6 @@ namespace
//------------------------------------------------------------------------
-SpatialReference::SRSCache& SpatialReference::getSRSCache()
-{
- //Make sure the registry is created before the cache
- osgEarth::Registry::instance();
- static SRSCache s_cache;
- return s_cache;
-}
-
SpatialReference*
SpatialReference::createFromPROJ4( const std::string& proj4, const std::string& name )
{
@@ -174,32 +166,15 @@ SpatialReference::createFromUserInput( const std::string& input, const std::stri
SpatialReference*
SpatialReference::create( const std::string& horiz, const std::string& vert )
{
- return create( Key(horiz, vert), true );
+ return Registry::instance()->getOrCreateSRS( Key(horiz, vert) );
}
SpatialReference*
-SpatialReference::create( const Key& key, bool useCache )
+SpatialReference::create(const Key& key)
{
- // serialized access to SRS creation.
- static Threading::Mutex s_mutex;
- Threading::ScopedMutexLock exclusive(s_mutex);
-
- // first, check the SRS cache to see if it already exists:
- if ( useCache )
- {
- SRSCache::iterator itr = getSRSCache().find(key);
- if (itr != getSRSCache().end())
- {
- return itr->second.get();
- }
- }
-
// now try to resolve the horizontal SRS:
osg::ref_ptr<SpatialReference> srs;
- //const std::string& horiz = key.first;
- //const std::string& vert = key.second;
-
// shortcut for spherical-mercator:
if (key.horizLower == "spherical-mercator" ||
key.horizLower == "epsg:900913" ||
@@ -295,13 +270,7 @@ SpatialReference::create( const Key& key, bool useCache )
srs->_key = key;
- if ( useCache )
- {
- // cache it - each unique SRS only exists once.
- getSRSCache()[key] = srs;
- }
-
- return useCache ? srs.get() : srs.release();
+ return srs.release();
}
SpatialReference*
@@ -424,7 +393,14 @@ SpatialReference::~SpatialReference()
{
if ( _handle )
{
- GDAL_SCOPED_LOCK;
+ if (_initialized)
+ {
+ OE_DEBUG << LC << "Destroying " << getName() << std::endl;
+ }
+ else
+ {
+ OE_DEBUG << LC << "Destroying [unitialized SRS]" << std::endl;
+ }
for (TransformHandleCache::iterator itr = _transformHandleCache.begin(); itr != _transformHandleCache.end(); ++itr)
{
diff --git a/src/osgEarth/StateSetCache.cpp b/src/osgEarth/StateSetCache.cpp
index 26c1d7f..699f990 100644
--- a/src/osgEarth/StateSetCache.cpp
+++ b/src/osgEarth/StateSetCache.cpp
@@ -459,6 +459,7 @@ StateSetCache::clear()
{
Threading::ScopedMutexLock lock( _mutex );
+ prune();
_stateAttributeCache.clear();
_stateSetCache.clear();
}
diff --git a/src/osgEarth/Version b/src/osgEarth/Version
index 31d9cca..04baf8e 100644
--- a/src/osgEarth/Version
+++ b/src/osgEarth/Version
@@ -31,7 +31,7 @@ extern "C" {
#define OSGEARTH_MINOR_VERSION 9
#define OSGEARTH_PATCH_VERSION 0
#define OSGEARTH_SOVERSION 0
-#define OSGEARTH_RC_VERSION 3
+#define OSGEARTH_RC_VERSION 0
#define OSGEARTH_DEVEL_VERSION 0 // 0 = release; >0 = interim devel version
/* Convenience macro that can be used to decide whether a feature is present or not i.e.
diff --git a/src/osgEarth/VirtualProgram.cpp b/src/osgEarth/VirtualProgram.cpp
index 873f79a..81840cf 100644
--- a/src/osgEarth/VirtualProgram.cpp
+++ b/src/osgEarth/VirtualProgram.cpp
@@ -910,6 +910,8 @@ VirtualProgram::compileGLObjects(osg::State& state) const
void
VirtualProgram::resizeGLObjectBuffers(unsigned maxSize)
{
+ osg::StateAttribute::resizeGLObjectBuffers(maxSize);
+
_programCacheMutex.lock();
for (ProgramMap::iterator i = _programCache.begin(); i != _programCache.end(); ++i)
@@ -932,6 +934,8 @@ VirtualProgram::resizeGLObjectBuffers(unsigned maxSize)
void
VirtualProgram::releaseGLObjects(osg::State* state) const
{
+ osg::StateAttribute::releaseGLObjects(state);
+
_programCacheMutex.lock();
for (ProgramMap::const_iterator i = _programCache.begin(); i != _programCache.end(); ++i)
diff --git a/src/osgEarthDrivers/engine_rex/GeometryPool.cpp b/src/osgEarthDrivers/engine_rex/GeometryPool.cpp
index 0e1be98..cf3ee3f 100644
--- a/src/osgEarthDrivers/engine_rex/GeometryPool.cpp
+++ b/src/osgEarthDrivers/engine_rex/GeometryPool.cpp
@@ -717,7 +717,7 @@ void SharedGeometry::compileGLObjects(osg::RenderInfo& renderInfo) const
void SharedGeometry::resizeGLObjectBuffers(unsigned int maxSize)
{
- Drawable::resizeGLObjectBuffers(maxSize);
+ osg::Drawable::resizeGLObjectBuffers(maxSize);
osg::BufferObject* vbo = _vertexArray->getVertexBufferObject();
if (vbo) vbo->resizeGLObjectBuffers(maxSize);
@@ -728,7 +728,7 @@ void SharedGeometry::resizeGLObjectBuffers(unsigned int maxSize)
void SharedGeometry::releaseGLObjects(osg::State* state) const
{
- Drawable::releaseGLObjects(state);
+ osg::Drawable::releaseGLObjects(state);
osg::BufferObject* vbo = _vertexArray->getVertexBufferObject();
if (vbo) vbo->releaseGLObjects(state);
diff --git a/src/osgEarthDrivers/engine_rex/MaskGenerator.cpp b/src/osgEarthDrivers/engine_rex/MaskGenerator.cpp
index 2c17f74..58dad4d 100644
--- a/src/osgEarthDrivers/engine_rex/MaskGenerator.cpp
+++ b/src/osgEarthDrivers/engine_rex/MaskGenerator.cpp
@@ -547,8 +547,10 @@ MaskGenerator::createMaskPrimitives(const MapInfo& mapInfo,
}
}
- if (!isZSet[count])
- OE_WARN << LC << "Z-value not set for mask constraint vertex" << std::endl;
+ if (isZSet[count] == 0)
+ {
+ OE_INFO << LC << "Z-value not set for mask constraint vertex" << std::endl;
+ }
count++;
}
diff --git a/src/osgEarthDrivers/engine_rex/RexTerrainEngineNode.cpp b/src/osgEarthDrivers/engine_rex/RexTerrainEngineNode.cpp
index 05b1b5f..7671f97 100644
--- a/src/osgEarthDrivers/engine_rex/RexTerrainEngineNode.cpp
+++ b/src/osgEarthDrivers/engine_rex/RexTerrainEngineNode.cpp
@@ -193,6 +193,8 @@ RexTerrainEngineNode::~RexTerrainEngineNode()
void
RexTerrainEngineNode::resizeGLObjectBuffers(unsigned maxSize)
{
+ TerrainEngineNode::resizeGLObjectBuffers(maxSize);
+
getStateSet()->resizeGLObjectBuffers(maxSize);
_terrain->getStateSet()->resizeGLObjectBuffers(maxSize);
@@ -213,6 +215,8 @@ RexTerrainEngineNode::resizeGLObjectBuffers(unsigned maxSize)
void
RexTerrainEngineNode::releaseGLObjects(osg::State* state) const
{
+ TerrainEngineNode::releaseGLObjects(state);
+
getStateSet()->releaseGLObjects(state);
_terrain->getStateSet()->releaseGLObjects(state);
diff --git a/src/osgEarthDrivers/engine_rex/TileNode b/src/osgEarthDrivers/engine_rex/TileNode
index 7816c77..85be470 100644
--- a/src/osgEarthDrivers/engine_rex/TileNode
+++ b/src/osgEarthDrivers/engine_rex/TileNode
@@ -126,6 +126,8 @@ namespace osgEarth { namespace Drivers { namespace RexTerrainEngine
void traverse(osg::NodeVisitor& nv);
+ void resizeGLObjectBuffers(unsigned maxSize);
+
void releaseGLObjects(osg::State* state) const;
protected:
diff --git a/src/osgEarthDrivers/engine_rex/TileNode.cpp b/src/osgEarthDrivers/engine_rex/TileNode.cpp
index 58585b0..43c7c38 100644
--- a/src/osgEarthDrivers/engine_rex/TileNode.cpp
+++ b/src/osgEarthDrivers/engine_rex/TileNode.cpp
@@ -304,7 +304,7 @@ TileNode::setDirty(bool value)
void
TileNode::releaseGLObjects(osg::State* state) const
{
- //OE_WARN << LC << "Tile " << _key.str() << " : Release GL objects\n";
+ osg::Group::releaseGLObjects(state);
if ( _surface.valid() )
_surface->releaseGLObjects(state);
@@ -313,8 +313,20 @@ TileNode::releaseGLObjects(osg::State* state) const
_patch->releaseGLObjects(state);
_renderModel.releaseGLObjects(state);
+}
- osg::Group::releaseGLObjects(state);
+void
+TileNode::resizeGLObjectBuffers(unsigned maxSize)
+{
+ osg::Group::resizeGLObjectBuffers(maxSize);
+
+ if ( _surface.valid() )
+ _surface->resizeGLObjectBuffers(maxSize);
+
+ if ( _patch.valid() )
+ _patch->resizeGLObjectBuffers(maxSize);
+
+ _renderModel.resizeGLObjectBuffers(maxSize);
}
bool
diff --git a/src/osgEarthDrivers/wms/ReaderWriterWMS.cpp b/src/osgEarthDrivers/wms/ReaderWriterWMS.cpp
index 93e0ebb..d625080 100644
--- a/src/osgEarthDrivers/wms/ReaderWriterWMS.cpp
+++ b/src/osgEarthDrivers/wms/ReaderWriterWMS.cpp
@@ -168,9 +168,9 @@ public:
osg::ref_ptr<SpatialReference> wms_srs = SpatialReference::create( _srsToUse );
// check for spherical mercator:
- if ( wms_srs.valid() && wms_srs->isEquivalentTo( osgEarth::Registry::instance()->getGlobalMercatorProfile()->getSRS() ) )
+ if ( wms_srs.valid() && wms_srs->isEquivalentTo( osgEarth::Registry::instance()->getSphericalMercatorProfile()->getSRS() ) )
{
- result = osgEarth::Registry::instance()->getGlobalMercatorProfile();
+ result = osgEarth::Registry::instance()->getSphericalMercatorProfile();
}
else if (wms_srs.valid() && wms_srs->isEquivalentTo( osgEarth::Registry::instance()->getGlobalGeodeticProfile()->getSRS()))
{
diff --git a/src/osgEarthTriton/TritonContext b/src/osgEarthTriton/TritonContext
index 4b3c534..40f5e23 100644
--- a/src/osgEarthTriton/TritonContext
+++ b/src/osgEarthTriton/TritonContext
@@ -76,6 +76,8 @@ namespace osgEarth { namespace Triton
public: // osg::Object
+ void resizeGLObjectBuffers(unsigned maxSize);
+
/** If State is non-zero, this function releases any associated OpenGL objects for
* the specified graphics context. Otherwise, releases OpenGL objects
* for all graphics contexts. */
diff --git a/src/osgEarthTriton/TritonContext.cpp b/src/osgEarthTriton/TritonContext.cpp
index 9a171cb..3bceec9 100644
--- a/src/osgEarthTriton/TritonContext.cpp
+++ b/src/osgEarthTriton/TritonContext.cpp
@@ -181,8 +181,16 @@ TritonContext::update(double simTime)
}
void
+TritonContext::resizeGLObjectBuffers(unsigned maxSize)
+{
+ osg::Object::resizeGLObjectBuffers(maxSize);
+}
+
+void
TritonContext::releaseGLObjects(osg::State* state) const
{
+ osg::Object::releaseGLObjects(state);
+
OE_INFO << LC << "Triton shutting down - releasing GL resources\n";
if (state)
{
diff --git a/src/osgEarthUtil/Controls.cpp b/src/osgEarthUtil/Controls.cpp
index 39966e4..e6a372e 100755
--- a/src/osgEarthUtil/Controls.cpp
+++ b/src/osgEarthUtil/Controls.cpp
@@ -2741,14 +2741,12 @@ ControlCanvas::init()
_controlNodeBin = new ControlNodeBin();
this->addChild( _controlNodeBin->getControlGroup() );
-#if 0
-#if defined(OSG_GL_FIXED_FUNCTION_AVAILABLE)
+#if OSG_VERSION_LESS_THAN(3,5,8) && defined(OSG_GL_FIXED_FUNCTION_AVAILABLE)
// don't use shaders unless we have to.
this->getOrCreateStateSet()->setAttributeAndModes(
new osg::Program(),
osg::StateAttribute::OFF|osg::StateAttribute::OVERRIDE);
#endif
-#endif
}
ControlCanvas::~ControlCanvas()
diff --git a/src/osgEarthUtil/EarthManipulator.cpp b/src/osgEarthUtil/EarthManipulator.cpp
index 49a2215..3c79d52 100644
--- a/src/osgEarthUtil/EarthManipulator.cpp
+++ b/src/osgEarthUtil/EarthManipulator.cpp
@@ -1715,12 +1715,23 @@ EarthManipulator::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapt
// if tethering is active, check to see whether the incoming event
// will break the tether.
- if ( isTethering() )
+ if (isTethering() && ea.getEventType() != ea.FRAME)
{
const ActionTypeVector& atv = _settings->getBreakTetherActions();
if ( atv.size() > 0 )
{
- const Action& action = _settings->getAction( ea.getEventType(), ea.getButtonMask(), ea.getModKeyMask() );
+ EventType eventType = (EventType)ea.getEventType();
+ int buttonMask = ea.getButtonMask();
+ int modKeyMask = ea.getModKeyMask();
+
+ if (eventType == osgGA::GUIEventAdapter::RELEASE && isMouseClick(&ea))
+ {
+ eventType = EVENT_MOUSE_CLICK;
+ buttonMask = _mouse_down_event->getButtonMask();
+ modKeyMask = _mouse_down_event->getModKeyMask();
+ }
+
+ const Action& action = _settings->getAction( eventType, buttonMask, modKeyMask );
if ( std::find(atv.begin(), atv.end(), action._type) != atv.end() )
{
clearViewpoint();
diff --git a/src/osgEarthUtil/TMS.cpp b/src/osgEarthUtil/TMS.cpp
index 355e675..02a9d51 100644
--- a/src/osgEarthUtil/TMS.cpp
+++ b/src/osgEarthUtil/TMS.cpp
@@ -650,7 +650,7 @@ tileMapToXmlDocument(const TileMap* tileMap)
{
profileString = "global-geodetic";
}
- else if (profile->isEquivalentTo(osgEarth::Registry::instance()->getGlobalMercatorProfile()))
+ else if (profile->isEquivalentTo(osgEarth::Registry::instance()->getSphericalMercatorProfile()))
{
profileString = "global-mercator";
}
diff --git a/tests/boston.earth b/tests/boston.earth
index 6ae90bd..9fe0da0 100644
--- a/tests/boston.earth
+++ b/tests/boston.earth
@@ -74,7 +74,7 @@ to extruded buildings.
<feature_model name="Streets" feature_source="streets-data">
- <layout crop_features="true" tile_size_factor="7.5">
+ <layout crop_features="true" tile_size="1000">
<level max_range="5000"/>
</layout>
<styles>
@@ -92,7 +92,7 @@ to extruded buildings.
<feature_model name="streetlamps" feature_source="streets-data">
- <layout tile_size_factor="5" crop_features="true">
+ <layout tile_size="1000" crop_features="true">
<level max_range="1000" style="default"/>
</layout>
@@ -120,7 +120,7 @@ to extruded buildings.
<url>../data/boston-parks.shp</url>
</features>
- <layout tile_size_factor="3">
+ <layout tile_size="1000">
<level max_range="2000"/>
</layout>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/osgearth.git
More information about the Pkg-grass-devel
mailing list