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::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; enum sh::Language lang;
if(shLang == "CG") lang = sh::Language_CG; if(shLang == "glsl") lang = sh::Language_GLSL;
else if(shLang == "HLSL") lang = sh::Language_HLSL; else if(shLang == "glsles") lang = sh::Language_GLSLES;
else if(shLang == "GLSL") lang = sh::Language_GLSL; else if(shLang == "hlsl") lang = sh::Language_HLSL;
else if(shLang == "GLSLES") lang = sh::Language_GLSLES; else lang = sh::Language_CG;
else if(shLang == "Count") lang = sh::Language_Count;
else lang = sh::Language_None;
factory->setCurrentLanguage (lang); factory->setCurrentLanguage (lang);
factory->setWriteSourceCache (true); factory->setWriteSourceCache (true);

View file

@ -347,24 +347,49 @@ void CSMSettings::UserSettings::loadSettings (const QString &fileName)
#endif #endif
} }
mSettingCfgDefinitions->setValue("Video/render system", renderSystem.c_str()); 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 // force shader language based on render system
if(renderSystem == "Direct3D9 Rendering Subsystem") if(currShader == ""
mSettingDefinitions->setValue("Shader/language", "CG"); || (openGL && currShader == "hlsl")
else || (!openGL && currShader == "glsl")
mSettingDefinitions->setValue("Shader/language", "GLSL"); || (glES && currShader != "glsles"))
{
QString shader = openGL ? (glES ? "glsles" : "glsl") : "hlsl";
mSettingDefinitions->setValue("General/shader mode", shader);
}
// check if override entry exists (default: override) // check if override entry exists (default: override)
if(!mSettingDefinitions->childGroups().contains("Video", Qt::CaseInsensitive)) if(!mSettingDefinitions->childGroups().contains("Video", Qt::CaseInsensitive))
mSettingDefinitions->setValue("Video/use settings.cfg", "true"); 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 CSMSettings::UserSettings::getOgreOptions(const QString &key, const QString &renderer)
{ {
QStringList result; QStringList result;
Ogre::ConfigOptionMap& renderOpt = Ogre::RenderSystem *rend = Ogre::Root::getSingleton().getRenderSystem();
//Ogre::Root::getSingleton().getRenderSystem()->getConfigOptions(); if(!rend)
Ogre::Root::getSingleton().getRenderSystemByName(renderer.toStdString())->getConfigOptions(); return result;
Ogre::ConfigOptionMap& renderOpt = rend->getConfigOptions();
Ogre::ConfigOptionMap::iterator it = renderOpt.begin(); Ogre::ConfigOptionMap::iterator it = renderOpt.begin();
uint row = 0; uint row = 0;
@ -400,19 +425,11 @@ QStringList CSMSettings::UserSettings::getShaderLanguageByRenderer(const QString
QStringList result; QStringList result;
if(renderer == "Direct3D9 Rendering Subsystem") if(renderer == "Direct3D9 Rendering Subsystem")
{
result.append("CG");
result.append("HLSL"); result.append("HLSL");
result.append("None");
}
else if(renderer == "OpenGL Rendering Subsystem") else if(renderer == "OpenGL Rendering Subsystem")
{
result.append("GLSL"); result.append("GLSL");
else if(renderer.contains(QRegExp("^OpenGL ES", Qt::CaseInsensitive)))
result.append("GLSLES"); result.append("GLSLES");
result.append("None");
}
else
result.append("None");
return result; return result;
} }

View file

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

View file

@ -93,7 +93,7 @@ QStringList getAvailableResolutions()
return result; // FIXME: add error message return result; // FIXME: add error message
} }
// Store Available Rendering Devices // 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) for(;iter != it->second.possibleValues.end(); ++iter)
{ {
std::cout << "rd: " << *iter << std::endl; // FIXME: debug std::cout << "rd: " << *iter << std::endl; // FIXME: debug
@ -108,7 +108,7 @@ QStringList getAvailableResolutions()
// FIXME: how to default to the current value? // FIXME: how to default to the current value?
std::cout << "vm current: " << it->second.currentValue << std::endl; // FIXME: debug std::cout << "vm current: " << it->second.currentValue << std::endl; // FIXME: debug
// Store Available Resolutions // 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) for(; iter != it->second.possibleValues.end(); ++iter)
{ {
// extract x and y values // extract x and y values
@ -202,7 +202,7 @@ void CSVSettings::SettingsDialog::slotRendererChanged(const QString &renderer)
cmbRenderSys->setEnabled(false); cmbRenderSys->setEnabled(false);
labAntiAlias->setEnabled(false); labAntiAlias->setEnabled(false);
cmbAntiAlias->setEnabled(false); cmbAntiAlias->setEnabled(false);
cbVsync->setEnabled(false); //cbVsync->setEnabled(false);
labShaderLang->setEnabled(false); labShaderLang->setEnabled(false);
cmbShaderLang->setEnabled(false); cmbShaderLang->setEnabled(false);
} }
@ -218,7 +218,7 @@ void CSVSettings::SettingsDialog::slotOverrideToggled(bool checked)
cmbRenderSys->setEnabled(false); cmbRenderSys->setEnabled(false);
labAntiAlias->setEnabled(false); labAntiAlias->setEnabled(false);
cmbAntiAlias->setEnabled(false); cmbAntiAlias->setEnabled(false);
cbVsync->setEnabled(false); //cbVsync->setEnabled(false);
labShaderLang->setEnabled(false); labShaderLang->setEnabled(false);
cmbShaderLang->setEnabled(false); cmbShaderLang->setEnabled(false);
} }
@ -228,7 +228,7 @@ void CSVSettings::SettingsDialog::slotOverrideToggled(bool checked)
cmbRenderSys->setEnabled(true); cmbRenderSys->setEnabled(true);
labAntiAlias->setEnabled(true); labAntiAlias->setEnabled(true);
cmbAntiAlias->setEnabled(true); cmbAntiAlias->setEnabled(true);
cbVsync->setEnabled(true); //cbVsync->setEnabled(true);
labShaderLang->setEnabled(true); labShaderLang->setEnabled(true);
cmbShaderLang->setEnabled(true); cmbShaderLang->setEnabled(true);
} }
@ -257,8 +257,10 @@ void CSVSettings::SettingsDialog::setViewValues()
// initialised in the constructor // initialised in the constructor
slotOverrideToggled(cbOverride->isChecked()); slotOverrideToggled(cbOverride->isChecked());
// Ogre initialised earlier // Ogre renderer
slotRendererChanged(Ogre::Root::getSingleton().getRenderSystem()->getName().c_str()); cmbRenderSys->clear();
cmbRenderSys->addItems(mModel->getOgreRenderers());
//slotRendererChanged(Ogre::Root::getSingleton().getRenderSystem()->getName().c_str());
// antialiasing // antialiasing
QString antialiasing = mModel->settingValue("Video/antialiasing"); QString antialiasing = mModel->settingValue("Video/antialiasing");
@ -267,10 +269,12 @@ void CSVSettings::SettingsDialog::setViewValues()
cmbAntiAlias->setCurrentIndex(index); cmbAntiAlias->setCurrentIndex(index);
// vsync // 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 // shader lang
QString shaderlang = mModel->settingValue("Shader/language"); QString shaderlang = mModel->settingValue("General/shader mode");
index = cmbShaderLang->findData(shaderlang, Qt::DisplayRole); index = cmbShaderLang->findData(shaderlang, Qt::DisplayRole);
if(index != -1) if(index != -1)
cmbShaderLang->setCurrentIndex(index); cmbShaderLang->setCurrentIndex(index);
@ -366,7 +370,7 @@ void CSVSettings::SettingsDialog::saveSettings()
// shader lang // shader lang
mModel->setDefinitions("Shader/language", mModel->setDefinitions("Shader/language",
QStringList(cmbShaderLang->currentText())); QStringList(cmbShaderLang->currentText().toLower()));
// window size // window size
if(rbStdWinSize->isChecked()) if(rbStdWinSize->isChecked())

View file

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