Added support for controlling the draw order on Cameras on each GraphcisContext

via the Camera::setRenderOrder parameters
This commit is contained in:
Robert Osfield
2007-08-27 13:29:09 +00:00
parent 281437336c
commit 020d7a5651
3 changed files with 21 additions and 2 deletions

View File

@@ -644,10 +644,27 @@ void GraphicsContext::removeAllOperations()
_operationsBlock->set(false);
}
struct CameraRenderOrderSortOp
{
inline bool operator() (const Camera* lhs,const Camera* rhs) const
{
if (lhs->getRenderOrder()<rhs->getRenderOrder()) return true;
if (rhs->getRenderOrder()<lhs->getRenderOrder()) return false;
return lhs->getRenderOrderNum()<lhs->getRenderOrderNum();
}
};
void GraphicsContext::runOperations()
{
for(osg::GraphicsContext::Cameras::iterator itr = _cameras.begin();
itr != _cameras.end();
// sort the cameras into order
typedef std::vector<Camera*> CameraVector;
CameraVector camerasCopy(_cameras.begin(),_cameras.end());
std::sort(camerasCopy.begin(), camerasCopy.end(), CameraRenderOrderSortOp());
for(CameraVector::iterator itr = camerasCopy.begin();
itr != camerasCopy.end();
++itr)
{
osg::Camera* camera = *itr;