From 45362e0ede98915e18e2208fc87a1db306c80b1e Mon Sep 17 00:00:00 2001 From: Cody Glassman Date: Wed, 3 Jul 2024 13:51:57 -0700 Subject: [PATCH 1/2] fix distortion breaking in first person meshes --- components/sceneutil/extradata.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/sceneutil/extradata.cpp b/components/sceneutil/extradata.cpp index 5e91830bba..e616880697 100644 --- a/components/sceneutil/extradata.cpp +++ b/components/sceneutil/extradata.cpp @@ -37,7 +37,8 @@ namespace SceneUtil osg::StateSet* stateset = node.getOrCreateStateSet(); - stateset->setRenderBinDetails(14, "Distortion", osg::StateSet::OVERRIDE_RENDERBIN_DETAILS); + stateset->setNestRenderBins(false); + stateset->setRenderBinDetails(14, "Distortion", osg::StateSet::OVERRIDE_PROTECTED_RENDERBIN_DETAILS); stateset->addUniform(new osg::Uniform("distortionStrength", distortionStrength)); stateset->setAttributeAndModes(depth, osg::StateAttribute::ON); From 4d7e9bae73c29e4c1e594c50da94995de1ac69f2 Mon Sep 17 00:00:00 2001 From: Cody Glassman Date: Thu, 4 Jul 2024 21:07:40 -0700 Subject: [PATCH 2/2] ensure distortion is only rendered once --- apps/openmw/mwrender/distortion.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/openmw/mwrender/distortion.cpp b/apps/openmw/mwrender/distortion.cpp index 2ca2ace65b..ed90944245 100644 --- a/apps/openmw/mwrender/distortion.cpp +++ b/apps/openmw/mwrender/distortion.cpp @@ -2,6 +2,8 @@ #include +#include "postprocessor.hpp" + namespace MWRender { void DistortionCallback::drawImplementation( @@ -10,6 +12,11 @@ namespace MWRender osg::State* state = renderInfo.getState(); size_t frameId = state->getFrameStamp()->getFrameNumber() % 2; + PostProcessor* postProcessor = dynamic_cast(renderInfo.getCurrentCamera()->getUserData()); + + if (!postProcessor || bin->getStage()->getFrameBufferObject() != postProcessor->getPrimaryFbo(frameId)) + return; + mFBO[frameId]->apply(*state); const osg::Texture* tex