From 85c7d014d32df3c0d8a291854c4a6b7362e5643d Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 28 Sep 2016 21:10:44 +0200 Subject: [PATCH] Use a shader to render the simple water, ensuring that fog is applied per pixel (Fixes #2716) --- apps/openmw/mwrender/water.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index f6b7a0d867..d58a472485 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -23,6 +23,7 @@ #include #include +#include #include @@ -507,6 +508,14 @@ void Water::createSimpleWaterStateSet(osg::Node* node, float alpha) node->setUpdateCallback(controller); stateset->setTextureAttributeAndModes(0, textures[0], osg::StateAttribute::ON); + + // use a shader to render the simple water, ensuring that fog is applied per pixel as required. + // this could be removed if a more detailed water mesh, using some sort of paging solution, is implemented. + Resource::SceneManager* sceneManager = mResourceSystem->getSceneManager(); + bool oldValue = sceneManager->getForceShaders(); + sceneManager->setForceShaders(true); + sceneManager->recreateShaders(node); + sceneManager->setForceShaders(oldValue); } void Water::createShaderWaterStateSet(osg::Node* node, Reflection* reflection, Refraction* refraction)