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;

View File

@@ -28,6 +28,7 @@ HelpHandler::HelpHandler(osg::ApplicationUsage* au):
{
_camera = new osg::Camera;
_camera->setRenderer(new Renderer(_camera.get()));
_camera->setRenderOrder(osg::Camera::POST_RENDER, 11);
}

View File

@@ -224,6 +224,7 @@ void StatsHandler::setUpHUDCamera(osgViewer::Viewer* viewer)
}
_camera->setViewport(0, 0, window->getTraits()->width, window->getTraits()->height);
_camera->setRenderOrder(osg::Camera::POST_RENDER, 10);
_camera->setProjectionMatrix(osg::Matrix::ortho2D(0,1280,0,1024));
_camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);