OpenSceneGraph/include/osgUtil/DisplayListVisitor

80 lines
2.1 KiB
Plaintext
Raw Normal View History

2002-07-17 04:07:32 +08:00
//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield
//Distributed under the terms of the GNU Library General Public License (LGPL)
//as published by the Free Software Foundation.
#ifndef OSGUTIL_DISPLAYLISTVISITOR
#define OSGUTIL_DISPLAYLISTVISITOR 1
2001-01-11 00:32:10 +08:00
#include <osg/NodeVisitor>
#include <osg/Geode>
#include <osg/State>
2001-01-11 00:32:10 +08:00
#include <osgUtil/Export>
namespace osgUtil {
/** Visitor for traversing scene graph and setting each osg::Drawable's _useDisplayList flag,
* with option to immediately compile osg::Drawable OpenGL Display lists and
* osg::StateAttribute's.
2001-01-11 00:32:10 +08:00
*/
class OSGUTIL_EXPORT DisplayListVisitor : public osg::NodeVisitor
{
public:
/** Operation modes of the.*/
enum ModeValues
2001-01-11 00:32:10 +08:00
{
SWITCH_ON_DISPLAY_LISTS = 0x1,
SWITCH_OFF_DISPLAY_LISTS = 0x2,
COMPILE_DISPLAY_LISTS = 0x4,
COMPILE_STATE_ATTRIBUTES = 0x8
2001-01-11 00:32:10 +08:00
};
typedef unsigned int Mode;
2001-01-11 00:32:10 +08:00
/** Construct a DisplayListVisior to traverse all child,
2001-09-28 20:36:40 +08:00
* with set specified display list mode. Default mode is to
2001-01-11 00:32:10 +08:00
* gset->setUseDisplayList(true).
*/
DisplayListVisitor(Mode mode=COMPILE_DISPLAY_LISTS|COMPILE_STATE_ATTRIBUTES);
2001-01-11 00:32:10 +08:00
/** Set the operational mode of how the visitor should set up osg::Drawable's.*/
void setMode(Mode mode) { _mode = mode; }
2001-01-11 00:32:10 +08:00
/** Get the operational mode.*/
Mode getMode() const { return _mode; }
/** Set the State to use during traversal. */
void setState(osg::State* state)
{
_state = state;
}
osg::State* getState()
{
return _state.get();
}
2001-01-11 00:32:10 +08:00
/** Simply traverse using standard NodeVisitor traverse method.*/
virtual void apply(osg::Node& node);
2001-01-11 00:32:10 +08:00
/** For each Geode visited set the display list usage according to the
* _displayListMode.
*/
virtual void apply(osg::Geode& node);
protected:
Mode _mode;
osg::ref_ptr<osg::State> _state;
2001-01-11 00:32:10 +08:00
};
}
2001-01-11 00:32:10 +08:00
#endif