summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcody glassman <glassmancody.info@gmail.com>2022-01-08 16:19:42 -0800
committercody glassman <glassmancody.info@gmail.com>2022-01-08 16:19:42 -0800
commit8216410e7d50ffd2bf6d0a62810880eb9da83c3b (patch)
treef754c14a8be31068fa4babbe42cf52abba73d485
parent69319cea317c1796b473978248b2e837ec5c918e (diff)
add white ambient to spell VFX as in Morrowind
-rw-r--r--CHANGELOG.md1
-rw-r--r--apps/openmw/mwrender/animation.cpp18
2 files changed, 18 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 419727c87d..3ee15e0ea3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,7 @@
Bug #4602: Robert's Bodies: crash inside createInstance()
Bug #4700: Editor: Incorrect command implementation
Bug #4744: Invisible particles must still be processed
+ Bug #4949: Incorrect particle lighting
Bug #5088: Sky abruptly changes direction during certain weather transitions
Bug #5100: Persuasion doesn't always clamp the resulting disposition
Bug #5120: Scripted object spawning updates physics system
diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp
index bf0ed04055..732ffd33aa 100644
--- a/apps/openmw/mwrender/animation.cpp
+++ b/apps/openmw/mwrender/animation.cpp
@@ -7,6 +7,7 @@
#include <osg/BlendFunc>
#include <osg/Material>
#include <osg/Switch>
+#include <osg/LightModel>
#include <osgParticle/ParticleSystem>
#include <osgParticle/ParticleProcessor>
@@ -372,6 +373,19 @@ namespace
private:
int mEffectId;
};
+
+ osg::ref_ptr<osg::LightModel> getVFXLightModelInstance()
+ {
+ static osg::ref_ptr<osg::LightModel> lightModel = nullptr;
+
+ if (!lightModel)
+ {
+ lightModel = new osg::LightModel;
+ lightModel->setAmbientIntensity({1,1,1,1});
+ }
+
+ return lightModel;
+ }
}
namespace MWRender
@@ -1547,7 +1561,9 @@ namespace MWRender
parentNode->addChild(trans);
osg::ref_ptr<osg::Node> node = mResourceSystem->getSceneManager()->getInstance(model, trans);
- node->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
+
+ // Morrowind has a white ambient light attached to the root VFX node of the scenegraph
+ node->getOrCreateStateSet()->setAttributeAndModes(getVFXLightModelInstance(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);
SceneUtil::FindMaxControllerLengthVisitor findMaxLengthVisitor;
node->accept(findMaxLengthVisitor);