X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FCanvas%2Fcanvas_mgr.cxx;h=6646b7762d42b86e39bc22fe15a5eb4010b97407;hb=45ab3a20a2e49dbaad3cda7acaef5d71e2713d54;hp=b57dcaeb91952137159e1672ad1c8baa55f3dc0d;hpb=eba03b5e469824ee8f1494723fcddbbc56155a08;p=flightgear.git diff --git a/src/Canvas/canvas_mgr.cxx b/src/Canvas/canvas_mgr.cxx index b57dcaeb9..6646b7762 100644 --- a/src/Canvas/canvas_mgr.cxx +++ b/src/Canvas/canvas_mgr.cxx @@ -18,7 +18,6 @@ #include "canvas_mgr.hxx" -#include #include #include
#include @@ -50,17 +49,14 @@ static sc::Placements addSceneObjectPlacement( SGPropertyNode* placement, model_data->getNode(), placement, canvas->getTexture(), - canvas->getCullCallback() + canvas->getCullCallback(), + canvas ); } //------------------------------------------------------------------------------ CanvasMgr::CanvasMgr(): - simgear::canvas::CanvasMgr - ( - fgGetNode("/canvas/by-index", true), - sc::SystemAdapterPtr( new canvas::FGCanvasSystemAdapter ) - ), + simgear::canvas::CanvasMgr( fgGetNode("/canvas/by-index", true) ), _cb_model_reinit ( this, @@ -68,6 +64,15 @@ CanvasMgr::CanvasMgr(): fgGetNode("/sim/signals/model-reinit", true) ) { + +} + +//---------------------------------------------------------------------------- +void CanvasMgr::init() +{ + _gui_camera = flightgear::getGUICamera(flightgear::CameraGroup::getDefault()); + assert(_gui_camera.valid()); + sc::Canvas::addPlacementFactory ( "object", @@ -76,17 +81,33 @@ CanvasMgr::CanvasMgr(): &FGODGauge::set_aircraft_texture, _1, boost::bind(&sc::Canvas::getTexture, _2), - boost::bind(&sc::Canvas::getCullCallback, _2) + boost::bind(&sc::Canvas::getCullCallback, _2), + _2 ) ); - sc::Canvas::addPlacementFactory("scenery-object", &addSceneObjectPlacement); + + simgear::canvas::CanvasMgr::init(); +} + +//---------------------------------------------------------------------------- +void CanvasMgr::shutdown() +{ + simgear::canvas::CanvasMgr::shutdown(); + + sc::Canvas::removePlacementFactory("object"); + sc::Canvas::removePlacementFactory("scenery-object"); + + _gui_camera = 0; } //------------------------------------------------------------------------------ unsigned int CanvasMgr::getCanvasTexId(const simgear::canvas::CanvasPtr& canvas) const { + if( !canvas ) + return 0; + osg::Texture2D* tex = canvas->getTexture(); if( !tex ) return 0; @@ -97,8 +118,9 @@ CanvasMgr::getCanvasTexId(const simgear::canvas::CanvasPtr& canvas) const // if( contexts.empty() ) // return 0; - static osg::Camera* guiCamera = - flightgear::getGUICamera(flightgear::CameraGroup::getDefault()); + osg::ref_ptr guiCamera; + if( !_gui_camera.lock(guiCamera) ) + return 0; osg::State* state = guiCamera->getGraphicsContext()->getState(); //contexts[0]->getState(); if( !state ) @@ -116,6 +138,5 @@ CanvasMgr::getCanvasTexId(const simgear::canvas::CanvasPtr& canvas) const void CanvasMgr::handleModelReinit(SGPropertyNode*) { for(size_t i = 0; i < _elements.size(); ++i) - boost::static_pointer_cast(_elements[i]) - ->reloadPlacements("object"); + static_cast(_elements[i].get())->reloadPlacements("object"); }