mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-06 04:15:33 +00:00
more callback manager
This commit is contained in:
parent
6baf9a5d3a
commit
700dbb8873
3 changed files with 6 additions and 71 deletions
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue