Added support for controlling the draw order on Cameras on each GraphcisContext
via the Camera::setRenderOrder parameters
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user