Skip to content

Commit 1aa4ef0

Browse files
committed
Merge branch 'lessborkedprecipocclusion' into 'master'
Fix invisible rain when occlusion is enabled and sky blending isn't (#7273) Closes #7273 See merge request OpenMW/openmw!4520
2 parents a17bffd + fe571c1 commit 1aa4ef0

File tree

2 files changed

+24
-24
lines changed

2 files changed

+24
-24
lines changed

apps/openmw/mwrender/sky.cpp

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -262,15 +262,15 @@ namespace MWRender
262262
, mPrecipitationAlpha(0.f)
263263
, mDirtyParticlesEffect(false)
264264
{
265-
osg::ref_ptr<CameraRelativeTransform> skyroot = new CameraRelativeTransform;
266-
skyroot->setName("Sky Root");
265+
mSkyRootNode = new CameraRelativeTransform;
266+
mSkyRootNode->setName("Sky Root");
267267
// Assign empty program to specify we don't want shaders when we are rendering in FFP pipeline
268268
if (!mSceneManager->getForceShaders())
269-
skyroot->getOrCreateStateSet()->setAttributeAndModes(new osg::Program(),
269+
mSkyRootNode->getOrCreateStateSet()->setAttributeAndModes(new osg::Program(),
270270
osg::StateAttribute::OVERRIDE | osg::StateAttribute::PROTECTED | osg::StateAttribute::ON);
271-
mSceneManager->setUpNormalsRTForStateSet(skyroot->getOrCreateStateSet(), false);
272-
SceneUtil::ShadowManager::instance().disableShadowsForStateSet(*skyroot->getOrCreateStateSet());
273-
parentNode->addChild(skyroot);
271+
mSceneManager->setUpNormalsRTForStateSet(mSkyRootNode->getOrCreateStateSet(), false);
272+
SceneUtil::ShadowManager::instance().disableShadowsForStateSet(*mSkyRootNode->getOrCreateStateSet());
273+
parentNode->addChild(mSkyRootNode);
274274

275275
mEarlyRenderBinRoot = new osg::Group;
276276
// render before the world is rendered
@@ -281,19 +281,18 @@ namespace MWRender
281281
if (enableSkyRTT)
282282
{
283283
mSkyRTT = new SkyRTT(Settings::fog().mSkyRttResolution, mEarlyRenderBinRoot);
284-
skyroot->addChild(mSkyRTT);
285-
mRootNode = new osg::Group;
286-
skyroot->addChild(mRootNode);
284+
mSkyRootNode->addChild(mSkyRTT);
287285
}
288-
else
289-
mRootNode = skyroot;
290286

291-
mRootNode->setNodeMask(Mask_Sky);
292-
mRootNode->addChild(mEarlyRenderBinRoot);
293-
mUnderwaterSwitch = new UnderwaterSwitchCallback(skyroot);
287+
mSkyNode = new osg::Group;
288+
mSkyNode->setNodeMask(Mask_Sky);
289+
mSkyNode->addChild(mEarlyRenderBinRoot);
290+
mSkyRootNode->addChild(mSkyNode);
291+
292+
mUnderwaterSwitch = new UnderwaterSwitchCallback(mSkyRootNode);
294293

295294
mPrecipitationOcclusion = Settings::shaders().mWeatherParticleOcclusion;
296-
mPrecipitationOccluder = std::make_unique<PrecipitationOccluder>(skyroot, parentNode, rootNode, camera);
295+
mPrecipitationOccluder = std::make_unique<PrecipitationOccluder>(mSkyRootNode, parentNode, rootNode, camera);
297296
}
298297

299298
void SkyManager::create()
@@ -464,7 +463,7 @@ namespace MWRender
464463
mRainParticleSystem->setUserValue("particleOcclusion", true);
465464
mSceneManager->recreateShaders(mRainNode);
466465

467-
mRootNode->addChild(mRainNode);
466+
mSkyNode->addChild(mRainNode);
468467
if (mPrecipitationOcclusion)
469468
mPrecipitationOccluder->enable();
470469
}
@@ -474,7 +473,7 @@ namespace MWRender
474473
if (!mRainNode)
475474
return;
476475

477-
mRootNode->removeChild(mRainNode);
476+
mSkyNode->removeChild(mRainNode);
478477
mRainNode = nullptr;
479478
mPlacer = nullptr;
480479
mCounter = nullptr;
@@ -485,10 +484,10 @@ namespace MWRender
485484

486485
SkyManager::~SkyManager()
487486
{
488-
if (mRootNode)
487+
if (mSkyRootNode)
489488
{
490-
mRootNode->getParent(0)->removeChild(mRootNode);
491-
mRootNode = nullptr;
489+
mSkyRootNode->getParent(0)->removeChild(mSkyRootNode);
490+
mSkyRootNode = nullptr;
492491
}
493492
}
494493

@@ -595,7 +594,7 @@ namespace MWRender
595594
const osg::Node::NodeMask mask = enabled ? Mask_Sky : 0u;
596595

597596
mEarlyRenderBinRoot->setNodeMask(mask);
598-
mRootNode->setNodeMask(mask);
597+
mSkyNode->setNodeMask(mask);
599598

600599
if (!enabled && mParticleNode && mParticleEffect)
601600
{
@@ -691,7 +690,7 @@ namespace MWRender
691690
{
692691
if (mParticleNode)
693692
{
694-
mRootNode->removeChild(mParticleNode);
693+
mSkyNode->removeChild(mParticleNode);
695694
mParticleNode = nullptr;
696695
}
697696
if (mRainEffect.empty())
@@ -706,7 +705,7 @@ namespace MWRender
706705
mParticleNode = new osg::PositionAttitudeTransform;
707706
mParticleNode->addCullCallback(mUnderwaterSwitch);
708707
mParticleNode->setNodeMask(Mask_WeatherParticles);
709-
mRootNode->addChild(mParticleNode);
708+
mSkyNode->addChild(mParticleNode);
710709
}
711710

712711
mParticleEffect = mSceneManager->getInstance(mCurrentParticleEffect, mParticleNode);

apps/openmw/mwrender/sky.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ namespace MWRender
118118

119119
osg::Camera* mCamera;
120120

121-
osg::ref_ptr<osg::Group> mRootNode;
121+
osg::ref_ptr<CameraRelativeTransform> mSkyRootNode;
122+
osg::ref_ptr<osg::Group> mSkyNode;
122123
osg::ref_ptr<osg::Group> mEarlyRenderBinRoot;
123124

124125
osg::ref_ptr<osg::PositionAttitudeTransform> mParticleNode;

0 commit comments

Comments
 (0)