/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 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_RENDERLEAF #define OSGUTIL_RENDERLEAF 1 #include #include #include #include #include namespace osgUtil { // Forward declare StateGraph class StateGraph; /** 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): osg::Referenced(false), _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 StateGraph to change the RenderLeaf's _parent. friend class osgUtil::StateGraph; public: StateGraph* _parent; osg::Drawable* _drawable; osg::ref_ptr _projection; osg::ref_ptr _modelview; float _depth; private: /// disallow creation of blank RenderLeaf as this isn't useful. RenderLeaf(): osg::Referenced(false), _parent(0), _drawable(0), _projection(0), _modelview(0), _depth(0.0f) {} /// disallow copy construction. RenderLeaf(const RenderLeaf&):osg::Referenced(false) {} /// disallow copy operator. RenderLeaf& operator = (const RenderLeaf&) { return *this; } }; } #endif