Move three more subsystems into the init + update scheme - fixes some crashes found by papillion.
This commit is contained in:
parent
f5c2c630eb
commit
d573cb43a0
8 changed files with 63 additions and 94 deletions
|
@ -237,7 +237,7 @@ void FGRouteMgr::postinit()
|
||||||
SG_LOG(SG_AUTOPILOT, SG_INFO, "loaded initial waypoints:" << _route.size());
|
SG_LOG(SG_AUTOPILOT, SG_INFO, "loaded initial waypoints:" << _route.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
weightOnWheels = fgGetNode("/gear/gear[0]/wow", false);
|
weightOnWheels = fgGetNode("/gear/gear[0]/wow", true);
|
||||||
// check airbone flag agrees with presets
|
// check airbone flag agrees with presets
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,11 +97,6 @@ void runway_instr::draw()
|
||||||
double sPitch = sin(pitch), cPitch = cos(pitch),
|
double sPitch = sin(pitch), cPitch = cos(pitch),
|
||||||
sYaw = sin(yaw), cYaw = cos(yaw);
|
sYaw = sin(yaw), cYaw = cos(yaw);
|
||||||
|
|
||||||
//Assuming that the "Cockpit View" is always at position zero!!!
|
|
||||||
if (curr_view_id != 0) {
|
|
||||||
globals->get_viewmgr()->set_view(0);
|
|
||||||
globals->get_viewmgr()->copyToCurrent();
|
|
||||||
}
|
|
||||||
//Set the camera to the cockpit view to get the view of the runway from the cockpit
|
//Set the camera to the cockpit view to get the view of the runway from the cockpit
|
||||||
// OSGFIXME
|
// OSGFIXME
|
||||||
// ssgSetCamera((sgVec4 *)cockpit_view->get_VIEW());
|
// ssgSetCamera((sgVec4 *)cockpit_view->get_VIEW());
|
||||||
|
@ -156,15 +151,6 @@ void runway_instr::draw()
|
||||||
drawArrow(); //draw indication arrow
|
drawArrow(); //draw indication arrow
|
||||||
}
|
}
|
||||||
|
|
||||||
//Restore the current view and any offsets
|
|
||||||
if (curr_view_id != 0) {
|
|
||||||
globals->get_viewmgr()->set_view(curr_view_id);
|
|
||||||
globals->get_viewmgr()->copyToCurrent();
|
|
||||||
curr_view->setHeadingOffset_deg(ho);
|
|
||||||
curr_view->setPitchOffset_deg(po);
|
|
||||||
curr_view->setGoalHeadingOffset_deg(gho);
|
|
||||||
curr_view->setGoalPitchOffset_deg(gpo);
|
|
||||||
}
|
|
||||||
//Set the camera back to the current view
|
//Set the camera back to the current view
|
||||||
// OSGFIXME
|
// OSGFIXME
|
||||||
// ssgSetCamera((sgVec4 *)curr_view);
|
// ssgSetCamera((sgVec4 *)curr_view);
|
||||||
|
|
|
@ -93,11 +93,6 @@ void HUD::Runway::draw()
|
||||||
double sPitch = sin(pitch), cPitch = cos(pitch),
|
double sPitch = sin(pitch), cPitch = cos(pitch),
|
||||||
sYaw = sin(yaw), cYaw = cos(yaw);
|
sYaw = sin(yaw), cYaw = cos(yaw);
|
||||||
|
|
||||||
//Assuming that the "Cockpit View" is always at position zero!!!
|
|
||||||
if (curr_view_id != 0) {
|
|
||||||
globals->get_viewmgr()->set_view(0);
|
|
||||||
globals->get_viewmgr()->copyToCurrent();
|
|
||||||
}
|
|
||||||
//Set the camera to the cockpit view to get the view of the runway from the cockpit
|
//Set the camera to the cockpit view to get the view of the runway from the cockpit
|
||||||
// OSGFIXME
|
// OSGFIXME
|
||||||
// ssgSetCamera((sgVec4 *)_cockpit_view->get_VIEW());
|
// ssgSetCamera((sgVec4 *)_cockpit_view->get_VIEW());
|
||||||
|
@ -152,15 +147,6 @@ void HUD::Runway::draw()
|
||||||
drawArrow(); //draw indication arrow
|
drawArrow(); //draw indication arrow
|
||||||
}
|
}
|
||||||
|
|
||||||
//Restore the current view and any offsets
|
|
||||||
if (curr_view_id != 0) {
|
|
||||||
globals->get_viewmgr()->set_view(curr_view_id);
|
|
||||||
globals->get_viewmgr()->copyToCurrent();
|
|
||||||
curr_view->setHeadingOffset_deg(ho);
|
|
||||||
curr_view->setPitchOffset_deg(po);
|
|
||||||
curr_view->setGoalHeadingOffset_deg(gho);
|
|
||||||
curr_view->setGoalPitchOffset_deg(gpo);
|
|
||||||
}
|
|
||||||
//Set the camera back to the current view
|
//Set the camera back to the current view
|
||||||
// OSGFIXME
|
// OSGFIXME
|
||||||
// ssgSetCamera((sgVec4 *)curr_view);
|
// ssgSetCamera((sgVec4 *)curr_view);
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
#include <Input/input.hxx>
|
#include <Input/input.hxx>
|
||||||
#include <Instrumentation/instrument_mgr.hxx>
|
#include <Instrumentation/instrument_mgr.hxx>
|
||||||
#include <Model/acmodel.hxx>
|
#include <Model/acmodel.hxx>
|
||||||
|
#include <Model/modelmgr.hxx>
|
||||||
#include <AIModel/submodel.hxx>
|
#include <AIModel/submodel.hxx>
|
||||||
#include <AIModel/AIManager.hxx>
|
#include <AIModel/AIManager.hxx>
|
||||||
#include <Navaids/navdb.hxx>
|
#include <Navaids/navdb.hxx>
|
||||||
|
@ -1309,9 +1310,6 @@ bool fgInitSubsystems() {
|
||||||
// Initialize the scenery management subsystem.
|
// Initialize the scenery management subsystem.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
globals->add_subsystem("tile-manager", globals->get_tile_mgr(),
|
|
||||||
SGSubsystemMgr::DISPLAY);
|
|
||||||
|
|
||||||
globals->get_scenery()->get_scene_graph()
|
globals->get_scenery()->get_scene_graph()
|
||||||
->addChild(simgear::Particles::getCommonRoot());
|
->addChild(simgear::Particles::getCommonRoot());
|
||||||
simgear::GlobalParticleCallback::setSwitch(fgGetNode("/sim/rendering/particles", true));
|
simgear::GlobalParticleCallback::setSwitch(fgGetNode("/sim/rendering/particles", true));
|
||||||
|
@ -1361,23 +1359,12 @@ bool fgInitSubsystems() {
|
||||||
|
|
||||||
globals->add_subsystem("gui", new NewGUI, SGSubsystemMgr::INIT);
|
globals->add_subsystem("gui", new NewGUI, SGSubsystemMgr::INIT);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Initialize the lighting subsystem.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY);
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// Initialize the 2D cloud subsystem.
|
// Initialize the 2D cloud subsystem.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
fgGetBool("/sim/rendering/bump-mapping", false);
|
fgGetBool("/sim/rendering/bump-mapping", false);
|
||||||
|
|
||||||
#ifdef ENABLE_AUDIO_SUPPORT
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Initialize the sound-effects subsystem.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Initialise the ATC Manager
|
// Initialise the ATC Manager
|
||||||
|
@ -1461,7 +1448,37 @@ bool fgInitSubsystems() {
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
globals->add_subsystem("replay", new FGReplay);
|
globals->add_subsystem("replay", new FGReplay);
|
||||||
|
|
||||||
|
#ifdef ENABLE_AUDIO_SUPPORT
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Initialize the sound-effects subsystem.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Initialize the lighting subsystem.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY);
|
||||||
|
|
||||||
|
// ordering here is important : Nasal (via events), then models, then views
|
||||||
|
globals->add_subsystem("events", globals->get_event_mgr(), SGSubsystemMgr::DISPLAY);
|
||||||
|
|
||||||
|
FGAircraftModel* acm = new FGAircraftModel;
|
||||||
|
globals->set_aircraft_model(acm);
|
||||||
|
globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY);
|
||||||
|
|
||||||
|
FGModelMgr* mm = new FGModelMgr;
|
||||||
|
globals->set_model_mgr(mm);
|
||||||
|
globals->add_subsystem("model-manager", mm, SGSubsystemMgr::DISPLAY);
|
||||||
|
|
||||||
|
FGViewMgr *viewmgr = new FGViewMgr;
|
||||||
|
globals->set_viewmgr( viewmgr );
|
||||||
|
globals->add_subsystem("view-manager", viewmgr, SGSubsystemMgr::DISPLAY);
|
||||||
|
|
||||||
|
globals->add_subsystem("tile-manager", globals->get_tile_mgr(),
|
||||||
|
SGSubsystemMgr::DISPLAY);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Bind and initialize subsystems.
|
// Bind and initialize subsystems.
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -170,7 +170,6 @@ FGGlobals::~FGGlobals()
|
||||||
|
|
||||||
subsystem_mgr->unbind();
|
subsystem_mgr->unbind();
|
||||||
delete subsystem_mgr;
|
delete subsystem_mgr;
|
||||||
delete event_mgr;
|
|
||||||
|
|
||||||
delete time_params;
|
delete time_params;
|
||||||
delete mag;
|
delete mag;
|
||||||
|
@ -180,10 +179,7 @@ FGGlobals::~FGGlobals()
|
||||||
|
|
||||||
delete ATC_mgr;
|
delete ATC_mgr;
|
||||||
delete controls;
|
delete controls;
|
||||||
delete viewmgr;
|
|
||||||
|
|
||||||
// delete commands;
|
|
||||||
delete model_mgr;
|
|
||||||
delete channel_options_list;
|
delete channel_options_list;
|
||||||
delete initial_waypoints;
|
delete initial_waypoints;
|
||||||
delete scenery;
|
delete scenery;
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
#include <Cockpit/cockpit.hxx>
|
#include <Cockpit/cockpit.hxx>
|
||||||
#include <Cockpit/hud.hxx>
|
#include <Cockpit/hud.hxx>
|
||||||
#include <Model/panelnode.hxx>
|
#include <Model/panelnode.hxx>
|
||||||
#include <Model/modelmgr.hxx>
|
|
||||||
#include <Model/acmodel.hxx>
|
#include <Model/acmodel.hxx>
|
||||||
#include <Scenery/scenery.hxx>
|
#include <Scenery/scenery.hxx>
|
||||||
#include <Scenery/tilemgr.hxx>
|
#include <Scenery/tilemgr.hxx>
|
||||||
|
@ -149,16 +148,6 @@ static void fgMainLoop( void ) {
|
||||||
|
|
||||||
globals->get_subsystem_mgr()->update(sim_dt);
|
globals->get_subsystem_mgr()->update(sim_dt);
|
||||||
|
|
||||||
// run Nasal's settimer() loops right before the view manager
|
|
||||||
globals->get_event_mgr()->update(sim_dt);
|
|
||||||
|
|
||||||
// pick up model coordidnates that Nasal code may have set relative to the
|
|
||||||
// aircraft's
|
|
||||||
globals->get_model_mgr()->update(sim_dt);
|
|
||||||
|
|
||||||
// update the view angle as late as possible, but before sound calculations
|
|
||||||
globals->get_viewmgr()->update(real_dt);
|
|
||||||
|
|
||||||
// Update the sound manager last so it can use the CPU while the GPU
|
// Update the sound manager last so it can use the CPU while the GPU
|
||||||
// is processing the scenery (doubled the frame-rate for me) -EMH-
|
// is processing the scenery (doubled the frame-rate for me) -EMH-
|
||||||
#ifdef ENABLE_AUDIO_SUPPORT
|
#ifdef ENABLE_AUDIO_SUPPORT
|
||||||
|
@ -375,33 +364,12 @@ static void fgIdleFunction ( void ) {
|
||||||
globals->set_tile_mgr( new FGTileMgr );
|
globals->set_tile_mgr( new FGTileMgr );
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Initialize the general model subsystem.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
globals->set_model_mgr(new FGModelMgr);
|
|
||||||
globals->get_model_mgr()->init();
|
|
||||||
globals->get_model_mgr()->bind();
|
|
||||||
fgSplashProgress("loading aircraft");
|
fgSplashProgress("loading aircraft");
|
||||||
|
|
||||||
|
|
||||||
} else if ( idle_state == 5 ) {
|
} else if ( idle_state == 5 ) {
|
||||||
idle_state++;
|
idle_state++;
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Initialize the 3D aircraft model subsystem (has a dependency on
|
|
||||||
// the scenery subsystem.)
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
FGAircraftModel* acm = new FGAircraftModel;
|
|
||||||
globals->set_aircraft_model(acm);
|
|
||||||
globals->add_subsystem("aircraft-model", acm, SGSubsystemMgr::DISPLAY);
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
// Initialize the view manager subsystem.
|
|
||||||
////////////////////////////////////////////////////////////////////
|
|
||||||
FGViewMgr *viewmgr = new FGViewMgr;
|
|
||||||
globals->set_viewmgr( viewmgr );
|
|
||||||
viewmgr->init();
|
|
||||||
viewmgr->bind();
|
|
||||||
fgSplashProgress("generating sky elements");
|
fgSplashProgress("generating sky elements");
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@
|
||||||
FGViewMgr::FGViewMgr( void ) :
|
FGViewMgr::FGViewMgr( void ) :
|
||||||
axis_long(0),
|
axis_long(0),
|
||||||
axis_lat(0),
|
axis_lat(0),
|
||||||
|
inited(false),
|
||||||
view_number(fgGetNode("/sim/current-view/view-number", true)),
|
view_number(fgGetNode("/sim/current-view/view-number", true)),
|
||||||
config_list(fgGetNode("/sim", true)->getChildren("view")),
|
config_list(fgGetNode("/sim", true)->getChildren("view")),
|
||||||
current(0)
|
current(0)
|
||||||
|
@ -53,6 +54,13 @@ FGViewMgr::~FGViewMgr( void ) {
|
||||||
void
|
void
|
||||||
FGViewMgr::init ()
|
FGViewMgr::init ()
|
||||||
{
|
{
|
||||||
|
if (inited) {
|
||||||
|
SG_LOG(SG_GENERAL, SG_WARN, "duplicate init of view manager");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
inited = true;
|
||||||
|
|
||||||
double aspect_ratio_multiplier
|
double aspect_ratio_multiplier
|
||||||
= fgGetDouble("/sim/current-view/aspect-ratio-multiplier");
|
= fgGetDouble("/sim/current-view/aspect-ratio-multiplier");
|
||||||
|
|
||||||
|
@ -118,6 +126,7 @@ FGViewMgr::init ()
|
||||||
}
|
}
|
||||||
|
|
||||||
copyToCurrent();
|
copyToCurrent();
|
||||||
|
do_bind();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -160,7 +169,14 @@ FGViewMgr::reinit ()
|
||||||
typedef double (FGViewMgr::*double_getter)() const;
|
typedef double (FGViewMgr::*double_getter)() const;
|
||||||
|
|
||||||
void
|
void
|
||||||
FGViewMgr::bind ()
|
FGViewMgr::bind()
|
||||||
|
{
|
||||||
|
// view-manager code was designed to init before bind, so
|
||||||
|
// this is a no-op; init() calls the real bind() impl below
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
FGViewMgr::do_bind()
|
||||||
{
|
{
|
||||||
// these are bound to the current view properties
|
// these are bound to the current view properties
|
||||||
fgTie("/sim/current-view/heading-offset-deg", this,
|
fgTie("/sim/current-view/heading-offset-deg", this,
|
||||||
|
@ -352,6 +368,10 @@ FGViewMgr::update (double dt)
|
||||||
void
|
void
|
||||||
FGViewMgr::copyToCurrent()
|
FGViewMgr::copyToCurrent()
|
||||||
{
|
{
|
||||||
|
if (!inited) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SGPropertyNode *n = config_list[current];
|
SGPropertyNode *n = config_list[current];
|
||||||
fgSetString("/sim/current-view/name", n->getStringValue("name"));
|
fgSetString("/sim/current-view/name", n->getStringValue("name"));
|
||||||
fgSetString("/sim/current-view/type", n->getStringValue("type"));
|
fgSetString("/sim/current-view/type", n->getStringValue("type"));
|
||||||
|
@ -719,15 +739,9 @@ FGViewMgr::setView (int newview)
|
||||||
newview = 0;
|
newview = 0;
|
||||||
|
|
||||||
// set new view
|
// set new view
|
||||||
set_view(newview);
|
current = newview;
|
||||||
// copy in view data
|
// copy in view data
|
||||||
copyToCurrent();
|
copyToCurrent();
|
||||||
|
|
||||||
// Copy the fdm's position into the SGLocation which is shared with
|
|
||||||
// some views ...
|
|
||||||
globals->get_aircraft_model()->update(0);
|
|
||||||
// Do the update ...
|
|
||||||
update(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -755,7 +769,7 @@ FGViewMgr::getARM_deg () const
|
||||||
|
|
||||||
void
|
void
|
||||||
FGViewMgr::setARM_deg (double aspect_ratio_multiplier)
|
FGViewMgr::setARM_deg (double aspect_ratio_multiplier)
|
||||||
{
|
{
|
||||||
FGViewer * view = get_current_view();
|
FGViewer * view = get_current_view();
|
||||||
if (view != 0)
|
if (view != 0)
|
||||||
view->set_aspect_ratio_multiplier(aspect_ratio_multiplier);
|
view->set_aspect_ratio_multiplier(aspect_ratio_multiplier);
|
||||||
|
|
|
@ -69,14 +69,12 @@ public:
|
||||||
|
|
||||||
// setters
|
// setters
|
||||||
void clear();
|
void clear();
|
||||||
inline void set_view( const int v ) { current = v; }
|
|
||||||
void add_view( FGViewer * v );
|
void add_view( FGViewer * v );
|
||||||
|
|
||||||
// copies current offset settings to current-view path...
|
|
||||||
void copyToCurrent ();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void do_bind();
|
||||||
|
|
||||||
list<const char*> tied_props;
|
list<const char*> tied_props;
|
||||||
|
|
||||||
double axis_long;
|
double axis_long;
|
||||||
|
@ -136,6 +134,10 @@ private:
|
||||||
|
|
||||||
bool stationary () const;
|
bool stationary () const;
|
||||||
|
|
||||||
|
// copies current offset settings to current-view path...
|
||||||
|
void copyToCurrent ();
|
||||||
|
|
||||||
|
bool inited;
|
||||||
SGPropertyNode_ptr view_number;
|
SGPropertyNode_ptr view_number;
|
||||||
vector<SGPropertyNode_ptr> config_list;
|
vector<SGPropertyNode_ptr> config_list;
|
||||||
typedef std::vector<FGViewerPtr> viewer_list;
|
typedef std::vector<FGViewerPtr> viewer_list;
|
||||||
|
|
Loading…
Add table
Reference in a new issue