MCPcopy Create free account
hub / github.com/OpenDungeons/OpenDungeons / initVideoConfig

Method initVideoConfig

source/utils/ConfigManager.cpp:1605–1688  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1603}
1604
1605bool ConfigManager::initVideoConfig(Ogre::Root& ogreRoot)
1606{
1607 // Also creates the config entry if it doesn't exist in config yet.
1608 std::string rendererName = getVideoValue(Config::RENDERER, std::string(), false);
1609 // Try the default OpenGL renderer first, if empty.
1610 if (rendererName.empty())
1611 rendererName = "OpenGL Rendering Subsystem";
1612
1613 Ogre::RenderSystem* renderSystem = ogreRoot.getRenderSystemByName(rendererName);
1614 bool sameRenderer = true;
1615 if (renderSystem == nullptr)
1616 {
1617 const Ogre::RenderSystemList& renderers = ogreRoot.getAvailableRenderers();
1618 if(renderers.empty())
1619 {
1620 OD_LOG_ERR("No valid renderer found. Exiting...");
1621 return false;
1622 }
1623 renderSystem = *renderers.begin();
1624 OD_LOG_INF("No OpenGL renderer found. Using the first available: " + renderSystem->getName());
1625 sameRenderer = false;
1626 }
1627
1628 ogreRoot.setRenderSystem(renderSystem);
1629 Ogre::ConfigOptionMap& options = renderSystem->getConfigOptions();
1630
1631 // If the renderer was changed, we need to reset the video options.
1632 if (sameRenderer == false)
1633 {
1634
1635 mUserConfig[Config::Ctg::VIDEO].clear();
1636
1637 for (std::pair<Ogre::String, Ogre::ConfigOption> option : options)
1638 {
1639 std::string optionName = option.first;
1640 Ogre::ConfigOption& values = option.second;
1641 // We don't store options that are immutable or empty
1642 if (values.immutable || values.possibleValues.empty())
1643 continue;
1644
1645 setVideoValue(optionName, values.currentValue);
1646 }
1647 }
1648 else {
1649 std::vector<std::string> optionsToRemove;
1650
1651 // The renderer system was initialized. Let's load its new option values.
1652 std::map<std::string, std::string>& mVideoUserConfig = mUserConfig[Config::Ctg::VIDEO];
1653 for (std::pair<std::string, std::string> setting : mVideoUserConfig)
1654 {
1655 // Check the option exists.
1656 if (options.find(setting.first) == options.end())
1657 {
1658 optionsToRemove.push_back(setting.first);
1659 continue;
1660 }
1661
1662 // Check the desired option value exists.

Callers 1

startClientMethod · 0.80

Calls 1

clearMethod · 0.80

Tested by

no test coverage detected