mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 06:18:52 +02:00
portals shouldn't flip
This commit is contained in:
parent
5159367b4c
commit
c608e82f22
4 changed files with 9 additions and 5 deletions
|
@ -299,6 +299,7 @@ public:
|
||||||
_cachedArgsPointer->_blitFramebuffer = args->_blitFramebuffer;
|
_cachedArgsPointer->_blitFramebuffer = args->_blitFramebuffer;
|
||||||
_cachedArgsPointer->_ignoreItem = args->_ignoreItem;
|
_cachedArgsPointer->_ignoreItem = args->_ignoreItem;
|
||||||
_cachedArgsPointer->_mirrorDepth = args->_mirrorDepth;
|
_cachedArgsPointer->_mirrorDepth = args->_mirrorDepth;
|
||||||
|
_cachedArgsPointer->_numMirrorFlips = args->_numMirrorFlips;
|
||||||
|
|
||||||
ViewFrustum srcViewFrustum = args->getViewFrustum();
|
ViewFrustum srcViewFrustum = args->getViewFrustum();
|
||||||
ItemID portalExitID = args->_scene->getItem(mirror.id).computeMirrorView(srcViewFrustum);
|
ItemID portalExitID = args->_scene->getItem(mirror.id).computeMirrorView(srcViewFrustum);
|
||||||
|
@ -306,9 +307,10 @@ public:
|
||||||
args->_blitFramebuffer = _mirrorFramebuffer;
|
args->_blitFramebuffer = _mirrorFramebuffer;
|
||||||
args->_ignoreItem = portalExitID != Item::INVALID_ITEM_ID ? portalExitID : mirror.id;
|
args->_ignoreItem = portalExitID != Item::INVALID_ITEM_ID ? portalExitID : mirror.id;
|
||||||
args->_mirrorDepth = _depth;
|
args->_mirrorDepth = _depth;
|
||||||
|
args->_numMirrorFlips += portalExitID != Item::INVALID_ITEM_ID ? 0 : 1;
|
||||||
|
|
||||||
gpu::doInBatch("SetupMirrorTask::run", args->_context, [&](gpu::Batch& batch) {
|
gpu::doInBatch("SetupMirrorTask::run", args->_context, [&](gpu::Batch& batch) {
|
||||||
bool shouldMirror = _depth % 2 == (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
bool shouldMirror = args->_numMirrorFlips % 2 == (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
||||||
batch.setContextMirrorViewCorrection(shouldMirror);
|
batch.setContextMirrorViewCorrection(shouldMirror);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -366,7 +368,7 @@ public:
|
||||||
args->_batch = &batch;
|
args->_batch = &batch;
|
||||||
|
|
||||||
if (cachedArgs) {
|
if (cachedArgs) {
|
||||||
bool shouldMirror = cachedArgs->_mirrorDepth % 2 == (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
bool shouldMirror = cachedArgs->_numMirrorFlips % 2 == (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
||||||
batch.setContextMirrorViewCorrection(shouldMirror);
|
batch.setContextMirrorViewCorrection(shouldMirror);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,11 +392,12 @@ public:
|
||||||
args->_batch = nullptr;
|
args->_batch = nullptr;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Restore the blit framebuffer after we've sampled from it
|
|
||||||
if (cachedArgs) {
|
if (cachedArgs) {
|
||||||
|
// Restore the blit framebuffer after we've sampled from it
|
||||||
args->_blitFramebuffer = cachedArgs->_blitFramebuffer;
|
args->_blitFramebuffer = cachedArgs->_blitFramebuffer;
|
||||||
args->_ignoreItem = cachedArgs->_ignoreItem;
|
args->_ignoreItem = cachedArgs->_ignoreItem;
|
||||||
args->_mirrorDepth = cachedArgs->_mirrorDepth;
|
args->_mirrorDepth = cachedArgs->_mirrorDepth;
|
||||||
|
args->_numMirrorFlips = cachedArgs->_numMirrorFlips;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ void ToneMapAndResample::run(const RenderContextPointer& renderContext, const In
|
||||||
batch.setViewportTransform(destViewport);
|
batch.setViewportTransform(destViewport);
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
batch.resetViewTransform();
|
batch.resetViewTransform();
|
||||||
bool shouldMirror = _depth >= (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
bool shouldMirror = args->_numMirrorFlips >= (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
||||||
batch.setPipeline(shouldMirror ? _mirrorPipeline : _pipeline);
|
batch.setPipeline(shouldMirror ? _mirrorPipeline : _pipeline);
|
||||||
|
|
||||||
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport));
|
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport));
|
||||||
|
|
|
@ -162,6 +162,7 @@ namespace render {
|
||||||
|
|
||||||
ItemID _ignoreItem { 0 };
|
ItemID _ignoreItem { 0 };
|
||||||
size_t _mirrorDepth { 0 };
|
size_t _mirrorDepth { 0 };
|
||||||
|
size_t _numMirrorFlips { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -167,7 +167,7 @@ void UpsampleToBlitFramebuffer::run(const RenderContextPointer& renderContext, c
|
||||||
batch.setViewportTransform(viewport);
|
batch.setViewportTransform(viewport);
|
||||||
batch.setProjectionTransform(glm::mat4());
|
batch.setProjectionTransform(glm::mat4());
|
||||||
batch.resetViewTransform();
|
batch.resetViewTransform();
|
||||||
bool shouldMirror = _depth >= (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
bool shouldMirror = args->_numMirrorFlips >= (args->_renderMode != RenderArgs::MIRROR_RENDER_MODE);
|
||||||
batch.setPipeline(shouldMirror ? _mirrorPipeline : _pipeline);
|
batch.setPipeline(shouldMirror ? _mirrorPipeline : _pipeline);
|
||||||
|
|
||||||
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(bufferSize, viewport));
|
batch.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(bufferSize, viewport));
|
||||||
|
|
Loading…
Reference in a new issue