1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-02-06 01:15:32 +00:00

more callback manager

This commit is contained in:
madsbuvi 2021-03-02 14:52:46 +01:00
parent 6baf9a5d3a
commit 700dbb8873
3 changed files with 6 additions and 71 deletions

View file

@ -20,6 +20,7 @@
#include <components/misc/stringops.hpp>
#include <components/misc/stereo.hpp>
#include <components/misc/callbackmanager.hpp>
#include <components/sdlutil/sdlgraphicswindow.hpp>
@ -180,11 +181,10 @@ namespace MWVR
// Give the main camera an initial draw callback that disables camera setup (we don't want it)
Misc::StereoView::instance().setUpdateViewCallback(mUpdateViewCallback);
Misc::StereoView::instance().setInitialDrawCallback(new InitialDrawCallback(this));
Misc::StereoView::instance().setPredrawCallback(mPreDraw);
Misc::StereoView::instance().setPostdrawCallback(mPostDraw);
Misc::StereoView::instance().setFinaldrawCallback(mFinalDraw);
//auto cullMask = Misc::StereoView::instance().getCullMask();
Misc::CallbackManager::instance().addCallback(Misc::CallbackManager::DrawStage::Initial, new InitialDrawCallback(this));
Misc::CallbackManager::instance().addCallback(Misc::CallbackManager::DrawStage::PreDraw, mPreDraw);
Misc::CallbackManager::instance().addCallback(Misc::CallbackManager::DrawStage::PostDraw, mPostDraw);
Misc::CallbackManager::instance().addCallback(Misc::CallbackManager::DrawStage::Final, mFinalDraw);
auto cullMask = ~(MWRender::VisMask::Mask_UpdateVisitor | MWRender::VisMask::Mask_SimpleWater);
cullMask &= ~MWRender::VisMask::Mask_GUI;
cullMask |= MWRender::VisMask::Mask_3DGUI;
@ -479,14 +479,6 @@ namespace MWVR
{
auto* camera = info.getCurrentCamera();
auto name = camera->getName();
// This happens sometimes, i've not been able to catch it when as happens
// to see why and how i can stop it.
if (camera->getPreDrawCallback() != mPreDraw)
{
camera->setPreDrawCallback(mPreDraw);
Log(Debug::Warning) << ("osg overwrote predraw");
}
}
void VRViewer::finalDrawCallback(osg::RenderInfo& info)

View file

@ -1,5 +1,6 @@
#include "stereo.hpp"
#include "stringops.hpp"
#include "callbackmanager.hpp"
#include <osg/io_utils>
#include <osg/ViewportIndexed>
@ -457,27 +458,9 @@ namespace Misc
if (technique == mTechnique)
return;
auto cullCB = mCullCallback;
auto initialDrawCB = mInitialDrawCallback;
auto predrawCB = mPreDrawCallback;
auto postDrawCB = mPostDrawCallback;
auto finalDrawCB = mFinalDrawCallback;
setCullCallback(nullptr);
setInitialDrawCallback(nullptr);
setPostdrawCallback(nullptr);
setPredrawCallback(nullptr);
setFinaldrawCallback(nullptr);
disableStereo();
mTechnique = technique;
enableStereo();
setCullCallback(cullCB);
setInitialDrawCallback(initialDrawCB);
setPostdrawCallback(predrawCB);
setPredrawCallback(postDrawCB);
setFinaldrawCallback(finalDrawCB);
}
void StereoView::update()
@ -690,30 +673,6 @@ namespace Misc
right.fov = { -0.620896876, 0.767549932, 0.726982594, -0.837898076 };
}
void StereoView::setInitialDrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb)
{
mInitialDrawCallback = cb;
mMainCamera->setInitialDrawCallback(cb);
}
void StereoView::setPredrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb)
{
mPreDrawCallback = cb;
mMainCamera->setPreDrawCallback(cb);
}
void StereoView::setPostdrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb)
{
mPostDrawCallback = cb;
mMainCamera->setPostDrawCallback(cb);
}
void StereoView::setFinaldrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb)
{
mFinalDrawCallback = cb;
mMainCamera->setFinalDrawCallback(cb);
}
void StereoView::setCullCallback(osg::ref_ptr<osg::NodeCallback> cb)
{
mMainCamera->setCullCallback(cb);

View file

@ -135,18 +135,6 @@ namespace Misc
//! Callback that updates stereo configuration during the update pass
void setUpdateViewCallback(std::shared_ptr<UpdateViewCallback> cb);
//! Set the initial draw callback on the appropriate camera object
void setInitialDrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb);
//! Set the predraw callback on the appropriate camera object
void setPredrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb);
//! Set the postdraw callback on the appropriate camera object
void setPostdrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb);
//! Set the final draw callback on the appropriate camera object
void setFinaldrawCallback(osg::ref_ptr<osg::Camera::DrawCallback> cb);
//! Set the cull callback on the appropriate camera object
void setCullCallback(osg::ref_ptr<osg::NodeCallback> cb);
@ -203,10 +191,6 @@ namespace Misc
// OSG camera callbacks set using set*callback. StereoView manages that these are always set on the appropriate camera(s);
osg::ref_ptr<osg::NodeCallback> mCullCallback{ nullptr };
osg::ref_ptr<osg::Camera::DrawCallback> mInitialDrawCallback{ nullptr };
osg::ref_ptr<osg::Camera::DrawCallback> mPreDrawCallback{ nullptr };
osg::ref_ptr<osg::Camera::DrawCallback> mPostDrawCallback{ nullptr };
osg::ref_ptr<osg::Camera::DrawCallback> mFinalDrawCallback{ nullptr };
};
//! Overrides all stereo-related states/uniforms to disable stereo for the scene rendered by camera