diff options
6 files changed, 18 insertions, 6 deletions
diff --git a/src/runtimerender/Qt3DSRenderSubpresentation.cpp b/src/runtimerender/Qt3DSRenderSubpresentation.cpp index 8b13361..834d773 100644 --- a/src/runtimerender/Qt3DSRenderSubpresentation.cpp +++ b/src/runtimerender/Qt3DSRenderSubpresentation.cpp @@ -81,6 +81,7 @@ namespace render { const SRenderInstanceId instanceId) { NVRenderRect theViewportSize(inRenderContext.GetViewport()); + m_Presentation.m_Scene->m_IsSubPresentationScene = true; m_Presentation.m_Scene->Render( QT3DSVec2((QT3DSF32)theViewportSize.m_Width, (QT3DSF32)theViewportSize.m_Height), m_RenderContext, inClearColorBuffer, instanceId); @@ -96,6 +97,7 @@ namespace render { Q_UNUSED(inEnvironment); Q_UNUSED(inPresScale); NVRenderRect theViewportSize(inRenderContext.GetViewport()); + m_Presentation.m_Scene->m_IsSubPresentationScene = true; m_Presentation.m_Scene->RenderWithClear( QT3DSVec2((QT3DSF32)theViewportSize.m_Width, (QT3DSF32)theViewportSize.m_Height), m_RenderContext, inClearBuffer, inClearColor, id); diff --git a/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp b/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp index afe68d5..3d14f9c 100644 --- a/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp +++ b/src/runtimerender/graphobjects/Qt3DSRenderScene.cpp @@ -42,6 +42,7 @@ SScene::SScene() , m_ClearColor(0.0f) , m_UseClearColor(true) , m_Dirty(true) + , m_IsSubPresentationScene(false) { } diff --git a/src/runtimerender/graphobjects/Qt3DSRenderScene.h b/src/runtimerender/graphobjects/Qt3DSRenderScene.h index 00a4591..a2f86b9 100644 --- a/src/runtimerender/graphobjects/Qt3DSRenderScene.h +++ b/src/runtimerender/graphobjects/Qt3DSRenderScene.h @@ -47,6 +47,7 @@ namespace render { QT3DSVec4 m_ClearColor; bool m_UseClearColor; bool m_Dirty; + bool m_IsSubPresentationScene; enum RenderClearCommand { ClearIsOptional = 0, diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp index 3c6e1c3..9f06764 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp @@ -2090,10 +2090,12 @@ void SLayerRenderData::RunRenderPass(TRenderRenderableFunction inRenderFn, // transform. QT3DSMat44 theFinalMVP(QT3DSMat44::createIdentity()); SCamera theTempCamera; + // When layer & scene are part of subpresentation, ignore stereoscopic viewport adjustments + bool noStereo = m_Layer.m_Scene && m_Layer.m_Scene->m_IsSubPresentationScene; NVRenderRect theLayerViewport( - thePrepResult.GetLayerToPresentationViewport().ToIntegerRect()); + thePrepResult.GetLayerToPresentationViewport(noStereo).ToIntegerRect()); NVRenderRect theLayerClip( - thePrepResult.GetLayerToPresentationScissorRect().ToIntegerRect()); + thePrepResult.GetLayerToPresentationScissorRect(noStereo).ToIntegerRect()); { QT3DSMat33 ignored; diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp index c28585e..a9c7f4c 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp @@ -207,8 +207,11 @@ NVRenderRectF SLayerRenderHelper::GetLayerRenderViewport() const return m_Viewport; } -NVRenderRectF SLayerRenderHelper::GetLayerToPresentationViewport() const +NVRenderRectF SLayerRenderHelper::GetLayerToPresentationViewport(bool noStereo) const { + if (noStereo) + return m_Viewport; + if (m_StereoMode == StereoModes::LeftRight) { if (m_StereoView == StereoViews::Left) { return NVRenderRectF(m_Viewport.m_X, m_Viewport.m_Y, m_Viewport.m_Width/2, @@ -231,8 +234,11 @@ NVRenderRectF SLayerRenderHelper::GetLayerToPresentationViewport() const return m_Viewport; } -NVRenderRectF SLayerRenderHelper::GetLayerToPresentationScissorRect() const +NVRenderRectF SLayerRenderHelper::GetLayerToPresentationScissorRect(bool noStereo) const { + if (noStereo) + return m_Scissor; + if (m_StereoMode == StereoModes::LeftRight) { if (m_StereoView == StereoViews::Left) { return NVRenderRectF(m_Scissor.m_X, m_Scissor.m_Y, diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h index 59f4e08..7d2254a 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.h @@ -108,10 +108,10 @@ namespace render { // Does not differ whether offscreen or not, simply states how this layer maps to the // presentation NVRenderRectF getOriginalLayerToPresentationViewport() const; - NVRenderRectF GetLayerToPresentationViewport() const; + NVRenderRectF GetLayerToPresentationViewport(bool noStereo = false) const; // Does not differ whether offscreen or not, scissor rect of how this layer maps to // presentation. - NVRenderRectF GetLayerToPresentationScissorRect() const; + NVRenderRectF GetLayerToPresentationScissorRect(bool noStereo = false) const; QSize GetTextureDimensions() const; |