Fixed compilation issue on linux. Updated shader mode selection logic (thanks scrawl). Cleaned up a little but needs more once things are settled.

This commit is contained in:
cc9cii 2014-09-18 22:17:37 +10:00
parent 575780ec0d
commit 52354b14fc
5 changed files with 53 additions and 43 deletions

View file

@ -299,14 +299,12 @@ std::auto_ptr<sh::Factory> CS::Editor::setupGraphics()
std::auto_ptr<sh::Factory> 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);

View file

@ -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;
}

View file

@ -78,6 +78,7 @@ namespace CSMSettings {
QStringList getShaderLanguageByRenderer(const QString &renderer);
QStringList getOgreOptions(const QString &key, const QString &renderer);
QStringList getOgreRenderers();
private:

View file

@ -93,7 +93,7 @@ QStringList getAvailableResolutions()
return result; // FIXME: add error message
}
// Store Available Rendering Devices
std::vector<std::string>::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<std::string>::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())

View file

@ -52,16 +52,6 @@
<property name="editable">
<bool>false</bool>
</property>
<item>
<property name="text">
<string>OpenGL Rendering Subsystem</string>
</property>
</item>
<item>
<property name="text">
<string>Direct3D9 Rendering Subsystem</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">