summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp')
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
index 62ae506..9f47d47 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderData.cpp
@@ -1410,7 +1410,7 @@ void SLayerRenderData::RunRenderPass(TRenderRenderableFunction inRenderFn,
QT3DS_ASSERT(m_LayerPrepResult->m_Flags.ShouldRenderToTexture());
SLayerRenderPreparationResult &thePrepResult(*m_LayerPrepResult);
NVRenderContext &theRenderContext(m_Renderer.GetContext());
- QSize theLayerTextureDimensions = thePrepResult.GetTextureDimensions();
+ QSize theLayerTextureDimensions(thePrepResult.GetTextureDimensions());
QSize theLayerOriginalTextureDimensions = theLayerTextureDimensions;
NVRenderTextureFormats::Enum DepthTextureFormat = NVRenderTextureFormats::Depth24Stencil8;
NVRenderTextureFormats::Enum ColorTextureFormat = NVRenderTextureFormats::RGBA8;
@@ -1647,6 +1647,20 @@ void SLayerRenderData::RunRenderPass(TRenderRenderableFunction inRenderFn,
hasDepthObjects || thePrepResult.m_Flags.RequiresStencilBuffer();
NVRenderRect theNewViewport(0, 0, theLayerTextureDimensions.width(),
theLayerTextureDimensions.height());
+
+ if (m_Layer.m_DynamicResize && theLayerOriginalTextureDimensions.width() != 0) {
+ // With dynamic resize the viewport should behave like it just crops the full layer
+ // So a special viewport has to be calculated that keeps the original object sizes
+ float ratio = theLayerTextureDimensions.width()
+ / theLayerOriginalTextureDimensions.width();
+ auto originalLayerViewport = thePrepResult.getOriginalLayerToPresentationViewport();
+ auto layerViewport = thePrepResult.GetLayerToPresentationViewport();
+ theNewViewport = NVRenderRect((-layerViewport.m_X + originalLayerViewport.m_X) * ratio,
+ (-layerViewport.m_Y + originalLayerViewport.m_Y) * ratio,
+ originalLayerViewport.m_Width * ratio,
+ originalLayerViewport.m_Height * ratio);
+ }
+
{
theRenderContext.SetRenderTarget(theFB);
NVRenderContextScopedProperty<NVRenderRect> __viewport(