//C++ header - Open Scene Graph - Copyright (C) 1998-2001 Robert Osfield
//Distributed under the terms of the GNU Library General Public License (LGPL)
//as published by the Free Software Foundation.

#ifndef OSGUTIL_DEPTHSORTEDBIN
#define OSGUTIL_DEPTHSORTEDBIN 1

#include <osgUtil/RenderBin>

namespace osgUtil {

class OSGUTIL_EXPORT DepthSortedBin : public RenderBin
{

    public:

        DepthSortedBin();

        virtual osg::Object* cloneType() const { return new DepthSortedBin(); }
        virtual osg::Object* clone(const osg::CopyOp&) const { return new DepthSortedBin(); } // note only implements a clone of type.
        virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const DepthSortedBin*>(obj)!=0L; }
        virtual const char* className() const { return "DepthSortedBin"; }

        virtual void reset();

        virtual void sort_local();

        virtual void draw_local(osg::State& state,RenderLeaf*& previous);
        
        enum DrawOrder
        {
            FRONT_TO_BACK,
            BACK_TO_FRONT
        };
        
        void setDrawOrder(const DrawOrder drawOrder) { _drawOrder = drawOrder; }
        
        const DrawOrder getDrawOrder() const { return _drawOrder; }

    protected:
    
        virtual ~DepthSortedBin();
        
        DrawOrder           _drawOrder;
        RenderLeafList      _renderLeafList;
};

}

#endif

