Improved the osg::Geometry::computeCorrectBindingsAndArraySizes() implemention

so that it produce more optimal settings.

Changed flt/GeoSetBuilder so that it doensn't merge geometry, as it was
merging geometry even when inappropriate.
This commit is contained in:
Robert Osfield
2004-10-06 20:32:09 +00:00
parent a907042618
commit c27bf441e2
2 changed files with 103 additions and 133 deletions

View File

@@ -308,20 +308,24 @@ osg::Geode* GeoSetBuilder::createOsgGeoSets(osg::Geode* geode)
itr!=_dynGeoSetList.end();
++itr)
{
DynGeoSet* dgset = itr->get();
osg::Geometry* geom = dgset->getGeometry();
DynGeoSet* dgset = itr->get();
osg::Geometry* geom = dgset->getGeometry();
geode->addDrawable(geom);
dgset->addToGeometry(geom);
osg::StateSet* stateset = dgset->getStateSet();
assert( stateset == geom->getStateSet() );
osg::StateSet* stateset = dgset->getStateSet();
assert( stateset == geom->getStateSet() );
}
osgUtil::Tesselator tesselator;
for(unsigned int i=0;i<geode->getNumDrawables();++i)
{
osg::Geometry* geom = dynamic_cast<osg::Geometry*>(geode->getDrawable(i));
if (geom) tesselator.retesselatePolygons(*geom);
if (geom)
{
geom->computeCorrectBindingsAndArraySizes();
tesselator.retesselatePolygons(*geom);
}
}
return geode;
@@ -343,6 +347,8 @@ bool GeoSetBuilder::addPrimitive(bool dontMerge)
dgset->setBinding();
dontMerge = true;
if( dontMerge == true)
{
_dynGeoSetList.push_back(dgset);