Improved the Geometry::verifyBinding() and computeCorrectBindingsAndArraySizes()

methods to check all atributes and to report warnigns when errors are detected.

Added a CheckGeomtryVisitor to osgUtil::Optimizer to detect eroneous Geometry
before rendering.
This commit is contained in:
Robert Osfield
2003-09-24 15:54:22 +00:00
parent 49cc9b85d5
commit 2812c50329
4 changed files with 822 additions and 787 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -98,6 +98,12 @@ void Optimizer::optimize(osg::Node* node, unsigned int options)
osv.optimize();
}
if (options & CHECK_GEOMETRY)
{
CheckGeometryVisitor mgv;
node->accept(mgv);
}
if (options & MERGE_GEOMETRY)
{
MergeGeometryVisitor mgv;
@@ -1138,6 +1144,18 @@ struct LessGeometryPrimitiveType
}
};
void Optimizer::CheckGeometryVisitor::checkGeode(osg::Geode& geode)
{
for(unsigned int i=0;i<geode.getNumDrawables();++i)
{
osg::Geometry* geom = geode.getDrawable(i)->asGeometry();
if (geom)
{
geom->computeCorrectBindingsAndArraySizes();
}
}
}
bool Optimizer::MergeGeometryVisitor::mergeGeode(osg::Geode& geode)
{
if (geode.getNumDrawables()>=2)
@@ -1151,7 +1169,7 @@ bool Optimizer::MergeGeometryVisitor::mergeGeode(osg::Geode& geode)
unsigned int i;
for(i=0;i<geode.getNumDrawables();++i)
{
osg::Geometry* geom = dynamic_cast<osg::Geometry*>(geode.getDrawable(i));
osg::Geometry* geom = geode.getDrawable(i)->asGeometry();
if (geom)
{
//geom->computeCorrectBindingsAndArraySizes();