diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg
index c95b791f5c..341d11aea7 100644
--- a/binaries/data/config/default.cfg
+++ b/binaries/data/config/default.cfg
@@ -42,7 +42,6 @@ bpp = 0
; System settings:
waternormals = true
-waterbinormals = true
waterrealdepth = true
waterfoam = false
watercoastalwaves = false
diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml
index 7dab4454ed..2bc65d02fd 100644
--- a/binaries/data/mods/public/gui/session/session.xml
+++ b/binaries/data/mods/public/gui/session/session.xml
@@ -300,7 +300,7 @@
- Water - 3D Waviness
+ Water - HQ Waviness
if (renderer.waternormal) this.checked = true; else this.checked = false;
renderer.waternormal = this.checked;
-
- Water - HQ Waviness
-
- if (renderer.waterbinormal) this.checked = true; else this.checked = false;
- renderer.waterbinormal = this.checked;
-
-
- Water - Use Actual Depth
-
+ Water - Use Actual Depth
+
if (renderer.waterrealdepth) this.checked = true; else this.checked = false;
renderer.waterrealdepth = this.checked;
- Water - Enable Reflections
-
+ Water - Enable Reflections
+
if (renderer.waterreflection) this.checked = true; else this.checked = false;
renderer.waterreflection = this.checked;
- Water - Enable Refraction
-
+ Water - Enable Refraction
+
if (renderer.waterrefraction) this.checked = true; else this.checked = false;
renderer.waterrefraction = this.checked;
- Water - Enable Shore Foam
-
+ Water - Enable Shore Foam
+
if (renderer.waterfoam) this.checked = true; else this.checked = false;
renderer.waterfoam = this.checked;
- Water - Enable Shore Waves
-
+ Water - Enable Shore Waves
+
if (renderer.watercoastalwaves) this.checked = true; else this.checked = false;
renderer.watercoastalwaves = this.checked;
- Water - Use Surface Shadows
-
+ Water - Use Surface Shadows
+
if (renderer.watershadow) this.checked = true; else this.checked = false;
renderer.watershadow = this.checked;
- Enable Particles
-
+ Enable Particles
+
if (renderer.particles) this.checked = true; else this.checked = false;
renderer.particles = this.checked;
- Enable Unit Silhouettes
-
+ Enable Unit Silhouettes
+
if (renderer.silhouettes) this.checked = true; else this.checked = false;
renderer.silhouettes = this.checked;
- Enable Music
-
+ Enable Music
+
if (this.checked) global.music.start(); else global.music.stop();
- Developer Overlay
-
+ Developer Overlay
+
toggleDeveloperOverlay();
diff --git a/binaries/data/mods/public/shaders/glsl/water_high.fs b/binaries/data/mods/public/shaders/glsl/water_high.fs
index dd5f1399d5..fca07161cd 100644
--- a/binaries/data/mods/public/shaders/glsl/water_high.fs
+++ b/binaries/data/mods/public/shaders/glsl/water_high.fs
@@ -24,10 +24,8 @@ varying vec3 worldPos;
varying float waterDepth;
uniform sampler2D normalMap;
+uniform sampler2D normalMap2;
-#if USE_BINORMALS
- uniform sampler2D normalMap2;
-#endif
#if USE_REFLECTION
uniform sampler2D reflectionMap;
#endif
@@ -118,10 +116,8 @@ void main()
vec3 ww = texture2D(normalMap, (gl_TexCoord[0].st) * mix(2.0,0.8,waviness/10.0) +gl_TexCoord[0].zw).xzy;
#if USE_NORMALS
- #if USE_BINORMALS
- vec3 ww2 = texture2D(normalMap2, (gl_TexCoord[0].st) * mix(2.0,0.8,waviness/10.0) +gl_TexCoord[0].zw).xzy;
- ww = mix(ww, ww2, mod(time * 60.0, 8.0) / 8.0);
- #endif
+ vec3 ww2 = texture2D(normalMap2, (gl_TexCoord[0].st) * mix(2.0,0.8,waviness/10.0) +gl_TexCoord[0].zw).xzy;
+ ww = mix(ww, ww2, mod(time * 60.0, 8.0) / 8.0);
#if USE_WAVES
vec3 waves = texture2D(waveTex, gl_FragCoord.xy/screenSize).rbg - vec3(0.5,0.5,0.5);
diff --git a/source/ps/GameSetup/Config.cpp b/source/ps/GameSetup/Config.cpp
index dddde93dd1..b510daef0e 100644
--- a/source/ps/GameSetup/Config.cpp
+++ b/source/ps/GameSetup/Config.cpp
@@ -40,7 +40,6 @@ bool g_Shadows = false;
bool g_ShadowPCF = false;
bool g_WaterNormal = false;
-bool g_WaterBinormal = false;
bool g_WaterRealDepth = false;
bool g_WaterFoam = false;
bool g_WaterCoastalWaves = false;
@@ -91,9 +90,6 @@ static void LoadGlobals()
CFG_GET_USER_VAL("shadowpcf", Bool, g_ShadowPCF);
CFG_GET_USER_VAL("waternormals",Bool, g_WaterNormal);
- CFG_GET_USER_VAL("waterbinormals",Bool, g_WaterBinormal);
- if (g_WaterBinormal && !g_WaterNormal)
- g_WaterBinormal = false;
CFG_GET_USER_VAL("waterrealdepth",Bool, g_WaterRealDepth);
CFG_GET_USER_VAL("waterfoam",Bool, g_WaterFoam);
CFG_GET_USER_VAL("watercoastalwaves",Bool, g_WaterCoastalWaves);
diff --git a/source/ps/GameSetup/Config.h b/source/ps/GameSetup/Config.h
index 9a07835aa3..487d7016c9 100644
--- a/source/ps/GameSetup/Config.h
+++ b/source/ps/GameSetup/Config.h
@@ -52,8 +52,6 @@ extern bool g_Shadows;
// Use real normals for ocean-wave rendering, instead of applying them as a flat texture.
extern bool g_WaterNormal;
-// Use interpolated normals, smoother. Requires g_WaterNormal.
-extern bool g_WaterBinormal;
// Use real depth for water rendering.
extern bool g_WaterRealDepth;
// Show foam near the shores depending on waviness.
diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp
index dd25a8a9c5..f803a6d4db 100644
--- a/source/ps/GameSetup/GameSetup.cpp
+++ b/source/ps/GameSetup/GameSetup.cpp
@@ -576,7 +576,6 @@ static void InitRenderer()
g_Renderer.SetOptionBool(CRenderer::OPT_SHADOWS, g_Shadows);
g_Renderer.SetOptionBool(CRenderer::OPT_WATERNORMAL, g_WaterNormal);
- g_Renderer.SetOptionBool(CRenderer::OPT_WATERBINORMAL, g_WaterBinormal);
g_Renderer.SetOptionBool(CRenderer::OPT_WATERREALDEPTH, g_WaterRealDepth);
g_Renderer.SetOptionBool(CRenderer::OPT_WATERFOAM, g_WaterFoam);
g_Renderer.SetOptionBool(CRenderer::OPT_WATERCOASTALWAVES, g_WaterCoastalWaves);
diff --git a/source/ps/GameSetup/HWDetect.cpp b/source/ps/GameSetup/HWDetect.cpp
index fadbff70bd..f479ba9101 100644
--- a/source/ps/GameSetup/HWDetect.cpp
+++ b/source/ps/GameSetup/HWDetect.cpp
@@ -124,13 +124,7 @@ void SetDisableShadowPCF(void* UNUSED(cbdata), bool disabled)
void SetDisableFancyWater(void* UNUSED(cbdata), bool disabled)
{
if (!IsOverridden("waternormals"))
- {
g_WaterNormal = !disabled;
- if (!g_WaterNormal)
- g_WaterBinormal = false;
- }
- if (!IsOverridden("waterbinormals"))
- g_WaterBinormal = !disabled;
if (!IsOverridden("waterrealdepth"))
g_WaterRealDepth = !disabled;
if (!IsOverridden("waterfoam"))
diff --git a/source/renderer/Renderer.cpp b/source/renderer/Renderer.cpp
index 7d985614a4..cfc3d37cec 100644
--- a/source/renderer/Renderer.cpp
+++ b/source/renderer/Renderer.cpp
@@ -469,7 +469,6 @@ CRenderer::CRenderer()
AddLocalProperty(L"particles", &m_Options.m_Particles, false);
AddLocalProperty(L"waternormal", &m_Options.m_WaterNormal, false);
- AddLocalProperty(L"waterbinormal", &m_Options.m_WaterBinormal, false);
AddLocalProperty(L"waterrealdepth", &m_Options.m_WaterRealDepth, false);
AddLocalProperty(L"waterreflection", &m_Options.m_WaterReflection, false);
AddLocalProperty(L"waterrefraction", &m_Options.m_WaterRefraction, false);
@@ -691,9 +690,6 @@ void CRenderer::SetOptionBool(enum Option opt,bool value)
case OPT_WATERNORMAL:
m_Options.m_WaterNormal = value;
break;
- case OPT_WATERBINORMAL:
- m_Options.m_WaterBinormal = value;
- break;
case OPT_WATERREALDEPTH:
m_Options.m_WaterRealDepth = value;
break;
@@ -742,8 +738,6 @@ bool CRenderer::GetOptionBool(enum Option opt) const
return m_Options.m_Shadows;
case OPT_WATERNORMAL:
return m_Options.m_WaterNormal;
- case OPT_WATERBINORMAL:
- return m_Options.m_WaterBinormal;
case OPT_WATERREALDEPTH:
return m_Options.m_WaterRealDepth;
case OPT_WATERFOAM:
@@ -1487,10 +1481,27 @@ void CRenderer::RenderSubmissions()
PROFILE3_GPU("water scissor");
SScreenRect dirty;
- dirty.x1 = std::min(reflectionScissor.x1, refractionScissor.x1);
- dirty.y1 = std::min(reflectionScissor.y1, refractionScissor.y1);
- dirty.x2 = std::max(reflectionScissor.x2, refractionScissor.x2);
- dirty.y2 = std::max(reflectionScissor.y2, refractionScissor.y2);
+ if (m_Options.m_WaterRefraction && m_Options.m_WaterReflection)
+ {
+ dirty.x1 = reflectionScissor.x1;
+ dirty.y1 = reflectionScissor.y1;
+ dirty.x2 = reflectionScissor.x2;
+ dirty.y2 = reflectionScissor.y2;
+ }
+ else if (m_Options.m_WaterRefraction)
+ {
+ dirty.x1 = refractionScissor.x1;
+ dirty.y1 = refractionScissor.y1;
+ dirty.x2 = refractionScissor.x2;
+ dirty.y2 = refractionScissor.y2;
+ }
+ else
+ {
+ dirty.x1 = reflectionScissor.x1;
+ dirty.y1 = reflectionScissor.y1;
+ dirty.x2 = reflectionScissor.x2;
+ dirty.y2 = reflectionScissor.y2;
+ }
if (dirty.x1 < dirty.x2 && dirty.y1 < dirty.y2)
{
glEnable(GL_SCISSOR_TEST);
diff --git a/source/renderer/Renderer.h b/source/renderer/Renderer.h
index 3a05447c83..3e0b5b97fb 100644
--- a/source/renderer/Renderer.h
+++ b/source/renderer/Renderer.h
@@ -81,7 +81,6 @@ public:
OPT_NOVBO,
OPT_SHADOWS,
OPT_WATERNORMAL,
- OPT_WATERBINORMAL,
OPT_WATERREALDEPTH,
OPT_WATERFOAM,
OPT_WATERCOASTALWAVES,
@@ -132,7 +131,6 @@ public:
bool m_Shadows;
bool m_WaterNormal;
- bool m_WaterBinormal;
bool m_WaterRealDepth;
bool m_WaterFoam;
bool m_WaterCoastalWaves;
diff --git a/source/renderer/TerrainRenderer.cpp b/source/renderer/TerrainRenderer.cpp
index 0cf7db4516..1a1dd22453 100644
--- a/source/renderer/TerrainRenderer.cpp
+++ b/source/renderer/TerrainRenderer.cpp
@@ -659,8 +659,6 @@ bool TerrainRenderer::RenderFancyWater(const CShaderDefines& context, ShadowMap*
{
if(WaterMgr->m_WaterNormal)
defines.Add("USE_NORMALS","1");
- if(WaterMgr->m_WaterBinormal)
- defines.Add("USE_BINORMALS","1");
if(WaterMgr->m_WaterRealDepth)
defines.Add("USE_REAL_DEPTH","1");
if(WaterMgr->m_WaterFoam)
@@ -823,8 +821,8 @@ bool TerrainRenderer::RenderFancyWater(const CShaderDefines& context, ShadowMap*
CVector3D camPos = camera.m_Orientation.GetTranslation();
m->fancyWaterShader->BindTexture("normalMap", WaterMgr->m_NormalMap[curTex]);
- if (WaterMgr->m_WaterBinormal)
- m->fancyWaterShader->BindTexture("normalMap2", WaterMgr->m_NormalMap[nexTex]);
+ m->fancyWaterShader->BindTexture("normalMap2", WaterMgr->m_NormalMap[nexTex]);
+
if (WaterMgr->m_WaterFoam || WaterMgr->m_WaterCoastalWaves)
{
m->fancyWaterShader->BindTexture("Foam", WaterMgr->m_Foam);
diff --git a/source/renderer/WaterManager.cpp b/source/renderer/WaterManager.cpp
index ce729e704e..d6db698aef 100644
--- a/source/renderer/WaterManager.cpp
+++ b/source/renderer/WaterManager.cpp
@@ -79,7 +79,6 @@ WaterManager::WaterManager()
m_OtherInfoTex = NULL;
m_WaterNormal = false;
- m_WaterBinormal = false;
m_WaterRealDepth = false;
m_WaterFoam = false;
m_WaterCoastalWaves = false;
@@ -462,7 +461,7 @@ void WaterManager::CreateSuperfancyInfo()
// okaaaaaay. Got a square. Check for proximity.
for (unsigned long i = 0; i < waveSquares.size(); i++)
{
- if ( CVector2D(waveSquares[i]-squarePos).LengthSquared() < 100) {
+ if ( CVector2D(waveSquares[i]-squarePos).LengthSquared() < 80) {
enter = 0;
break;
}
@@ -551,10 +550,6 @@ void WaterManager::updateQuality()
m_WaterNormal = g_Renderer.GetOptionBool(CRenderer::OPT_WATERNORMAL);
m_NeedsReloading = true;
}
- if (g_Renderer.GetOptionBool(CRenderer::OPT_WATERBINORMAL) != m_WaterBinormal) {
- m_WaterBinormal = g_Renderer.GetOptionBool(CRenderer::OPT_WATERBINORMAL);
- m_NeedsReloading = true;
- }
if (g_Renderer.GetOptionBool(CRenderer::OPT_WATERREALDEPTH) != m_WaterRealDepth) {
m_WaterRealDepth = g_Renderer.GetOptionBool(CRenderer::OPT_WATERREALDEPTH);
m_NeedsReloading = true;
@@ -587,8 +582,6 @@ bool WaterManager::WillRenderFancyWater()
{
if (!g_Renderer.GetCapabilities().m_FragmentShader)
return false;
- if (g_Renderer.GetRenderPath() == 1)
- return false;
if (!m_RenderWater)
return false;
return true;
diff --git a/source/renderer/WaterManager.h b/source/renderer/WaterManager.h
index 0a30728d91..64f7d5e6a5 100644
--- a/source/renderer/WaterManager.h
+++ b/source/renderer/WaterManager.h
@@ -68,7 +68,6 @@ public:
// Those variables register the current quality level. If there is a change, I have to recompile the shader.
bool m_WaterNormal;
- bool m_WaterBinormal;
bool m_WaterRealDepth;
bool m_WaterFoam;
bool m_WaterCoastalWaves;
diff --git a/source/simulation2/components/CCmpWaterManager.cpp b/source/simulation2/components/CCmpWaterManager.cpp
index 2e588afeb6..6fe8c14534 100644
--- a/source/simulation2/components/CCmpWaterManager.cpp
+++ b/source/simulation2/components/CCmpWaterManager.cpp
@@ -33,6 +33,7 @@ public:
{
componentManager.SubscribeToMessageType(MT_Interpolate);
componentManager.SubscribeToMessageType(MT_RenderSubmit);
+ componentManager.SubscribeToMessageType(MT_TerrainChanged);
}
DEFAULT_COMPONENT_ALLOCATOR(WaterManager)
@@ -85,6 +86,17 @@ public:
g_Renderer.GetWaterManager()->m_WaterHeight = m_WaterHeight.ToFloat();
break;
}
+ case MT_TerrainChanged:
+ {
+ // Tell the renderer to redraw the map.
+ if (CRenderer::IsInitialised())
+ {
+ g_Renderer.GetWaterManager()->m_NeedsFullReloading = true;
+ g_Renderer.GetWaterManager()->m_NeedsReloading = true;
+ g_Renderer.GetWaterManager()->m_TerrainChangeThisTurn = true;
+ }
+ break;
+ }
}
}