From 08aed1ccc88717ad541d878a7c9c54bce0cd89d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Garc=C3=ADa=20Li=C3=B1=C3=A1n?= Date: Tue, 31 Aug 2021 18:14:12 +0200 Subject: [PATCH] Canvas: Do not hold a reference to the GUI camera It might be not be valid anymore after a reset. Just query it when needed. --- src/Canvas/canvas_mgr.cxx | 36 ++++++++++++++---------------------- src/Canvas/canvas_mgr.hxx | 1 - 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/Canvas/canvas_mgr.cxx b/src/Canvas/canvas_mgr.cxx index 60a929205..a3b45a576 100644 --- a/src/Canvas/canvas_mgr.cxx +++ b/src/Canvas/canvas_mgr.cxx @@ -97,24 +97,18 @@ CanvasMgr::CanvasMgr(): //---------------------------------------------------------------------------- void CanvasMgr::init() { - flightgear::CameraGroup* camera_group = flightgear::CameraGroup::getDefault(); - if (camera_group) { - _gui_camera = flightgear::getGUICamera(camera_group); - if (_gui_camera.valid()) { - // add our two placement factories - sc::Canvas::addPlacementFactory - ( - "object", [](SGPropertyNode* placement, sc::CanvasPtr canvas) { - return FGODGauge::set_aircraft_texture(placement, - canvas->getTexture(), - canvas->getCullCallback(), - canvas); - }); - - sc::Canvas::addPlacementFactory("scenery-object", &addSceneObjectPlacement); - sc::Canvas::addPlacementFactory("dynamic-model", &addDynamicModelPlacement); - } - } + // add our two placement factories + sc::Canvas::addPlacementFactory + ( + "object", [](SGPropertyNode* placement, sc::CanvasPtr canvas) { + return FGODGauge::set_aircraft_texture(placement, + canvas->getTexture(), + canvas->getCullCallback(), + canvas); + }); + sc::Canvas::addPlacementFactory("scenery-object", &addSceneObjectPlacement); + sc::Canvas::addPlacementFactory("dynamic-model", &addDynamicModelPlacement); + simgear::canvas::CanvasMgr::init(); } @@ -126,8 +120,6 @@ void CanvasMgr::shutdown() sc::Canvas::removePlacementFactory("object"); sc::Canvas::removePlacementFactory("scenery-object"); sc::Canvas::removePlacementFactory("dynamic-model"); - - _gui_camera = 0; } //------------------------------------------------------------------------------ @@ -147,8 +139,8 @@ CanvasMgr::getCanvasTexId(const simgear::canvas::CanvasPtr& canvas) const // if( contexts.empty() ) // return 0; - osg::ref_ptr guiCamera; - if( !_gui_camera.lock(guiCamera) ) + osg::Camera* guiCamera = flightgear::getGUICamera(flightgear::CameraGroup::getDefault()); + if (!guiCamera) return 0; osg::State* state = guiCamera->getGraphicsContext()->getState(); //contexts[0]->getState(); diff --git a/src/Canvas/canvas_mgr.hxx b/src/Canvas/canvas_mgr.hxx index 175727073..a8716ec84 100644 --- a/src/Canvas/canvas_mgr.hxx +++ b/src/Canvas/canvas_mgr.hxx @@ -47,7 +47,6 @@ public: protected: - osg::observer_ptr _gui_camera; SGPropertyChangeCallback _cb_model_reinit; void handleModelReinit(SGPropertyNode*);