[osg-users] Cannot stop rendering slave camera
Etienne de Sarrieu
etienne.desarrieu at altran.com
Wed Jun 15 02:07:27 PDT 2016
Hi,
Due to performance consumption, I am trying to disable rendering of a slave camera, but it seems impossible. The camera is _pov_camera, and is defined as below :
Code:
void MySensor::initialize()
{
Sensor::initialize();
// Master camera depth texture
_input_depth = new osg::Texture2D();
_input_depth->setTextureSize(_w, _h);
_input_depth->setInternalFormat(GL_DEPTH_COMPONENT24);
_input_depth->setSourceFormat(GL_DEPTH_COMPONENT);
_input_depth->setSourceType(GL_FLOAT);
_input_depth->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::NEAREST);
_input_depth->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::NEAREST);
_view->getCamera()->attach(osg::Camera::DEPTH_BUFFER, _input_depth);
// Point of view depth texture
_pov_depth = new osg::Texture2D();
_pov_depth->setTextureSize(_w, _h);
_pov_depth->setInternalFormat(GL_DEPTH_COMPONENT24);
_pov_depth->setSourceFormat(GL_DEPTH_COMPONENT);
_pov_depth->setSourceType(GL_FLOAT);
_pov_depth->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
_pov_depth->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
// Point of view camera
_pov_camera = new osg::Camera();
_pov_camera->setViewport(0., 0., _w, _h);
_pov_camera->setRenderOrder(osg::Camera::PRE_RENDER);
_pov_camera->setClearColor(Color(1., 0., 0., 1.));
_pov_camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
_pov_camera->setCullMask(Sensor::EXT);
_pov_camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
_pov_camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
_pov_camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
_pov_camera->attach(osg::Camera::DEPTH_BUFFER, _pov_depth);
_pov_camera->setGraphicsContext(_view->getCamera()->getGraphicsContext());
//_was_on = false;_autor=false;
_view->addSlave(_pov_camera, true);
_pov_camera->getOrCreateStateSet()->setAttributeAndModes(new osg::CullFace(osg::CullFace::FRONT));
(...)
}
The _pov_camera is used to compute shadows on a map. But it consumes much resources from CPU whereas I only compute shadows from time to time.
I tried to remove slave camera after using it :
Code:
int result = _view->findSlaveIndexForCamera(_pov_camera);
if (result < _view->getNumSlaves())
{
_view->removeSlave(result);
}
static_cast<osgViewer::Renderer*>(_pov_camera->getRenderer())->setDone(true);
After using it but it does not change anything (whereas if I do not add the slave camera at the beginning performances are OK...). Why removing slave camera does not permit to roll back completely on adding it?
Do you know a way to disable my _pov_camera?
Thank you!
Cheers,
Etienne
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=67631#67631
More information about the osg-users
mailing list