summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCody Glassman <glassmancody.info@gmail.com>2022-01-19 11:32:38 +0000
committerpsi29a <psi29a@gmail.com>2022-01-19 11:32:38 +0000
commit9cafc31c0d8cafb1c75299b41535fe49fc5028a2 (patch)
treece6aaf9fb62a59440f13ed379418f53e6804c631
parent9d0e427ec17464f4aad79dec35fd2b933d5ecfd4 (diff)
Restore ripples with soft particles
-rw-r--r--apps/openmw/mwrender/ripplesimulation.cpp2
-rw-r--r--components/resource/scenemanager.cpp4
-rw-r--r--components/resource/scenemanager.hpp2
3 files changed, 5 insertions, 3 deletions
diff --git a/apps/openmw/mwrender/ripplesimulation.cpp b/apps/openmw/mwrender/ripplesimulation.cpp
index 282362ea56..1045594c20 100644
--- a/apps/openmw/mwrender/ripplesimulation.cpp
+++ b/apps/openmw/mwrender/ripplesimulation.cpp
@@ -109,7 +109,7 @@ RippleSimulation::RippleSimulation(osg::Group *parent, Resource::ResourceSystem*
createWaterRippleStateSet(resourceSystem, mParticleNode);
- resourceSystem->getSceneManager()->recreateShaders(mParticleNode);
+ resourceSystem->getSceneManager()->recreateShaders(mParticleNode, "objects", false, nullptr, true);
mParent->addChild(mParticleNode);
}
diff --git a/components/resource/scenemanager.cpp b/components/resource/scenemanager.cpp
index 41f65ba0ab..8ddc3fd102 100644
--- a/components/resource/scenemanager.cpp
+++ b/components/resource/scenemanager.cpp
@@ -340,13 +340,15 @@ namespace Resource
return mForceShaders;
}
- void SceneManager::recreateShaders(osg::ref_ptr<osg::Node> node, const std::string& shaderPrefix, bool forceShadersForNode, const osg::Program* programTemplate)
+ void SceneManager::recreateShaders(osg::ref_ptr<osg::Node> node, const std::string& shaderPrefix, bool forceShadersForNode, const osg::Program* programTemplate, bool disableSoftParticles)
{
osg::ref_ptr<Shader::ShaderVisitor> shaderVisitor(createShaderVisitor(shaderPrefix));
shaderVisitor->setAllowedToModifyStateSets(false);
shaderVisitor->setProgramTemplate(programTemplate);
if (forceShadersForNode)
shaderVisitor->setForceShaders(true);
+ if (disableSoftParticles)
+ shaderVisitor->setOpaqueDepthTex(nullptr);
node->accept(*shaderVisitor);
}
diff --git a/components/resource/scenemanager.hpp b/components/resource/scenemanager.hpp
index 58ae8fdb8b..b3a42bac45 100644
--- a/components/resource/scenemanager.hpp
+++ b/components/resource/scenemanager.hpp
@@ -77,7 +77,7 @@ namespace Resource
Shader::ShaderManager& getShaderManager();
/// Re-create shaders for this node, need to call this if alpha testing, texture stages or vertex color mode have changed.
- void recreateShaders(osg::ref_ptr<osg::Node> node, const std::string& shaderPrefix = "objects", bool forceShadersForNode = false, const osg::Program* programTemplate = nullptr);
+ void recreateShaders(osg::ref_ptr<osg::Node> node, const std::string& shaderPrefix = "objects", bool forceShadersForNode = false, const osg::Program* programTemplate = nullptr, bool disableSoftParticles = false);
/// Applying shaders to a node may replace some fixed-function state.
/// This restores it.