Index: /OpenSceneGraph/trunk/src/osgPlugins/obj/ReaderWriterOBJ.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osgPlugins/obj/ReaderWriterOBJ.cpp (revision 3325)
+++ /OpenSceneGraph/trunk/src/osgPlugins/obj/ReaderWriterOBJ.cpp (revision 3327)
@@ -269,8 +269,14 @@
     }
 
+    // #define USE_DRAWARRAYLENGTHS
+
     if (numPolygonElements>0)
     {
         unsigned int startPos = vertices->size();
-        osg::DrawArrayLengths* drawArrayLengths = new osg::DrawArrayLengths(GL_POLYGON,startPos);
+        
+        #ifdef USE_DRAWARRAYLENGTHS
+            osg::DrawArrayLengths* drawArrayLengths = new osg::DrawArrayLengths(GL_POLYGON,startPos);
+            geometry->addPrimitiveSet(drawArrayLengths);
+        #endif
 
         for(itr=elementList.begin();
@@ -281,5 +287,22 @@
             if (element.dataType==obj::Element::POLYGON)
             {
-                drawArrayLengths->push_back(element.vertexIndices.size());
+
+                #ifdef USE_DRAWARRAYLENGTHS
+                    drawArrayLengths->push_back(element.vertexIndices.size());
+                #else
+                    if (element.vertexIndices.size()>4)
+                    {
+                        osg::DrawArrays* drawArrays = new osg::DrawArrays(GL_POLYGON,startPos,element.vertexIndices.size());
+                        startPos += element.vertexIndices.size();
+                        geometry->addPrimitiveSet(drawArrays);
+                    }
+                    else
+                    {
+                        osg::DrawArrays* drawArrays = new osg::DrawArrays(GL_TRIANGLE_FAN,startPos,element.vertexIndices.size());
+                        startPos += element.vertexIndices.size();
+                        geometry->addPrimitiveSet(drawArrays);
+                    }
+                #endif
+
             
                 if (model.needReverse(element))
@@ -342,5 +365,4 @@
         }
 
-        geometry->addPrimitiveSet(drawArrayLengths);
 
     }
@@ -376,11 +398,14 @@
             osg::StateSet* stateset = materialToSetSetMap[es.materialName].get();
             geometry->setStateSet(stateset);
-
-//            osgUtil::Tesselator tesselator;
-//            tesselator.retesselatePolygons(*geometry);
-
+        
+            // tesseleate any large polygons
+            osgUtil::Tesselator tesselator;
+            tesselator.retesselatePolygons(*geometry);
+
+            // tri strip polygons to improve graphics peformance
             osgUtil::TriStripVisitor tsv;
             tsv.stripify(*geometry);
 
+            // if no normals present add them.
             if (!geometry->getNormalArray() || geometry->getNormalArray()->getNumElements()==0)
             {
