From a6c7fcd43691d8bec1138a489db00b0e512409c2 Mon Sep 17 00:00:00 2001 From: "glassmancody.info" Date: Wed, 18 Aug 2021 15:46:25 -0700 Subject: [PATCH] don't pingpong depth function on character preview update --- apps/openmw/mwrender/characterpreview.cpp | 54 +++++++++++++---------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/apps/openmw/mwrender/characterpreview.cpp b/apps/openmw/mwrender/characterpreview.cpp index 9db1330923..44b7b2f457 100644 --- a/apps/openmw/mwrender/characterpreview.cpp +++ b/apps/openmw/mwrender/characterpreview.cpp @@ -133,32 +133,40 @@ namespace MWRender } if (SceneUtil::getReverseZ() && stateset->getAttribute(osg::StateAttribute::DEPTH)) { - if (!newStateSet) - { - newStateSet = new osg::StateSet(*stateset, osg::CopyOp::SHALLOW_COPY); - node.setStateSet(newStateSet); - } - // Setup standard depth ranges + bool depthModified = false; osg::Depth* depth = static_cast(stateset->getAttribute(osg::StateAttribute::DEPTH)); - osg::ref_ptr newDepth = new osg::Depth(*depth); - switch (newDepth->getFunction()) + depth->getUserValue("depthModified", depthModified); + + if (!depthModified) { - case osg::Depth::LESS: - newDepth->setFunction(osg::Depth::GREATER); - break; - case osg::Depth::LEQUAL: - newDepth->setFunction(osg::Depth::GEQUAL); - break; - case osg::Depth::GREATER: - newDepth->setFunction(osg::Depth::LESS); - break; - case osg::Depth::GEQUAL: - newDepth->setFunction(osg::Depth::LEQUAL); - break; - default: - break; + if (!newStateSet) + { + newStateSet = new osg::StateSet(*stateset, osg::CopyOp::SHALLOW_COPY); + node.setStateSet(newStateSet); + } + // Setup standard depth ranges + osg::ref_ptr newDepth = new osg::Depth(*depth); + + switch (newDepth->getFunction()) + { + case osg::Depth::LESS: + newDepth->setFunction(osg::Depth::GREATER); + break; + case osg::Depth::LEQUAL: + newDepth->setFunction(osg::Depth::GEQUAL); + break; + case osg::Depth::GREATER: + newDepth->setFunction(osg::Depth::LESS); + break; + case osg::Depth::GEQUAL: + newDepth->setFunction(osg::Depth::LEQUAL); + break; + default: + break; + } + newStateSet->setAttribute(newDepth, osg::StateAttribute::ON); + newDepth->setUserValue("depthModified", true); } - newStateSet->setAttribute(newDepth, osg::StateAttribute::ON); } } traverse(node);