mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-06 10:15:33 +00:00
[Multiview] Fix transparent pass and vertex shader
This commit is contained in:
parent
6f8b4d16d9
commit
e666f36b60
6 changed files with 24 additions and 10 deletions
|
@ -340,7 +340,6 @@ namespace MWRender
|
||||||
mTransparentDepthPostPass->mFbo[frameId] = mFbos[frameId][FBO_Primary];
|
mTransparentDepthPostPass->mFbo[frameId] = mFbos[frameId][FBO_Primary];
|
||||||
mTransparentDepthPostPass->mMsaaFbo[frameId] = mFbos[frameId][FBO_Multisample];
|
mTransparentDepthPostPass->mMsaaFbo[frameId] = mFbos[frameId][FBO_Multisample];
|
||||||
mTransparentDepthPostPass->mOpaqueFbo[frameId] = mFbos[frameId][FBO_OpaqueDepth];
|
mTransparentDepthPostPass->mOpaqueFbo[frameId] = mFbos[frameId][FBO_OpaqueDepth];
|
||||||
mTransparentDepthPostPass->dirtyFrame(frameId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t frame = cv->getTraversalNumber();
|
size_t frame = cv->getTraversalNumber();
|
||||||
|
|
|
@ -80,6 +80,11 @@ namespace MWRender
|
||||||
mMultiviewResolve[frameId] = std::make_unique<Stereo::MultiviewFramebufferResolve>(
|
mMultiviewResolve[frameId] = std::make_unique<Stereo::MultiviewFramebufferResolve>(
|
||||||
msaaFbo ? msaaFbo : fbo, opaqueFbo, GL_DEPTH_BUFFER_BIT);
|
msaaFbo ? msaaFbo : fbo, opaqueFbo, GL_DEPTH_BUFFER_BIT);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mMultiviewResolve[frameId]->setResolveFbo(opaqueFbo);
|
||||||
|
mMultiviewResolve[frameId]->setMsaaFbo(msaaFbo ? msaaFbo : fbo);
|
||||||
|
}
|
||||||
mMultiviewResolve[frameId]->resolveImplementation(state);
|
mMultiviewResolve[frameId]->resolveImplementation(state);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -133,11 +138,4 @@ namespace MWRender
|
||||||
: fbo->apply(state, osg::FrameBufferObject::DRAW_FRAMEBUFFER);
|
: fbo->apply(state, osg::FrameBufferObject::DRAW_FRAMEBUFFER);
|
||||||
state.checkGLErrors("after TransparentDepthBinCallback::drawImplementation");
|
state.checkGLErrors("after TransparentDepthBinCallback::drawImplementation");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransparentDepthBinCallback::dirtyFrame(int frameId)
|
|
||||||
{
|
|
||||||
if (mMultiviewResolve[frameId])
|
|
||||||
mMultiviewResolve[frameId]->dirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@ namespace MWRender
|
||||||
|
|
||||||
void drawImplementation(
|
void drawImplementation(
|
||||||
osgUtil::RenderBin* bin, osg::RenderInfo& renderInfo, osgUtil::RenderLeaf*& previous) override;
|
osgUtil::RenderBin* bin, osg::RenderInfo& renderInfo, osgUtil::RenderLeaf*& previous) override;
|
||||||
void dirtyFrame(int frameId);
|
|
||||||
|
|
||||||
std::array<osg::ref_ptr<osg::FrameBufferObject>, 2> mFbo;
|
std::array<osg::ref_ptr<osg::FrameBufferObject>, 2> mFbo;
|
||||||
std::array<osg::ref_ptr<osg::FrameBufferObject>, 2> mMsaaFbo;
|
std::array<osg::ref_ptr<osg::FrameBufferObject>, 2> mMsaaFbo;
|
||||||
|
|
|
@ -735,6 +735,20 @@ namespace Stereo
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MultiviewFramebufferResolve::setResolveFbo(osg::FrameBufferObject* resolveFbo)
|
||||||
|
{
|
||||||
|
if (resolveFbo != mResolveFbo)
|
||||||
|
dirty();
|
||||||
|
mResolveFbo = resolveFbo;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MultiviewFramebufferResolve::setMsaaFbo(osg::FrameBufferObject* msaaFbo)
|
||||||
|
{
|
||||||
|
if (msaaFbo != mMsaaFbo)
|
||||||
|
dirty();
|
||||||
|
mMsaaFbo = msaaFbo;
|
||||||
|
}
|
||||||
|
|
||||||
void MultiviewFramebufferResolve::resolveImplementation(osg::State& state)
|
void MultiviewFramebufferResolve::resolveImplementation(osg::State& state)
|
||||||
{
|
{
|
||||||
if (mDirtyLayers)
|
if (mDirtyLayers)
|
||||||
|
|
|
@ -125,6 +125,9 @@ namespace Stereo
|
||||||
const osg::FrameBufferObject* resolveFbo() const { return mResolveFbo; }
|
const osg::FrameBufferObject* resolveFbo() const { return mResolveFbo; }
|
||||||
const osg::FrameBufferObject* msaaFbo() const { return mMsaaFbo; }
|
const osg::FrameBufferObject* msaaFbo() const { return mMsaaFbo; }
|
||||||
|
|
||||||
|
void setResolveFbo(osg::FrameBufferObject* resolveFbo);
|
||||||
|
void setMsaaFbo(osg::FrameBufferObject* msaaFbo);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setupLayers();
|
void setupLayers();
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#version 330
|
#version 330 compatibility
|
||||||
|
// Note: compatibility profile required to access gl_ModelViewMatrix
|
||||||
|
|
||||||
#extension GL_OVR_multiview : require
|
#extension GL_OVR_multiview : require
|
||||||
#extension GL_OVR_multiview2 : require
|
#extension GL_OVR_multiview2 : require
|
||||||
|
|
Loading…
Reference in a new issue