Added a ShadowTechniue::setShadowedScene() virtual method to make it possible to implement techniques as fascades to other techniques

This commit is contained in:
Robert Osfield
2018-04-03 15:29:54 +01:00
parent e888e9621c
commit f9f475d76d
3 changed files with 10 additions and 3 deletions

View File

@@ -27,7 +27,7 @@ namespace osgShadow {
// forward declare ShadowedScene
class ShadowedScene;
/** ShadowedScene provides a mechanism for decorating a scene that the needs to have shadows cast upon it.*/
/** ShadowTechnique is the base class for different shadow implementations.*/
class OSGSHADOW_EXPORT ShadowTechnique : public osg::Object
{
public :
@@ -39,6 +39,8 @@ class OSGSHADOW_EXPORT ShadowTechnique : public osg::Object
virtual const char* libraryName() const { return "osgShadow"; }\
virtual const char* className() const { return "ShadowTechnique"; }
virtual void setShadowedScene(ShadowedScene* ss);
ShadowedScene* getShadowedScene() { return _shadowedScene; }
const ShadowedScene* getShadowedScene() const { return _shadowedScene; }

View File

@@ -48,6 +48,11 @@ ShadowTechnique::~ShadowTechnique()
{
}
void ShadowTechnique::setShadowedScene(ShadowedScene* ss)
{
_shadowedScene = ss;
}
void ShadowTechnique::init()
{
OSG_NOTICE<<className()<<"::init() not implemented yet"<<std::endl;

View File

@@ -80,14 +80,14 @@ void ShadowedScene::setShadowTechnique(ShadowTechnique* technique)
if (_shadowTechnique.valid())
{
_shadowTechnique->cleanSceneGraph();
_shadowTechnique->_shadowedScene = 0;
_shadowTechnique->setShadowedScene(0);
}
_shadowTechnique = technique;
if (_shadowTechnique.valid())
{
_shadowTechnique->_shadowedScene = this;
_shadowTechnique->setShadowedScene(this);
_shadowTechnique->dirty();
}
}