forked from teamnwah/openmw-tes3coop
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:
parent
575780ec0d
commit
52354b14fc
5 changed files with 53 additions and 43 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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:
|
||||||
|
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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">
|
||||||
|
|
Loading…
Reference in a new issue