diff options
author | Cody Glassman <glassmancody.info@gmail.com> | 2022-01-19 11:32:38 +0000 |
---|---|---|
committer | psi29a <psi29a@gmail.com> | 2022-01-19 11:32:38 +0000 |
commit | 9cafc31c0d8cafb1c75299b41535fe49fc5028a2 (patch) | |
tree | ce6aaf9fb62a59440f13ed379418f53e6804c631 | |
parent | 9d0e427ec17464f4aad79dec35fd2b933d5ecfd4 (diff) |
Restore ripples with soft particles
-rw-r--r-- | apps/openmw/mwrender/ripplesimulation.cpp | 2 | ||||
-rw-r--r-- | components/resource/scenemanager.cpp | 4 | ||||
-rw-r--r-- | components/resource/scenemanager.hpp | 2 |
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. |