Added support for passing on slave Camera's StateSet's to the rendering backend.
This commit is contained in:
parent
f1bd2eaf04
commit
f795770fed
@ -131,6 +131,10 @@ class OSGUTIL_EXPORT SceneView : public osg::Object, public osg::CullSettings
|
|||||||
osg::StateSet* getGlobalStateSet() { return _globalStateSet.get(); }
|
osg::StateSet* getGlobalStateSet() { return _globalStateSet.get(); }
|
||||||
const osg::StateSet* getGlobalStateSet() const { return _globalStateSet.get(); }
|
const osg::StateSet* getGlobalStateSet() const { return _globalStateSet.get(); }
|
||||||
|
|
||||||
|
void setSecondaryStateSet(osg::StateSet* state) { _secondaryStateSet = state; }
|
||||||
|
osg::StateSet* getSecondaryStateSet() { return _secondaryStateSet.get(); }
|
||||||
|
const osg::StateSet* getSecondaryStateSet() const { return _secondaryStateSet.get(); }
|
||||||
|
|
||||||
void setLocalStateSet(osg::StateSet* state) { _localStateSet = state; }
|
void setLocalStateSet(osg::StateSet* state) { _localStateSet = state; }
|
||||||
osg::StateSet* getLocalStateSet() { return _localStateSet.get(); }
|
osg::StateSet* getLocalStateSet() { return _localStateSet.get(); }
|
||||||
const osg::StateSet* getLocalStateSet() const { return _localStateSet.get(); }
|
const osg::StateSet* getLocalStateSet() const { return _localStateSet.get(); }
|
||||||
@ -523,6 +527,8 @@ class OSGUTIL_EXPORT SceneView : public osg::Object, public osg::CullSettings
|
|||||||
osg::ref_ptr<osg::Light> _light;
|
osg::ref_ptr<osg::Light> _light;
|
||||||
osg::ref_ptr<osg::DisplaySettings> _displaySettings;
|
osg::ref_ptr<osg::DisplaySettings> _displaySettings;
|
||||||
|
|
||||||
|
osg::ref_ptr<osg::StateSet> _secondaryStateSet;
|
||||||
|
|
||||||
FusionDistanceMode _fusionDistanceMode;
|
FusionDistanceMode _fusionDistanceMode;
|
||||||
float _fusionDistanceValue;
|
float _fusionDistanceValue;
|
||||||
|
|
||||||
|
@ -960,6 +960,7 @@ bool SceneView::cullStage(const osg::Matrixd& projection,const osg::Matrixd& mod
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (_globalStateSet.valid()) cullVisitor->pushStateSet(_globalStateSet.get());
|
if (_globalStateSet.valid()) cullVisitor->pushStateSet(_globalStateSet.get());
|
||||||
|
if (_secondaryStateSet.valid()) cullVisitor->pushStateSet(_secondaryStateSet.get());
|
||||||
if (_localStateSet.valid()) cullVisitor->pushStateSet(_localStateSet.get());
|
if (_localStateSet.valid()) cullVisitor->pushStateSet(_localStateSet.get());
|
||||||
|
|
||||||
|
|
||||||
@ -982,6 +983,7 @@ bool SceneView::cullStage(const osg::Matrixd& projection,const osg::Matrixd& mod
|
|||||||
cullVisitor->popViewport();
|
cullVisitor->popViewport();
|
||||||
|
|
||||||
if (_localStateSet.valid()) cullVisitor->popStateSet();
|
if (_localStateSet.valid()) cullVisitor->popStateSet();
|
||||||
|
if (_secondaryStateSet.valid()) cullVisitor->popStateSet();
|
||||||
if (_globalStateSet.valid()) cullVisitor->popStateSet();
|
if (_globalStateSet.valid()) cullVisitor->popStateSet();
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,9 +178,20 @@ Renderer::Renderer(osg::Camera* camera):
|
|||||||
_sceneView[0] = new osgUtil::SceneView;
|
_sceneView[0] = new osgUtil::SceneView;
|
||||||
_sceneView[1] = new osgUtil::SceneView;
|
_sceneView[1] = new osgUtil::SceneView;
|
||||||
|
|
||||||
|
|
||||||
osg::Camera* masterCamera = _camera->getView() ? _camera->getView()->getCamera() : camera;
|
osg::Camera* masterCamera = _camera->getView() ? _camera->getView()->getCamera() : camera;
|
||||||
osg::StateSet* stateset = masterCamera->getOrCreateStateSet();
|
|
||||||
|
osg::StateSet* global_stateset = 0;
|
||||||
|
osg::StateSet* secondary_stateset = 0;
|
||||||
|
if (_camera != masterCamera)
|
||||||
|
{
|
||||||
|
global_stateset = masterCamera->getOrCreateStateSet();
|
||||||
|
secondary_stateset = _camera->getStateSet();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
global_stateset = _camera->getOrCreateStateSet();
|
||||||
|
}
|
||||||
|
|
||||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(_camera->getView());
|
osgViewer::View* view = dynamic_cast<osgViewer::View*>(_camera->getView());
|
||||||
|
|
||||||
osg::DisplaySettings* ds = _camera->getDisplaySettings() ? _camera->getDisplaySettings() :
|
osg::DisplaySettings* ds = _camera->getDisplaySettings() ? _camera->getDisplaySettings() :
|
||||||
@ -197,8 +208,11 @@ Renderer::Renderer(osg::Camera* camera):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_sceneView[0]->setGlobalStateSet(stateset);
|
_sceneView[0]->setGlobalStateSet(global_stateset);
|
||||||
_sceneView[1]->setGlobalStateSet(stateset);
|
_sceneView[0]->setSecondaryStateSet(secondary_stateset);
|
||||||
|
|
||||||
|
_sceneView[1]->setGlobalStateSet(global_stateset);
|
||||||
|
_sceneView[1]->setSecondaryStateSet(secondary_stateset);
|
||||||
|
|
||||||
_sceneView[0]->setDefaults(sceneViewOptions);
|
_sceneView[0]->setDefaults(sceneViewOptions);
|
||||||
_sceneView[1]->setDefaults(sceneViewOptions);
|
_sceneView[1]->setDefaults(sceneViewOptions);
|
||||||
@ -234,11 +248,27 @@ void Renderer::setGraphicsThreadDoesCull(bool flag)
|
|||||||
void Renderer::updateSceneView(osgUtil::SceneView* sceneView)
|
void Renderer::updateSceneView(osgUtil::SceneView* sceneView)
|
||||||
{
|
{
|
||||||
osg::Camera* masterCamera = _camera->getView() ? _camera->getView()->getCamera() : _camera.get();
|
osg::Camera* masterCamera = _camera->getView() ? _camera->getView()->getCamera() : _camera.get();
|
||||||
osg::StateSet* stateset = masterCamera->getOrCreateStateSet();
|
|
||||||
|
|
||||||
if (sceneView->getGlobalStateSet()!=stateset)
|
osg::StateSet* global_stateset = 0;
|
||||||
|
osg::StateSet* secondary_stateset = 0;
|
||||||
|
if (_camera != masterCamera)
|
||||||
{
|
{
|
||||||
sceneView->setGlobalStateSet(stateset);
|
global_stateset = masterCamera->getOrCreateStateSet();
|
||||||
|
secondary_stateset = _camera->getStateSet();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
global_stateset = _camera->getOrCreateStateSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sceneView->getGlobalStateSet()!=global_stateset)
|
||||||
|
{
|
||||||
|
sceneView->setGlobalStateSet(global_stateset);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sceneView->getSecondaryStateSet()!=secondary_stateset)
|
||||||
|
{
|
||||||
|
sceneView->setSecondaryStateSet(secondary_stateset);
|
||||||
}
|
}
|
||||||
|
|
||||||
osg::GraphicsContext* context = _camera->getGraphicsContext();
|
osg::GraphicsContext* context = _camera->getGraphicsContext();
|
||||||
|
Loading…
Reference in New Issue
Block a user