Files
OpenSceneGraph/include/osgUtil/RenderLeaf
Robert Osfield f36bc69c58 Made the more of the OSG's referenced object desctructors protected to ensure
that they arn't created on the stack inappropriately.

Split the implemention of Matrix up so that it is a simple no referenced counted
class and can be safefly created on the stack.  To support referenced counting a
seperate subclass now exists, this is RefMatrix which inherits from both Matrix and
Object.
2003-01-10 09:25:42 +00:00

87 lines
2.2 KiB
Plaintext

//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_RENDERLEAF
#define OSGUTIL_RENDERLEAF 1
#include <osg/ref_ptr>
#include <osg/Matrix>
#include <osg/Drawable>
#include <osg/State>
#include <osgUtil/Export>
namespace osgUtil {
// forward declare RenderGraph
class RenderGraph;
/** container class for all data required for rendering of drawables.
*/
class OSGUTIL_EXPORT RenderLeaf : public osg::Referenced
{
public:
inline RenderLeaf(osg::Drawable* drawable,osg::RefMatrix* projection,osg::RefMatrix* modelview, float depth=0.0f):
_parent(0),
_drawable(drawable),
_projection(projection),
_modelview(modelview),
_depth(depth) {}
inline void set(osg::Drawable* drawable,osg::RefMatrix* projection,osg::RefMatrix* modelview, float depth=0.0f)
{
_parent = 0;
_drawable = drawable;
_projection = projection,
_modelview = modelview,
_depth = depth;
}
inline void reset()
{
_parent = 0;
_drawable = 0;
_projection = 0;
_modelview = 0;
_depth = 0.0f;
}
virtual void render(osg::State& state,RenderLeaf* previous);
/// allow RenderGraph to change the RenderLeaf's _parent.
friend class osgUtil::RenderGraph;
public:
RenderGraph* _parent;
osg::Drawable* _drawable;
osg::ref_ptr<osg::RefMatrix> _projection;
osg::ref_ptr<osg::RefMatrix> _modelview;
float _depth;
private:
/// disallow creation of blank RenderLeaf as this isn't useful.
RenderLeaf():
_parent(0),
_drawable(0),
_projection(0),
_modelview(0),
_depth(0.0f) {}
/// disallow copy construction.
RenderLeaf(const RenderLeaf&):osg::Referenced() {}
/// disallow copy operator.
RenderLeaf& operator = (const RenderLeaf&) { return *this; }
};
}
#endif