defer occluder registration until the shadows subsytem is initialized.
That way models that are loaded early during startup get their shadows, too.
This commit is contained in:
parent
189896a7ab
commit
9512ba5ff7
2 changed files with 10 additions and 5 deletions
|
@ -32,7 +32,6 @@ extern SGShadowVolume *shadows;
|
||||||
FGModelMgr::FGModelMgr ()
|
FGModelMgr::FGModelMgr ()
|
||||||
: _models(fgGetNode("/models", true)),
|
: _models(fgGetNode("/models", true)),
|
||||||
_listener(new Listener(this))
|
_listener(new Listener(this))
|
||||||
|
|
||||||
{
|
{
|
||||||
_models->addChangeListener(_listener);
|
_models->addChangeListener(_listener);
|
||||||
}
|
}
|
||||||
|
@ -81,8 +80,6 @@ FGModelMgr::add_model (SGPropertyNode * node)
|
||||||
globals->get_sim_time_sec(), /*cache_object=*/false);
|
globals->get_sim_time_sec(), /*cache_object=*/false);
|
||||||
|
|
||||||
model->init( object );
|
model->init( object );
|
||||||
if (shadows)
|
|
||||||
shadows->addOccluder((ssgBranch *)object, SGShadowVolume::occluderTypeTileObject);
|
|
||||||
|
|
||||||
// Set position and orientation either
|
// Set position and orientation either
|
||||||
// indirectly through property refs
|
// indirectly through property refs
|
||||||
|
@ -168,6 +165,12 @@ FGModelMgr::update (double dt)
|
||||||
model->setHeadingDeg(instance->heading_deg_node->getDoubleValue());
|
model->setHeadingDeg(instance->heading_deg_node->getDoubleValue());
|
||||||
|
|
||||||
instance->model->update();
|
instance->model->update();
|
||||||
|
|
||||||
|
if (shadows && !instance->shadow) {
|
||||||
|
ssgBranch *branch = (ssgBranch *)instance->model->getSceneGraph();
|
||||||
|
shadows->addOccluder(branch, SGShadowVolume::occluderTypeTileObject);
|
||||||
|
instance->shadow = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +214,8 @@ FGModelMgr::Instance::Instance ()
|
||||||
elev_ft_node(0),
|
elev_ft_node(0),
|
||||||
roll_deg_node(0),
|
roll_deg_node(0),
|
||||||
pitch_deg_node(0),
|
pitch_deg_node(0),
|
||||||
heading_deg_node(0)
|
heading_deg_node(0),
|
||||||
|
shadow(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +263,7 @@ FGModelMgr::Listener::childRemoved(SGPropertyNode * parent, SGPropertyNode * chi
|
||||||
|
|
||||||
_mgr->_instances.erase(it);
|
_mgr->_instances.erase(it);
|
||||||
ssgBranch *branch = (ssgBranch *)instance->model->getSceneGraph();
|
ssgBranch *branch = (ssgBranch *)instance->model->getSceneGraph();
|
||||||
if (shadows)
|
if (shadows && instance->shadow)
|
||||||
shadows->deleteOccluder(branch);
|
shadows->deleteOccluder(branch);
|
||||||
globals->get_scenery()->get_scene_graph()->removeKid(branch);
|
globals->get_scenery()->get_scene_graph()->removeKid(branch);
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ public:
|
||||||
SGPropertyNode_ptr roll_deg_node;
|
SGPropertyNode_ptr roll_deg_node;
|
||||||
SGPropertyNode_ptr pitch_deg_node;
|
SGPropertyNode_ptr pitch_deg_node;
|
||||||
SGPropertyNode_ptr heading_deg_node;
|
SGPropertyNode_ptr heading_deg_node;
|
||||||
|
bool shadow;
|
||||||
};
|
};
|
||||||
|
|
||||||
FGModelMgr ();
|
FGModelMgr ();
|
||||||
|
|
Loading…
Add table
Reference in a new issue