diff --git a/apps/opencs/editor.cpp b/apps/opencs/editor.cpp index 766726bce..d4ea32b26 100644 --- a/apps/opencs/editor.cpp +++ b/apps/opencs/editor.cpp @@ -299,14 +299,12 @@ std::auto_ptr CS::Editor::setupGraphics() std::auto_ptr factory (new sh::Factory (platform)); - std::string shLang = mUserSettings.settingValue("Shader/language").toStdString(); + std::string shLang = mUserSettings.settingValue("General/shader mode").toStdString(); enum sh::Language lang; - if(shLang == "CG") lang = sh::Language_CG; - else if(shLang == "HLSL") lang = sh::Language_HLSL; - else if(shLang == "GLSL") lang = sh::Language_GLSL; - else if(shLang == "GLSLES") lang = sh::Language_GLSLES; - else if(shLang == "Count") lang = sh::Language_Count; - else lang = sh::Language_None; + if(shLang == "glsl") lang = sh::Language_GLSL; + else if(shLang == "glsles") lang = sh::Language_GLSLES; + else if(shLang == "hlsl") lang = sh::Language_HLSL; + else lang = sh::Language_CG; factory->setCurrentLanguage (lang); factory->setWriteSourceCache (true); diff --git a/apps/opencs/model/settings/usersettings.cpp b/apps/opencs/model/settings/usersettings.cpp index e8ee98277..64d69eab8 100644 --- a/apps/opencs/model/settings/usersettings.cpp +++ b/apps/opencs/model/settings/usersettings.cpp @@ -347,24 +347,49 @@ void CSMSettings::UserSettings::loadSettings (const QString &fileName) #endif } mSettingCfgDefinitions->setValue("Video/render system", renderSystem.c_str()); + + std::string currShader = settings.getString("shader mode", "General"); + // can't call Ogre::Root at this point as it hasn't been initialised + QString rend = renderSystem.c_str(); + bool openGL = rend.contains(QRegExp("^OpenGL", Qt::CaseInsensitive)); + bool glES = rend.contains(QRegExp("^OpenGL ES", Qt::CaseInsensitive)); + // force shader language based on render system - if(renderSystem == "Direct3D9 Rendering Subsystem") - mSettingDefinitions->setValue("Shader/language", "CG"); - else - mSettingDefinitions->setValue("Shader/language", "GLSL"); + if(currShader == "" + || (openGL && currShader == "hlsl") + || (!openGL && currShader == "glsl") + || (glES && currShader != "glsles")) + { + QString shader = openGL ? (glES ? "glsles" : "glsl") : "hlsl"; + mSettingDefinitions->setValue("General/shader mode", shader); + } // check if override entry exists (default: override) if(!mSettingDefinitions->childGroups().contains("Video", Qt::CaseInsensitive)) mSettingDefinitions->setValue("Video/use settings.cfg", "true"); } +QStringList CSMSettings::UserSettings::getOgreRenderers() +{ + QStringList result; + + Ogre::RenderSystemList renderers = Ogre::Root::getSingleton().getAvailableRenderers(); + Ogre::RenderSystemList::iterator it = renderers.begin(); + for(; it != renderers.end(); ++it) + result.append((*it)->getName().c_str()); + + return result; +} + QStringList CSMSettings::UserSettings::getOgreOptions(const QString &key, const QString &renderer) { QStringList result; - Ogre::ConfigOptionMap& renderOpt = - //Ogre::Root::getSingleton().getRenderSystem()->getConfigOptions(); - Ogre::Root::getSingleton().getRenderSystemByName(renderer.toStdString())->getConfigOptions(); + Ogre::RenderSystem *rend = Ogre::Root::getSingleton().getRenderSystem(); + if(!rend) + return result; + + Ogre::ConfigOptionMap& renderOpt = rend->getConfigOptions(); Ogre::ConfigOptionMap::iterator it = renderOpt.begin(); uint row = 0; @@ -400,19 +425,11 @@ QStringList CSMSettings::UserSettings::getShaderLanguageByRenderer(const QString QStringList result; if(renderer == "Direct3D9 Rendering Subsystem") - { - result.append("CG"); result.append("HLSL"); - result.append("None"); - } else if(renderer == "OpenGL Rendering Subsystem") - { result.append("GLSL"); + else if(renderer.contains(QRegExp("^OpenGL ES", Qt::CaseInsensitive))) result.append("GLSLES"); - result.append("None"); - } - else - result.append("None"); return result; } diff --git a/apps/opencs/model/settings/usersettings.hpp b/apps/opencs/model/settings/usersettings.hpp index b45fa3d83..c957cd5b6 100644 --- a/apps/opencs/model/settings/usersettings.hpp +++ b/apps/opencs/model/settings/usersettings.hpp @@ -78,6 +78,7 @@ namespace CSMSettings { QStringList getShaderLanguageByRenderer(const QString &renderer); QStringList getOgreOptions(const QString &key, const QString &renderer); + QStringList getOgreRenderers(); private: diff --git a/apps/opencs/view/settings/settingsdialog.cpp b/apps/opencs/view/settings/settingsdialog.cpp index 8cd811e11..bd39056c2 100644 --- a/apps/opencs/view/settings/settingsdialog.cpp +++ b/apps/opencs/view/settings/settingsdialog.cpp @@ -93,7 +93,7 @@ QStringList getAvailableResolutions() return result; // FIXME: add error message } // Store Available Rendering Devices - std::vector::iterator iter = it->second.possibleValues.begin(); + Ogre::StringVector::iterator iter = it->second.possibleValues.begin(); for(;iter != it->second.possibleValues.end(); ++iter) { std::cout << "rd: " << *iter << std::endl; // FIXME: debug @@ -108,7 +108,7 @@ QStringList getAvailableResolutions() // FIXME: how to default to the current value? std::cout << "vm current: " << it->second.currentValue << std::endl; // FIXME: debug // Store Available Resolutions - std::vector::iterator iter = it->second.possibleValues.begin(); + Ogre::StringVector::iterator iter = it->second.possibleValues.begin(); for(; iter != it->second.possibleValues.end(); ++iter) { // extract x and y values @@ -202,7 +202,7 @@ void CSVSettings::SettingsDialog::slotRendererChanged(const QString &renderer) cmbRenderSys->setEnabled(false); labAntiAlias->setEnabled(false); cmbAntiAlias->setEnabled(false); - cbVsync->setEnabled(false); + //cbVsync->setEnabled(false); labShaderLang->setEnabled(false); cmbShaderLang->setEnabled(false); } @@ -218,7 +218,7 @@ void CSVSettings::SettingsDialog::slotOverrideToggled(bool checked) cmbRenderSys->setEnabled(false); labAntiAlias->setEnabled(false); cmbAntiAlias->setEnabled(false); - cbVsync->setEnabled(false); + //cbVsync->setEnabled(false); labShaderLang->setEnabled(false); cmbShaderLang->setEnabled(false); } @@ -228,7 +228,7 @@ void CSVSettings::SettingsDialog::slotOverrideToggled(bool checked) cmbRenderSys->setEnabled(true); labAntiAlias->setEnabled(true); cmbAntiAlias->setEnabled(true); - cbVsync->setEnabled(true); + //cbVsync->setEnabled(true); labShaderLang->setEnabled(true); cmbShaderLang->setEnabled(true); } @@ -257,8 +257,10 @@ void CSVSettings::SettingsDialog::setViewValues() // initialised in the constructor slotOverrideToggled(cbOverride->isChecked()); - // Ogre initialised earlier - slotRendererChanged(Ogre::Root::getSingleton().getRenderSystem()->getName().c_str()); + // Ogre renderer + cmbRenderSys->clear(); + cmbRenderSys->addItems(mModel->getOgreRenderers()); + //slotRendererChanged(Ogre::Root::getSingleton().getRenderSystem()->getName().c_str()); // antialiasing QString antialiasing = mModel->settingValue("Video/antialiasing"); @@ -267,10 +269,12 @@ void CSVSettings::SettingsDialog::setViewValues() cmbAntiAlias->setCurrentIndex(index); // vsync - cbVsync->setChecked(mModel->settingValue("Video/vsync") == "true"); + //cbVsync->setChecked(mModel->settingValue("Video/vsync") == "true"); + cbVsync->setChecked(false); // disable vsync option for now + cbVsync->setEnabled(false); // disable vsync option for now // shader lang - QString shaderlang = mModel->settingValue("Shader/language"); + QString shaderlang = mModel->settingValue("General/shader mode"); index = cmbShaderLang->findData(shaderlang, Qt::DisplayRole); if(index != -1) cmbShaderLang->setCurrentIndex(index); @@ -366,7 +370,7 @@ void CSVSettings::SettingsDialog::saveSettings() // shader lang mModel->setDefinitions("Shader/language", - QStringList(cmbShaderLang->currentText())); + QStringList(cmbShaderLang->currentText().toLower())); // window size if(rbStdWinSize->isChecked()) diff --git a/files/ui/settingstab.ui b/files/ui/settingstab.ui index ab559d9e7..c818e3c7d 100644 --- a/files/ui/settingstab.ui +++ b/files/ui/settingstab.ui @@ -52,16 +52,6 @@ false - - - OpenGL Rendering Subsystem - - - - - Direct3D9 Rendering Subsystem - -