#include "canvas_mgr.hxx"
-#include <Canvas/FGCanvasSystemAdapter.hxx>
#include <Cockpit/od_gauge.hxx>
#include <Main/fg_props.hxx>
#include <Scripting/NasalModelData.hxx>
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,
fgGetNode("/sim/signals/model-reinit", true)
)
{
+
+}
+
+//----------------------------------------------------------------------------
+void CanvasMgr::init()
+{
+ _gui_camera = flightgear::getGUICamera(flightgear::CameraGroup::getDefault());
+ assert(_gui_camera.valid());
+
sc::Canvas::addPlacementFactory
(
"object",
&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;
// if( contexts.empty() )
// return 0;
- static osg::Camera* guiCamera =
- flightgear::getGUICamera(flightgear::CameraGroup::getDefault());
+ osg::ref_ptr<osg::Camera> guiCamera;
+ if( !_gui_camera.lock(guiCamera) )
+ return 0;
osg::State* state = guiCamera->getGraphicsContext()->getState(); //contexts[0]->getState();
if( !state )
void CanvasMgr::handleModelReinit(SGPropertyNode*)
{
for(size_t i = 0; i < _elements.size(); ++i)
- boost::static_pointer_cast<sc::Canvas>(_elements[i])
- ->reloadPlacements("object");
+ static_cast<sc::Canvas*>(_elements[i].get())->reloadPlacements("object");
}