From d63eb3325f990a6745ec33477d7c114e0f202ab0 Mon Sep 17 00:00:00 2001 From: "glassmancody.info" Date: Tue, 17 Aug 2021 17:45:50 -0700 Subject: [PATCH] fix coverity warning and build on some osg --- apps/openmw/mwrender/postprocessor.cpp | 20 ++++++++++---------- apps/openmw/mwrender/postprocessor.hpp | 2 +- apps/openmw/mwrender/renderingmanager.cpp | 12 ++++++------ components/sceneutil/util.cpp | 2 +- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/openmw/mwrender/postprocessor.cpp b/apps/openmw/mwrender/postprocessor.cpp index eff7d46892..f846a05872 100644 --- a/apps/openmw/mwrender/postprocessor.cpp +++ b/apps/openmw/mwrender/postprocessor.cpp @@ -43,14 +43,15 @@ namespace void operator()(osg::Node* node, osg::NodeVisitor* nv) override { - osgUtil::RenderStage* renderStage = nv->asCullVisitor()->getCurrentRenderStage(); + osgUtil::CullVisitor* cv = static_cast(nv); + osgUtil::RenderStage* renderStage = cv->getCurrentRenderStage(); unsigned int frame = nv->getTraversalNumber(); if (frame != mLastFrameNumber) { mLastFrameNumber = frame; - MWRender::PostProcessor* postProcessor = dynamic_cast(nv->asCullVisitor()->getCurrentCamera()->getUserData()); + MWRender::PostProcessor* postProcessor = dynamic_cast(cv->getCurrentCamera()->getUserData()); if (!postProcessor) { @@ -99,8 +100,12 @@ namespace MWRender PostProcessor::PostProcessor(RenderingManager& rendering, osgViewer::Viewer* viewer, osg::Group* rootNode) : mViewer(viewer) , mRootNode(new osg::Group) + , mDepthFormat(GL_DEPTH_COMPONENT24) , mRendering(rendering) { + if (!SceneUtil::getReverseZ()) + return; + osg::GraphicsContext* gc = viewer->getCamera()->getGraphicsContext(); unsigned int contextID = gc->getState()->getContextID(); osg::GLExtensions* ext = gc->getState()->get(); @@ -128,7 +133,6 @@ namespace MWRender // TODO: Once we have post-processing implemented we want to skip this return and continue with setup. // Rendering to a FBO to fullscreen geometry has overhead (especially when MSAA is enabled) and there are no // benefits if no floating point depth formats are supported. - mDepthFormat = GL_DEPTH_COMPONENT24; Log(Debug::Warning) << errPreamble << "'GL_ARB_depth_buffer_float' and 'GL_NV_depth_buffer_float' unsupported."; return; } @@ -137,7 +141,7 @@ namespace MWRender int height = viewer->getCamera()->getViewport()->height(); createTexturesAndCamera(width, height); - resize(width, height, true); + resize(width, height); mRootNode->addChild(mHUDCamera); mRootNode->addChild(rootNode); @@ -154,7 +158,7 @@ namespace MWRender mViewer->getCamera()->setUserData(this); } - void PostProcessor::resize(int width, int height, bool init) + void PostProcessor::resize(int width, int height) { mDepthTex->setTextureSize(width, height); mSceneTex->setTextureSize(width, height); @@ -170,7 +174,7 @@ namespace MWRender // When MSAA is enabled we must first render to a render buffer, then // blit the result to the FBO which is either passed to the main frame // buffer for display or used as the entry point for a post process chain. - if (samples > 0) + if (samples > 1) { mMsaaFbo = new osg::FrameBufferObject; osg::ref_ptr colorRB = new osg::RenderBuffer(width, height, mSceneTex->getInternalFormat(), samples); @@ -179,12 +183,8 @@ namespace MWRender mMsaaFbo->setAttachment(osg::Camera::DEPTH_BUFFER, osg::FrameBufferAttachment(depthRB)); } - if (init) - return; - mViewer->getCamera()->resize(width, height); mHUDCamera->resize(width, height); - mRendering.updateProjectionMatrix(); } diff --git a/apps/openmw/mwrender/postprocessor.hpp b/apps/openmw/mwrender/postprocessor.hpp index ad922c1cbc..f93f3a5b66 100644 --- a/apps/openmw/mwrender/postprocessor.hpp +++ b/apps/openmw/mwrender/postprocessor.hpp @@ -26,7 +26,7 @@ namespace MWRender int getDepthFormat() { return mDepthFormat; } - void resize(int width, int height, bool init=false); + void resize(int width, int height); private: void createTexturesAndCamera(int width, int height); diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 5ffc54f3f8..381a2e5f62 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -431,6 +431,12 @@ namespace MWRender mGroundcoverWorld->setActiveGrid(osg::Vec4i(0, 0, 0, 0)); } + mStateUpdater = new StateUpdater; + sceneRoot->addUpdateCallback(mStateUpdater); + + mSharedUniformStateUpdater = new SharedUniformStateUpdater; + rootNode->addUpdateCallback(mSharedUniformStateUpdater); + mPostProcessor = new PostProcessor(*this, viewer, mRootNode); resourceSystem->getSceneManager()->setDepthFormat(mPostProcessor->getDepthFormat()); @@ -476,12 +482,6 @@ namespace MWRender source->setStateSetModes(*mRootNode->getOrCreateStateSet(), osg::StateAttribute::ON); - mStateUpdater = new StateUpdater; - sceneRoot->addUpdateCallback(mStateUpdater); - - mSharedUniformStateUpdater = new SharedUniformStateUpdater; - rootNode->addUpdateCallback(mSharedUniformStateUpdater); - osg::Camera::CullingMode cullingMode = osg::Camera::DEFAULT_CULLING|osg::Camera::FAR_PLANE_CULLING; if (!Settings::Manager::getBool("small feature culling", "Camera")) diff --git a/components/sceneutil/util.cpp b/components/sceneutil/util.cpp index 14bfd35cb4..007a6637a8 100644 --- a/components/sceneutil/util.cpp +++ b/components/sceneutil/util.cpp @@ -194,7 +194,7 @@ public: void operator()(osg::Node* node, osg::NodeVisitor* nv) override { - osgUtil::RenderStage* renderStage = nv->asCullVisitor()->getCurrentRenderStage(); + osgUtil::RenderStage* renderStage = static_cast(nv)->getCurrentRenderStage(); renderStage->setMultisampleResolveFramebufferObject(mFbo); renderStage->setFrameBufferObject(mMsaaFbo);