# HG changeset patch
# User Ian Chen <ichen@osrfoundation.org>
# Date 1401470113 25200
# Branch gazebo_3.1
# Node ID eec4aa945cebb5c68858b3526875c41dd746aae7
# Parent 839b2b92b357620f8cd7aa7854a07127f8775756
# Parent f4f20ee4a672ef19c1af9b99c7be6bfc434974d0
Merged in issue_996_3.1 (pull request #1098)
Fix gzclient startup crash with ogre 1.9
diff --git a/cmake/SearchForStuff.cmake b/cmake/SearchForStuff.cmake
--- a/cmake/SearchForStuff.cmake
+++ b/cmake/SearchForStuff.cmake
@@ -126,7 +126,7 @@
#################################################
# Find Simbody
set(SimTK_INSTALL_DIR ${SimTK_INSTALL_PREFIX})
- #list(APPEND CMAKE_MODULE_PATH ${SimTK_INSTALL_PREFIX}/share/cmake)
+ #list(APPEND CMAKE_MODULE_PATH ${SimTK_INSTALL_PREFIX}/share/cmake)
find_package(Simbody)
if (SIMBODY_FOUND)
set (HAVE_SIMBODY TRUE)
@@ -154,17 +154,17 @@
if (NOT tinyxml_FOUND)
find_path (tinyxml_INCLUDE_DIRS tinyxml.h ${tinyxml_INCLUDE_DIRS} ENV CPATH)
find_library(tinyxml_LIBRARIES NAMES tinyxml)
- set (tinyxml_FAIL False)
+ set (tinyxml_FAIL False)
if (NOT tinyxml_INCLUDE_DIRS)
message (STATUS "Looking for tinyxml headers - not found")
- set (tinyxml_FAIL True)
+ set (tinyxml_FAIL True)
endif()
if (NOT tinyxml_LIBRARIES)
message (STATUS "Looking for tinyxml library - not found")
- set (tinyxml_FAIL True)
+ set (tinyxml_FAIL True)
endif()
endif()
-
+
if (tinyxml_FAIL)
message (STATUS "Looking for tinyxml.h - not found")
BUILD_ERROR("Missing: tinyxml")
@@ -231,13 +231,10 @@
endif ()
pkg_check_modules(OGRE OGRE>=${MIN_OGRE_VERSION})
- # There are some runtime problems to solve with ogre-1.9.
- # Please read gazebo issues: 994, 995, 996
- pkg_check_modules(MAX_VALID_OGRE OGRE<=1.8.9)
+ # There are some runtime problems to solve with ogre-1.9.
+ # Please read gazebo issues: 994, 995
if (NOT OGRE_FOUND)
BUILD_ERROR("Missing: Ogre3d version >=${MIN_OGRE_VERSION}(http://www.orge3d.org)")
- elseif (NOT MAX_VALID_OGRE_FOUND)
- BUILD_ERROR("Bad Ogre3d version: gazebo using ${OGRE_VERSION} ogre version has known bugs in runtime (issue #996). Please use 1.7 or 1.8 series")
else ()
set(ogre_ldflags ${ogre_ldflags} ${OGRE_LDFLAGS})
set(ogre_include_dirs ${ogre_include_dirs} ${OGRE_INCLUDE_DIRS})
@@ -372,8 +369,8 @@
#################################################
# Find bullet
- # First and preferred option is to look for bullet standard pkgconfig,
- # so check it first. if it is not present, check for the OSRF
+ # First and preferred option is to look for bullet standard pkgconfig,
+ # so check it first. if it is not present, check for the OSRF
# custom bullet2.82.pc file
pkg_check_modules(BULLET bullet>=2.82)
if (NOT BULLET_FOUND)
@@ -453,16 +450,16 @@
#find_path(QWT_INCLUDE_DIR NAMES qwt.h PATHS
# /usr/include
# /usr/local/include
-# "$ENV{LIB_DIR}/include"
-# "$ENV{INCLUDE}"
+# "$ENV{LIB_DIR}/include"
+# "$ENV{INCLUDE}"
# PATH_SUFFIXES qwt-qt4 qwt qwt5
# )
#
-#find_library(QWT_LIBRARY NAMES qwt qwt6 qwt5 PATHS
+#find_library(QWT_LIBRARY NAMES qwt qwt6 qwt5 PATHS
# /usr/lib
# /usr/local/lib
-# "$ENV{LIB_DIR}/lib"
-# "$ENV{LIB}/lib"
+# "$ENV{LIB_DIR}/lib"
+# "$ENV{LIB}/lib"
# )
#
#if (QWT_INCLUDE_DIR AND QWT_LIBRARY)
diff --git a/gazebo/rendering/Light.cc b/gazebo/rendering/Light.cc
--- a/gazebo/rendering/Light.cc
+++ b/gazebo/rendering/Light.cc
@@ -53,6 +53,9 @@
if (this->light)
this->scene->GetManager()->destroyLight(this->GetName());
+ this->scene->GetManager()->destroyEntity(
+ this->GetName() + "_selection_sphere");
+
this->visual->DeleteDynamicLine(this->line);
this->scene->RemoveVisual(this->visual);
this->visual.reset();
@@ -276,11 +279,14 @@
// Make sure the unit_sphere has been inserted.
this->visual->InsertMesh("unit_sphere");
+ Ogre::Entity *ent =
+ visSceneNode->getCreator()->createEntity(this->GetName() +
+ "_selection_sphere", "unit_sphere");
+
+ ent->setMaterialName("Gazebo/White");
+
// Create the selection object.
- Ogre::MovableObject *obj = static_cast<Ogre::MovableObject*>
- (visSceneNode->getCreator()->createEntity(this->GetName() +
- "_selection_sphere",
- "unit_sphere"));
+ Ogre::MovableObject *obj = static_cast<Ogre::MovableObject*>(ent);
// Attach the selection object to the light visual
visSceneNode->attachObject(obj);
diff --git a/gazebo/rendering/RenderEngine.cc b/gazebo/rendering/RenderEngine.cc
--- a/gazebo/rendering/RenderEngine.cc
+++ b/gazebo/rendering/RenderEngine.cc
@@ -66,6 +66,10 @@
this->logManager = NULL;
this->root = NULL;
+#if (OGRE_VERSION >= ((1 << 16) | (9 << 8) | 0))
+ this->overlaySystem = NULL;
+#endif
+
this->dummyDisplay = NULL;
this->initialized = false;
@@ -116,10 +120,12 @@
gzthrow("Unable to create an Ogre rendering environment, no Root ");
}
-#if OGRE_VERSION_MAJR > 1 || OGRE_VERSION_MINOR >= 9
- // Must be created after this->root, but before this->root is
- // initialized.
- this->overlaySystem = new Ogre::OverlaySystem();
+#if (OGRE_VERSION >= ((1 << 16) | (9 << 8) | 0))
+ // OgreOverlay is a component on its own in ogre 1.9 so must manually
+ // initialize it. Must be created after this->root, but before this->root
+ // is initialized.
+ if (!this->overlaySystem)
+ this->overlaySystem = new Ogre::OverlaySystem();
#endif
// Load all the plugins
@@ -326,6 +332,11 @@
this->RemoveScene(this->scenes.front()->GetName());
}
+#if (OGRE_VERSION >= ((1 << 16) | (9 << 8) | 0))
+ delete this->overlaySystem;
+ this->overlaySystem = NULL;
+#endif
+
// TODO: this was causing a segfault. Need to debug, and put back in
if (this->root)
{
@@ -768,7 +779,7 @@
return this->windowManager;
}
-#if OGRE_VERSION_MAJR > 1 || OGRE_VERSION_MINOR >= 9
+#if (OGRE_VERSION >= ((1 << 16) | (9 << 8) | 0))
/////////////////////////////////////////////////
Ogre::OverlaySystem *RenderEngine::GetOverlaySystem() const
{
diff --git a/gazebo/rendering/Visual.cc b/gazebo/rendering/Visual.cc
--- a/gazebo/rendering/Visual.cc
+++ b/gazebo/rendering/Visual.cc
@@ -776,7 +776,7 @@
this->InsertMesh(_meshName, _subMesh, _centerSubmesh);
obj = (Ogre::MovableObject*)
- (this->dataPtr->sceneNode->getCreator()->createEntity(objName, meshName));
+ (this->dataPtr->sceneNode->getCreator()->createEntity(objName, meshName));
this->AttachObject(obj);
return obj;
@@ -2084,6 +2084,10 @@
rendering::Material::Update(material);
ogreSubMesh->setMaterialName(material->GetName());
}
+ else
+ {
+ ogreSubMesh->setMaterialName("Gazebo/White");
+ }
// Unlock
vBuf->unlock();