// Filename: cullBinStateSorted.cxx // Created by: drose (22Mar05) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved // // All use of this software is subject to the terms of the Panda 3d // Software license. You should have received a copy of this license // along with this source code; you will also find a current copy of // the license at http://etc.cmu.edu/panda3d/docs/license/ . // // To contact the maintainers of this program write to // panda3d-general@lists.sourceforge.net . // //////////////////////////////////////////////////////////////////// #include "cullBinStateSorted.h" #include "graphicsStateGuardianBase.h" #include "geometricBoundingVolume.h" #include "cullableObject.h" #include "cullHandler.h" #include "pStatTimer.h" #include TypeHandle CullBinStateSorted::_type_handle; //////////////////////////////////////////////////////////////////// // Function: CullBinStateSorted::Destructor // Access: Public, Virtual // Description: //////////////////////////////////////////////////////////////////// CullBinStateSorted:: ~CullBinStateSorted() { Objects::iterator oi; for (oi = _objects.begin(); oi != _objects.end(); ++oi) { CullableObject *object = (*oi)._object; delete object; } } //////////////////////////////////////////////////////////////////// // Function: CullBinStateSorted::add_object // Access: Public, Virtual // Description: Adds a geom, along with its associated state, to // the bin for rendering. //////////////////////////////////////////////////////////////////// void CullBinStateSorted:: add_object(CullableObject *object) { _objects.push_back(ObjectData(object)); } //////////////////////////////////////////////////////////////////// // Function: CullBinStateSorted::finish_cull // Access: Public // Description: Called after all the geoms have been added, this // indicates that the cull process is finished for this // frame and gives the bins a chance to do any // post-processing (like sorting) before moving on to // draw. //////////////////////////////////////////////////////////////////// void CullBinStateSorted:: finish_cull() { PStatTimer timer(_cull_this_pcollector); sort(_objects.begin(), _objects.end()); } //////////////////////////////////////////////////////////////////// // Function: CullBinStateSorted::draw // Access: Public // Description: Draws all the geoms in the bin, in the appropriate // order. //////////////////////////////////////////////////////////////////// void CullBinStateSorted:: draw() { PStatTimer timer(_draw_this_pcollector); Objects::const_iterator oi; for (oi = _objects.begin(); oi != _objects.end(); ++oi) { CullableObject *object = (*oi)._object; CullHandler::draw(object, _gsg); } }