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