diff --git a/apps/openmw/mwgui/settingswindow.cpp b/apps/openmw/mwgui/settingswindow.cpp
index 3ab2a6ce3..667dc0c28 100644
--- a/apps/openmw/mwgui/settingswindow.cpp
+++ b/apps/openmw/mwgui/settingswindow.cpp
@@ -177,10 +177,10 @@ namespace MWGui
getWidget(mShadowsTextureSize, "ShadowsTextureSize");
getWidget(mControlsBox, "ControlsBox");
getWidget(mResetControlsButton, "ResetControlsButton");
- getWidget(mRefractionButton, "RefractionButton");
getWidget(mDifficultySlider, "DifficultySlider");
getWidget(mKeyboardSwitch, "KeyboardButton");
getWidget(mControllerSwitch, "ControllerButton");
+ getWidget(mWaterTextureSize, "WaterTextureSize");
#ifndef WIN32
// hide gamma controls since it currently does not work under Linux
@@ -204,6 +204,8 @@ namespace MWGui
mFPSButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onFpsToggled);
mResolutionList->eventListChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onResolutionSelected);
+ mWaterTextureSize->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onWaterTextureSizeChanged);
+
mShadowsTextureSize->eventComboChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onShadowTextureSizeChanged);
mKeyboardSwitch->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onKeyboardSwitchClicked);
@@ -239,11 +241,18 @@ namespace MWGui
mTextureFilteringButton->setCaption(textureFilteringToStr(tf));
mAnisotropyLabel->setCaption("Anisotropy (" + MyGUI::utility::toString(Settings::Manager::getInt("anisotropy", "General")) + ")");
+ int waterTextureSize = Settings::Manager::getInt ("rtt size", "Water");
+ if (waterTextureSize >= 512)
+ mWaterTextureSize->setIndexSelected(0);
+ if (waterTextureSize >= 1024)
+ mWaterTextureSize->setIndexSelected(1);
+ if (waterTextureSize >= 2048)
+ mWaterTextureSize->setIndexSelected(2);
+
mShadowsTextureSize->setCaption (Settings::Manager::getString ("texture size", "Shadows"));
if (!Settings::Manager::getBool("shaders", "Objects"))
{
- mRefractionButton->setEnabled(false);
mShadowsEnabledButton->setEnabled(false);
}
@@ -324,6 +333,19 @@ namespace MWGui
}
}
+ void SettingsWindow::onWaterTextureSizeChanged(MyGUI::ComboBox* _sender, size_t pos)
+ {
+ int size = 0;
+ if (pos == 0)
+ size = 512;
+ else if (pos == 1)
+ size = 1024;
+ else if (pos == 2)
+ size = 2048;
+ Settings::Manager::setInt("rtt size", "Water", size);
+ apply();
+ }
+
void SettingsWindow::onShadowTextureSizeChanged(MyGUI::ComboBox *_sender, size_t pos)
{
Settings::Manager::setString("texture size", "Shadows", _sender->getItemNameAt(pos));
@@ -350,12 +372,6 @@ namespace MWGui
{
if (newState == false)
{
- // refraction needs shaders to display underwater fog
- mRefractionButton->setCaptionWithReplacing("#{sOff}");
- mRefractionButton->setEnabled(false);
-
- Settings::Manager::setBool("refraction", "Water", false);
-
// shadows not supported
mShadowsEnabledButton->setEnabled(false);
mShadowsEnabledButton->setCaptionWithReplacing("#{sOff}");
@@ -363,9 +379,6 @@ namespace MWGui
}
else
{
- // re-enable
- mRefractionButton->setEnabled(true);
-
mShadowsEnabledButton->setEnabled(true);
}
}
diff --git a/apps/openmw/mwgui/settingswindow.hpp b/apps/openmw/mwgui/settingswindow.hpp
index 79487c54b..0369eb40e 100644
--- a/apps/openmw/mwgui/settingswindow.hpp
+++ b/apps/openmw/mwgui/settingswindow.hpp
@@ -38,7 +38,8 @@ namespace MWGui
MyGUI::TextBox* mAnisotropyLabel;
MyGUI::Widget* mAnisotropyBox;
MyGUI::Button* mShadersButton;
- MyGUI::Button* mRefractionButton;
+
+ MyGUI::ComboBox* mWaterTextureSize;
MyGUI::Button* mShadowsEnabledButton;
MyGUI::ComboBox* mShadowsTextureSize;
@@ -61,6 +62,8 @@ namespace MWGui
void onResolutionCancel();
void highlightCurrentResolution();
+ void onWaterTextureSizeChanged(MyGUI::ComboBox* _sender, size_t pos);
+
void onShadowTextureSizeChanged(MyGUI::ComboBox* _sender, size_t pos);
void onRebindAction(MyGUI::Widget* _sender);
diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp
index 4b936ba30..8ab29c3a7 100644
--- a/apps/openmw/mwrender/water.cpp
+++ b/apps/openmw/mwrender/water.cpp
@@ -444,7 +444,6 @@ Water::Water(osg::Group *parent, osg::Group* sceneRoot, Resource::ResourceSystem
void Water::updateWaterMaterial()
{
- // TODO: add ingame setting for texture quality
if (mReflection)
{
mParent->removeChild(mReflection);
@@ -543,6 +542,7 @@ void Water::createShaderWaterStateSet(osg::Node* node, Reflection* reflection, R
shaderStateset->setTextureAttributeAndModes(3, refraction->getRefractionDepthTexture(), osg::StateAttribute::ON);
shaderStateset->addUniform(new osg::Uniform("refractionMap", 2));
shaderStateset->addUniform(new osg::Uniform("refractionDepthMap", 3));
+ // FIXME: zfighting with ripples
shaderStateset->setRenderBinDetails(MWRender::RenderBin_Default, "RenderBin");
}
else
diff --git a/files/mygui/openmw_settings_window.layout b/files/mygui/openmw_settings_window.layout
index 4b2e1cc27..e76c3a7db 100644
--- a/files/mygui/openmw_settings_window.layout
+++ b/files/mygui/openmw_settings_window.layout
@@ -365,21 +365,32 @@
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+