Hi Robert,

This patch fixes a regression (introduced in @ rev 9228), where simple .dae files, that have no material assignments, will cause a crash on load.

In particular, the case when the "instance_geometry" element has no "bind_material" sub-element. This is valid, according to the official collada 1.4.1 specification.

Example test files available on request.

Reagrds,
Lilith.



Index: daeRGeometry.cpp
===================================================================
--- daeRGeometry.cpp	(revision 10887)
+++ daeRGeometry.cpp	(working copy)
@@ -240,7 +240,10 @@
 void daeReader::processSinglePPrimitive(osg::Geode* geode, T *group, SourceMap &sources, GLenum mode )
 {
     osg::Geometry *geometry = new ReaderGeometry();
-    geometry->setName(group->getMaterial());
+    if (group->getMaterial() != NULL )
+    {
+	    geometry->setName(group->getMaterial());
+	}
 
     IndexMap index_map;
     resolveArrays( group->getInput_array(), geometry, sources, index_map );
@@ -256,7 +259,10 @@
 void daeReader::processMultiPPrimitive(osg::Geode* geode, T *group, SourceMap &sources, GLenum mode )
 {
     osg::Geometry *geometry = new ReaderGeometry();
-    geometry->setName(group->getMaterial());
+    if (group->getMaterial() != NULL )
+    {
+	    geometry->setName(group->getMaterial());
+	}
 
     IndexMap index_map;
     resolveArrays( group->getInput_array(), geometry, sources, index_map );
@@ -275,7 +281,10 @@
 void daeReader::processPolylist(osg::Geode* geode, domPolylist *group, SourceMap &sources )
 {
     osg::Geometry *geometry = new ReaderGeometry();
-    geometry->setName(group->getMaterial());
+    if (group->getMaterial() != NULL )
+    {
+	    geometry->setName(group->getMaterial());
+	}
 
     IndexMap index_map;
     resolveArrays( group->getInput_array(), geometry, sources, index_map );
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to