instead of osgDB::Registry where it original lay. This has been done to allow fileName strings to be encode data rather than just file names, such as one requires when using PagedLOD along with plugins for doing dynamic tesselation.
95 lines
2.6 KiB
C++
95 lines
2.6 KiB
C++
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield
|
|
*
|
|
* This library is open source and may be redistributed and/or modified under
|
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
|
* (at your option) any later version. The full license is in LICENSE file
|
|
* included with this distribution, and on the openscenegraph.org website.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* OpenSceneGraph Public License for more details.
|
|
*/
|
|
|
|
#ifndef OSGUTIL_TRISTRIPVISITOR
|
|
#define OSGUTIL_TRISTRIPVISITOR 1
|
|
|
|
#include <osg/NodeVisitor>
|
|
#include <osg/Geode>
|
|
#include <osg/Geometry>
|
|
|
|
#include <osgUtil/Export>
|
|
|
|
#include <set>
|
|
|
|
namespace osgUtil {
|
|
|
|
/** A tri stripping visitor for converting Geometry surface primitives into tri strips.
|
|
* The current implemention is based up Tanguy Fautre's triangulation code.
|
|
*/
|
|
class OSGUTIL_EXPORT TriStripVisitor : public osg::NodeVisitor
|
|
{
|
|
public:
|
|
|
|
/// default to traversing all children.
|
|
TriStripVisitor() :
|
|
osg::NodeVisitor( osg::NodeVisitor::TRAVERSE_ALL_CHILDREN ),
|
|
_cacheSize( 16 ),
|
|
_minStripSize( 2 )
|
|
{}
|
|
|
|
/** Convert mesh primitives in Geometry into Tri Strips.
|
|
* Converts all primitive types except points
|
|
* and lines, linestrips which it leaves unchanged.
|
|
*/
|
|
void stripify(osg::Geometry& drawable);
|
|
|
|
/** Stripfy the accumulated list of Geometry drawables.*/
|
|
void stripify();
|
|
|
|
/// accumulate the Geometry drawables to stripify
|
|
virtual void apply(osg::Geode& geode);
|
|
|
|
inline void setCacheSize( unsigned int size )
|
|
{
|
|
_cacheSize = size;
|
|
}
|
|
|
|
inline unsigned int getCacheSize()
|
|
{
|
|
return _cacheSize;
|
|
}
|
|
|
|
inline const unsigned int getCacheSize() const
|
|
{
|
|
return _cacheSize;
|
|
}
|
|
|
|
inline void setMinStripSize( unsigned int size )
|
|
{
|
|
_minStripSize = size;
|
|
}
|
|
|
|
inline unsigned int getMinStripSize()
|
|
{
|
|
return _minStripSize;
|
|
}
|
|
|
|
inline const unsigned int getMinStripSize() const
|
|
{
|
|
return _minStripSize;
|
|
}
|
|
|
|
private:
|
|
|
|
typedef std::set<osg::Geometry*> GeometryList;
|
|
|
|
unsigned int _cacheSize;
|
|
unsigned int _minStripSize;
|
|
GeometryList _geometryList;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|