diff --git a/include/ignition/gazebo/gui/Gui.hh b/include/ignition/gazebo/gui/Gui.hh index e23f99cfea..39cb1f641c 100644 --- a/include/ignition/gazebo/gui/Gui.hh +++ b/include/ignition/gazebo/gui/Gui.hh @@ -41,8 +41,10 @@ namespace gui /// ign-tools. Set to the name of the application if using ign-tools) /// \param[in] _guiConfig The GUI configuration file. If nullptr, the default /// configuration from IGN_HOMEDIR/.ignition/gazebo/gui.config will be used. - IGNITION_GAZEBO_GUI_VISIBLE int runGui(int &_argc, char **_argv, - const char *_guiConfig); + /// \param[in] _renderEngineGui --render-engine-gui option + /// \return -1 on failure, 0 on success + IGNITION_GAZEBO_GUI_VISIBLE int runGui(int &_argc, + char **_argv, const char *_guiConfig, const char * _renderEngine = nullptr); /// \brief Create a Gazebo GUI application /// \param[in] _argc Number of command line arguments (Used when running @@ -60,10 +62,13 @@ namespace gui /// IGN_HOMEDIR/.ignition/gazebo/gui.config will be used. /// \param[in] _loadPluginsFromSdf If true, plugins specified in the world /// SDFormat file will get loaded. + /// \param[in] _renderEngineGui --render-engine-gui option + /// \return Newly created application. IGNITION_GAZEBO_GUI_VISIBLE std::unique_ptr createGui( int &_argc, char **_argv, const char *_guiConfig, - const char *_defaultGuiConfig = nullptr, bool _loadPluginsFromSdf = true); + const char *_defaultGuiConfig = nullptr, bool _loadPluginsFromSdf = true, + const char *_renderEngine = nullptr); } // namespace gui } // namespace IGNITION_GAZEBO_VERSION_NAMESPACE diff --git a/src/cmd/cmdgazebo.rb.in b/src/cmd/cmdgazebo.rb.in index 9c1d68ba01..dfb46fec7b 100755 --- a/src/cmd/cmdgazebo.rb.in +++ b/src/cmd/cmdgazebo.rb.in @@ -219,8 +219,8 @@ class Cmd 'verbose' => '1', 'gui_config' => '', 'physics_engine' => '', - 'rendering_engine_gui' => '', - 'rendering_engine_server' => '', + 'render_engine_gui' => '', + 'render_engine_server' => '', 'headless-rendering' => 0 } @@ -434,7 +434,7 @@ has properly set the DYLD_LIBRARY_PATH environment variables." const char *, int)' # Import the runGui function - Importer.extern 'int runGui(const char *)' + Importer.extern 'int runGui(const char *, const char *)' # If playback is specified, and the user has not specified a # custom gui config, set the gui config to load the playback @@ -472,7 +472,7 @@ See https://github.com/ignitionrobotics/ign-gazebo/issues/44 for more info." ENV['RMT_PORT'] = '1501' Process.setpgid(0, 0) Process.setproctitle('ign gazebo gui') - Importer.runGui(options['gui_config']) + Importer.runGui(options['gui_config'], options['render_engine_gui']) end Signal.trap("INT") { @@ -511,7 +511,7 @@ See https://github.com/ignitionrobotics/ign-gazebo/issues/44 for more info." end ENV['RMT_PORT'] = '1501' - Importer.runGui(options['gui_config']) + Importer.runGui(options['gui_config'], options['render_engine_gui']) end rescue puts "Library error: Problem running [#{options['command']}]() "\ diff --git a/src/gui/Gui.cc b/src/gui/Gui.cc index 2776c31ced..75e300fc26 100644 --- a/src/gui/Gui.cc +++ b/src/gui/Gui.cc @@ -39,11 +39,11 @@ namespace gazebo inline namespace IGNITION_GAZEBO_VERSION_NAMESPACE { namespace gui { - ////////////////////////////////////////////////// std::unique_ptr createGui( int &_argc, char **_argv, const char *_guiConfig, - const char *_defaultGuiConfig, bool _loadPluginsFromSdf) + const char *_defaultGuiConfig, bool _loadPluginsFromSdf, + const char *_renderEngine) { ignition::common::SignalHandler sigHandler; bool sigKilled = false; @@ -101,6 +101,10 @@ std::unique_ptr createGui( // Customize window auto mainWin = app->findChild(); + if (_renderEngine != nullptr) + { + mainWin->SetRenderEngine(_renderEngine); + } auto win = mainWin->QuickWindow(); win->setProperty("title", "Gazebo"); @@ -288,9 +292,11 @@ std::unique_ptr createGui( } ////////////////////////////////////////////////// -int runGui(int &_argc, char **_argv, const char *_guiConfig) +int runGui(int &_argc, char **_argv, const char *_guiConfig, + const char *_renderEngine) { - auto app = gazebo::gui::createGui(_argc, _argv, _guiConfig); + auto app = gazebo::gui::createGui( + _argc, _argv, _guiConfig, nullptr, true, _renderEngine); if (nullptr != app) { // Run main window. @@ -299,8 +305,8 @@ int runGui(int &_argc, char **_argv, const char *_guiConfig) igndbg << "Shutting down ign-gazebo-gui" << std::endl; return 0; } - else - return -1; + + return -1; } } // namespace gui } // namespace IGNITION_GAZEBO_VERSION_NAMESPACE diff --git a/src/gui/Gui_TEST.cc b/src/gui/Gui_TEST.cc index 96bd3c952b..881bfb931b 100644 --- a/src/gui/Gui_TEST.cc +++ b/src/gui/Gui_TEST.cc @@ -90,7 +90,8 @@ TEST_F(GuiTest, IGN_UTILS_TEST_DISABLED_ON_MAC(PathManager)) node.Advertise("/gazebo/resource_paths/get", pathsCb); igndbg << "Paths advertised" << std::endl; - auto app = ignition::gazebo::gui::createGui(gg_argc, gg_argv, nullptr); + auto app = ignition::gazebo::gui::createGui( + gg_argc, gg_argv, nullptr, nullptr, false, nullptr); EXPECT_NE(nullptr, app); igndbg << "GUI created" << std::endl; diff --git a/src/ign.cc b/src/ign.cc index 0036ad429b..9a384281d8 100644 --- a/src/ign.cc +++ b/src/ign.cc @@ -358,7 +358,7 @@ extern "C" int runServer(const char *_sdfString, } ////////////////////////////////////////////////// -extern "C" int runGui(const char *_guiConfig) +extern "C" int runGui(const char *_guiConfig, const char *_renderEngine) { // argc and argv are going to be passed to a QApplication. The Qt // documentation has a warning about these: @@ -371,5 +371,6 @@ extern "C" int runGui(const char *_guiConfig) // be converted to a const char *. The const cast is here to prevent a warning // since we do need to pass a char* to runGui char *argv = const_cast("ign-gazebo-gui"); - return ignition::gazebo::gui::runGui(argc, &argv, _guiConfig); + return ignition::gazebo::gui::runGui( + argc, &argv, _guiConfig, _renderEngine); } diff --git a/src/ign.hh b/src/ign.hh index a935407590..28e5c26b97 100644 --- a/src/ign.hh +++ b/src/ign.hh @@ -67,8 +67,9 @@ extern "C" int runServer(const char *_sdfString, /// \brief External hook to run simulation GUI. /// \param[in] _guiConfig Path to Ignition GUI configuration file. +/// \param[in] _renderEngine --render-engine-gui option /// \return 0 if successful, 1 if not. -extern "C" int runGui(const char *_guiConfig); +extern "C" int runGui(const char *_guiConfig, const char *_renderEngine); /// \brief External hook to find or download a fuel world provided a URL. /// \param[in] _pathToResource Path to the fuel world resource, ie,