From Brad Christiansen, "I added the ability to set the render target implementaion on the

osgSim::OverlayNode. The attached changes were made against the 2.0
release."
This commit is contained in:
Robert Osfield
2007-08-13 10:17:18 +00:00
parent 856ec41610
commit 4c443bf843
2 changed files with 20 additions and 5 deletions

View File

@@ -811,7 +811,8 @@ OverlayNode::OverlayNode(OverlayTechnique technique):
_overlayClearColor(0.0f,0.0f,0.0f,0.0f),
_continuousUpdate(false),
_overlayBaseHeight(-100.0),
_updateCamera(false)
_updateCamera(false),
_renderTargetImpl(osg::Camera::FRAME_BUFFER_OBJECT)
{
setNumChildrenRequiringUpdateTraversal(1);
init();
@@ -826,7 +827,8 @@ OverlayNode::OverlayNode(const OverlayNode& copy, const osg::CopyOp& copyop):
_textureSizeHint(copy._textureSizeHint),
_overlayClearColor(copy._overlayClearColor),
_continuousUpdate(copy._continuousUpdate),
_overlayBaseHeight(copy._overlayBaseHeight)
_overlayBaseHeight(copy._overlayBaseHeight),
_renderTargetImpl(copy._renderTargetImpl)
{
setNumChildrenRequiringUpdateTraversal(getNumChildrenRequiringUpdateTraversal()+1);
init();
@@ -910,6 +912,15 @@ void OverlayNode::setOverlayTechnique(OverlayTechnique technique)
init();
}
void OverlayNode::setRenderTargetImplementation(osg::Camera::RenderTargetImplementation impl)
{
if(_renderTargetImpl==impl) return;
_renderTargetImpl = impl;
init();
}
OverlayNode::OverlayData& OverlayNode::getOverlayData(osgUtil::CullVisitor* cv)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_overlayDataMapMutex);
@@ -942,7 +953,7 @@ OverlayNode::OverlayData& OverlayNode::getOverlayData(osgUtil::CullVisitor* cv)
}
// set up the render to texture camera.
if (!overlayData._camera)
if (!overlayData._camera || overlayData._camera->getRenderTargetImplementation() != _renderTargetImpl)
{
// osg::notify(osg::NOTICE)<<" setting up camera"<<std::endl;
@@ -962,7 +973,7 @@ OverlayNode::OverlayData& OverlayNode::getOverlayData(osgUtil::CullVisitor* cv)
overlayData._camera->setRenderOrder(osg::Camera::PRE_RENDER);
// tell the camera to use OpenGL frame buffer object where supported.
overlayData._camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
overlayData._camera->setRenderTargetImplementation(_renderTargetImpl);
// attach the texture and use it as the color buffer.
overlayData._camera->attach(osg::Camera::COLOR_BUFFER, overlayData._texture.get());
@@ -1826,7 +1837,7 @@ void OverlayNode::setOverlayTextureSizeHint(unsigned int size)
void OverlayNode::updateMainSubgraphStateSet()
{
osg::notify(osg::NOTICE)<<"OverlayNode::updateMainSubgraphStateSet()"<<std::endl;
osg::notify(osg::INFO)<<"OverlayNode::updateMainSubgraphStateSet()"<<std::endl;
for(OverlayDataMap::iterator itr = _overlayDataMap.begin();
itr != _overlayDataMap.end();