Index: source/renderer/Renderer.cpp =================================================================== --- source/renderer/Renderer.cpp +++ source/renderer/Renderer.cpp @@ -644,6 +644,7 @@ m->postprocManager.Resize(); m_WaterManager->Resize(); + m->terrainRenderer.Resize(); } ////////////////////////////////////////////////////////////////////////////////////////// Index: source/renderer/TerrainRenderer.h =================================================================== --- source/renderer/TerrainRenderer.h +++ source/renderer/TerrainRenderer.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2012 Wildfire Games. +/* Copyright (C) 2019 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -144,6 +144,11 @@ */ void RenderTerrainOverlayTexture(int cullGroup, CMatrix3D& textureMatrix); + /** + * Remebers that screen width, height changed and needs to send new data + * to shader in next draw call + */ + void Resize(); private: TerrainRendererInternals* m; Index: source/renderer/TerrainRenderer.cpp =================================================================== --- source/renderer/TerrainRenderer.cpp +++ source/renderer/TerrainRenderer.cpp @@ -88,6 +88,8 @@ CShaderProgramPtr fancyWaterShader; CSimulation2* simulation; + + bool resized; }; @@ -572,6 +574,11 @@ #endif } +// Remember that screen changed size +void TerrainRenderer::Resize() +{ + m->resized = true; +} /////////////////////////////////////////////////////////////////// // Scissor rectangle of water patches @@ -662,6 +669,7 @@ return false; } WaterMgr->m_NeedsReloading = false; + m->resized = true; } CLOSTexture& losTexture = g_Renderer.GetScene().GetLOSTexture(); @@ -780,6 +788,10 @@ if (WaterMgr->m_WaterReflection) m->fancyWaterShader->Uniform(str_reflectionMatrix, WaterMgr->m_ReflectionMatrix); } + + if (m->resized) + m->fancyWaterShader->Uniform(str_screenSize, (float)g_Renderer.GetWidth(), (float)g_Renderer.GetHeight(), 0.0f, 0.0f); + m->fancyWaterShader->Uniform(str_sunDir, lightEnv.GetSunDir()); m->fancyWaterShader->Uniform(str_sunColor, lightEnv.m_SunColor); m->fancyWaterShader->Uniform(str_color, WaterMgr->m_WaterColor); @@ -793,7 +805,6 @@ m->fancyWaterShader->Uniform(str_fogColor, lightEnv.m_FogColor); m->fancyWaterShader->Uniform(str_fogParams, lightEnv.m_FogFactor, lightEnv.m_FogMax, 0.f, 0.f); m->fancyWaterShader->Uniform(str_time, (float)time); - m->fancyWaterShader->Uniform(str_screenSize, (float)g_Renderer.GetWidth(), (float)g_Renderer.GetHeight(), 0.0f, 0.0f); if (WaterMgr->m_WaterType == L"clap") { @@ -831,6 +842,7 @@ glDepthFunc(GL_LEQUAL); glDisable(GL_BLEND); + m->resized = false; return true; }