From c608e82f22a5b147ef30f469fc874ced8d8ce859 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Thu, 21 Dec 2023 15:41:16 -0800 Subject: [PATCH] portals shouldn't flip --- libraries/render-utils/src/RenderCommonTask.cpp | 9 ++++++--- libraries/render-utils/src/ToneMapAndResampleTask.cpp | 2 +- libraries/render/src/render/Args.h | 1 + libraries/render/src/render/ResampleTask.cpp | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/RenderCommonTask.cpp b/libraries/render-utils/src/RenderCommonTask.cpp index 263af717f5..a509ede437 100644 --- a/libraries/render-utils/src/RenderCommonTask.cpp +++ b/libraries/render-utils/src/RenderCommonTask.cpp @@ -299,6 +299,7 @@ public: _cachedArgsPointer->_blitFramebuffer = args->_blitFramebuffer; _cachedArgsPointer->_ignoreItem = args->_ignoreItem; _cachedArgsPointer->_mirrorDepth = args->_mirrorDepth; + _cachedArgsPointer->_numMirrorFlips = args->_numMirrorFlips; ViewFrustum srcViewFrustum = args->getViewFrustum(); ItemID portalExitID = args->_scene->getItem(mirror.id).computeMirrorView(srcViewFrustum); @@ -306,9 +307,10 @@ public: args->_blitFramebuffer = _mirrorFramebuffer; args->_ignoreItem = portalExitID != Item::INVALID_ITEM_ID ? portalExitID : mirror.id; args->_mirrorDepth = _depth; + args->_numMirrorFlips += portalExitID != Item::INVALID_ITEM_ID ? 0 : 1; 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); }); @@ -366,7 +368,7 @@ public: args->_batch = &batch; 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); } @@ -390,11 +392,12 @@ public: args->_batch = nullptr; }); - // Restore the blit framebuffer after we've sampled from it if (cachedArgs) { + // Restore the blit framebuffer after we've sampled from it args->_blitFramebuffer = cachedArgs->_blitFramebuffer; args->_ignoreItem = cachedArgs->_ignoreItem; args->_mirrorDepth = cachedArgs->_mirrorDepth; + args->_numMirrorFlips = cachedArgs->_numMirrorFlips; } } diff --git a/libraries/render-utils/src/ToneMapAndResampleTask.cpp b/libraries/render-utils/src/ToneMapAndResampleTask.cpp index 36a08427cb..1ea9deb1fa 100644 --- a/libraries/render-utils/src/ToneMapAndResampleTask.cpp +++ b/libraries/render-utils/src/ToneMapAndResampleTask.cpp @@ -96,7 +96,7 @@ void ToneMapAndResample::run(const RenderContextPointer& renderContext, const In batch.setViewportTransform(destViewport); batch.setProjectionTransform(glm::mat4()); 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.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(srcBufferSize, args->_viewport)); diff --git a/libraries/render/src/render/Args.h b/libraries/render/src/render/Args.h index 60daa35729..fb7d698672 100644 --- a/libraries/render/src/render/Args.h +++ b/libraries/render/src/render/Args.h @@ -162,6 +162,7 @@ namespace render { ItemID _ignoreItem { 0 }; size_t _mirrorDepth { 0 }; + size_t _numMirrorFlips { 0 }; }; } diff --git a/libraries/render/src/render/ResampleTask.cpp b/libraries/render/src/render/ResampleTask.cpp index af82d249cf..e77dda600c 100644 --- a/libraries/render/src/render/ResampleTask.cpp +++ b/libraries/render/src/render/ResampleTask.cpp @@ -167,7 +167,7 @@ void UpsampleToBlitFramebuffer::run(const RenderContextPointer& renderContext, c batch.setViewportTransform(viewport); batch.setProjectionTransform(glm::mat4()); 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.setModelTransform(gpu::Framebuffer::evalSubregionTexcoordTransform(bufferSize, viewport));