1
0
Fork 0

Add support for Compositor reloading in graphics presets

This commit is contained in:
Fernando García Liñán 2021-03-31 03:54:02 +02:00
parent 3fa13b7762
commit 1423e7d366
3 changed files with 9 additions and 3 deletions

View file

@ -947,6 +947,8 @@ void warpGUIPointer(CameraGroup* cgroup, int x, int y)
void reloadCompositors(CameraGroup *cgroup) void reloadCompositors(CameraGroup *cgroup)
{ {
cgroup->_viewer->getViewerBase()->stopThreading();
for (auto &info : cgroup->_cameras) { for (auto &info : cgroup->_cameras) {
// Ignore the GUI camera // Ignore the GUI camera
if (info->flags & CameraInfo::GUI) if (info->flags & CameraInfo::GUI)
@ -959,7 +961,6 @@ void reloadCompositors(CameraGroup *cgroup)
SGReaderWriterOptions::fromPath(globals->get_fg_root()); SGReaderWriterOptions::fromPath(globals->get_fg_root());
options->setPropertyNode(globals->get_props()); options->setPropertyNode(globals->get_props());
cgroup->_viewer->getViewerBase()->stopThreading();
// Force deletion // Force deletion
info->compositor.reset(nullptr); info->compositor.reset(nullptr);
// Then replace it with a new instance // Then replace it with a new instance
@ -971,8 +972,10 @@ void reloadCompositors(CameraGroup *cgroup)
viewport, viewport,
compositor_path, compositor_path,
options)); options));
cgroup->_viewer->getViewerBase()->startThreading();
} }
cgroup->_viewer->getViewerBase()->startThreading();
fgSetBool("/sim/rendering/compositor-reload-required", false);
} }
void CameraGroup::buildDefaultGroup(osgViewer::View* viewer) void CameraGroup::buildDefaultGroup(osgViewer::View* viewer)

View file

@ -30,6 +30,7 @@ const char* kPresetActiveProp = "/sim/rendering/preset-active";
const char* kRestartRequiredProp = "/sim/rendering/restart-required"; const char* kRestartRequiredProp = "/sim/rendering/restart-required";
const char* kSceneryReloadRequiredProp = "/sim/rendering/scenery-reload-required"; const char* kSceneryReloadRequiredProp = "/sim/rendering/scenery-reload-required";
const char* kCompositorReloadRequiredProp = "/sim/rendering/compositor-reload-required";
// define the property prefixes which graphics presets are allowed to // define the property prefixes which graphics presets are allowed to
// modify. Changes to properties outside these prefixes will be // modify. Changes to properties outside these prefixes will be
@ -256,6 +257,7 @@ void GraphicsPresets::init()
_restartListener.reset(new RequiredPropertyListener{kRestartRequiredProp, graphicsPropsXML->getChild("restart-required")}); _restartListener.reset(new RequiredPropertyListener{kRestartRequiredProp, graphicsPropsXML->getChild("restart-required")});
_sceneryReloadListener.reset(new RequiredPropertyListener{kSceneryReloadRequiredProp, graphicsPropsXML->getChild("scenery-reload-required")}); _sceneryReloadListener.reset(new RequiredPropertyListener{kSceneryReloadRequiredProp, graphicsPropsXML->getChild("scenery-reload-required")});
_compositorReloadListener.reset(new RequiredPropertyListener{kCompositorReloadRequiredProp, graphicsPropsXML->getChild("compositor-reload-required")});
SGPropertyNode_ptr toSave = graphicsPropsXML->getChild("save-to-file"); SGPropertyNode_ptr toSave = graphicsPropsXML->getChild("save-to-file");
if (toSave) { if (toSave) {

View file

@ -44,7 +44,7 @@ public:
void applyInitialPreset(); void applyInitialPreset();
/** /**
* @brief Apple the settings defined in the current graphics preset, * @brief Apply the settings defined in the current graphics preset,
* to the property tree * to the property tree
* *
*/ */
@ -82,6 +82,7 @@ private:
std::unique_ptr<GraphicsConfigChangeListener> _listener; std::unique_ptr<GraphicsConfigChangeListener> _listener;
std::unique_ptr<RequiredPropertyListener> _restartListener; std::unique_ptr<RequiredPropertyListener> _restartListener;
std::unique_ptr<RequiredPropertyListener> _sceneryReloadListener; std::unique_ptr<RequiredPropertyListener> _sceneryReloadListener;
std::unique_ptr<RequiredPropertyListener> _compositorReloadListener;
string_list _propertiesToSave; string_list _propertiesToSave;
}; };