summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp')
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp61
1 files changed, 50 insertions, 11 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
index 9f0cc2d..79e2185 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderHelper.cpp
@@ -68,8 +68,10 @@ QT3DSVec2 ToRectRelativeCoords(const QT3DSVec2 &inCoords, const NVRenderRectF &i
}
SLayerRenderHelper::SLayerRenderHelper()
- : m_Layer(NULL)
- , m_Camera(NULL)
+ : m_Layer(nullptr)
+ , m_Camera(nullptr)
+ , m_CameraLeftEye(nullptr)
+ , m_CameraRightEye(nullptr)
, m_Offscreen(false)
{
}
@@ -87,6 +89,9 @@ SLayerRenderHelper::SLayerRenderHelper(const NVRenderRectF &inPresentationViewpo
, m_PresentationScissor(inPresentationScissor)
, m_PresentationDesignDimensions(inPresentationDesignDimensions)
, m_Layer(&inLayer)
+ , m_Camera(nullptr)
+ , m_CameraLeftEye(nullptr)
+ , m_CameraRightEye(nullptr)
, m_Offscreen(inOffscreen)
, m_ScaleMode(inScaleMode)
, m_StereoMode(inStereoMode)
@@ -260,9 +265,9 @@ QSize SLayerRenderHelper::GetTextureDimensions() const
SCamera *SLayerRenderHelper::GetCamera() {
if (m_StereoView == StereoViews::Left)
- return &m_CameraLeftEye;
+ return m_CameraLeftEye;
if (m_StereoView == StereoViews::Right)
- return &m_CameraRightEye;
+ return m_CameraRightEye;
return m_Camera;
}
@@ -312,7 +317,7 @@ Option<SRay> SLayerRenderHelper::GetPickRay(const QT3DSVec2 &inMouseCoords,
bool inForceIntersect,
bool sceneCameraView) const
{
- if (m_Camera == NULL)
+ if (!m_Camera)
return Empty();
Option<QT3DSVec2> theCoords(
GetLayerMouseCoords(inMouseCoords, inWindowDimensions, inForceIntersect));
@@ -336,11 +341,45 @@ bool SLayerRenderHelper::isStereoscopic() const
return m_StereoMode != StereoModes::Mono;
}
+void SLayerRenderHelper::copyCameraProperties(SCamera *sourceCamera,
+ SCamera *destinationCamera)
+{
+ if (!sourceCamera || !destinationCamera)
+ return;
+
+ destinationCamera->m_FOV = sourceCamera->m_FOV;
+ destinationCamera->m_ClipFar = sourceCamera->m_ClipFar;
+ destinationCamera->m_ClipNear = sourceCamera->m_ClipNear;
+ destinationCamera->m_ScaleMode = sourceCamera->m_ScaleMode;
+ destinationCamera->m_Projection = sourceCamera->m_Projection;
+ destinationCamera->m_ScaleAnchor = sourceCamera->m_ScaleAnchor;
+ destinationCamera->m_FrustumScale = sourceCamera->m_FrustumScale;
+ destinationCamera->m_FOVHorizontal = sourceCamera->m_FOVHorizontal;
+ destinationCamera->m_EnableFrustumCulling = sourceCamera->m_EnableFrustumCulling;
+ destinationCamera->m_Flags = sourceCamera->m_Flags;
+ destinationCamera->m_Pivot = sourceCamera->m_Pivot;
+ destinationCamera->m_Scale = sourceCamera->m_Scale;
+ destinationCamera->m_DFSIndex = sourceCamera->m_DFSIndex;
+ destinationCamera->m_Position = sourceCamera->m_Position;
+ destinationCamera->m_Rotation = sourceCamera->m_Rotation;
+ destinationCamera->m_UserData = sourceCamera->m_UserData;
+ destinationCamera->m_LocalOpacity = sourceCamera->m_LocalOpacity;
+ destinationCamera->m_GlobalOpacity = sourceCamera->m_GlobalOpacity;
+ destinationCamera->m_RotationOrder = sourceCamera->m_RotationOrder;
+ destinationCamera->m_LocalTransform = sourceCamera->m_LocalTransform;
+ destinationCamera->m_GlobalTransform = sourceCamera->m_GlobalTransform;
+}
+
void SLayerRenderHelper::adjustCameraStereoSeparation()
{
+ if (!m_CameraLeftEye)
+ m_CameraLeftEye = new SCamera();
+ if (!m_CameraRightEye)
+ m_CameraRightEye = new SCamera();
+
// Copy m_Camera properties into left & right cameras
- m_CameraLeftEye = SCamera(*m_Camera);
- m_CameraRightEye = SCamera(*m_Camera);
+ copyCameraProperties(m_Camera, m_CameraLeftEye);
+ copyCameraProperties(m_Camera, m_CameraRightEye);
// Adjust left & right camera positions by eye separation
QT3DSMat44 mat = QT3DSMat44::createIdentity();
@@ -349,12 +388,12 @@ void SLayerRenderHelper::adjustCameraStereoSeparation()
camPos.x = m_Camera->m_Position.x - m_StereoEyeSeparation;
mat.scale(QT3DSVec4(m_Camera->m_Scale, 1.0f));
mat.setPosition(camPos);
- m_CameraLeftEye.SetLocalTransformFromMatrix(mat);
+ m_CameraLeftEye->SetLocalTransformFromMatrix(mat);
camPos.x = m_Camera->m_Position.x + m_StereoEyeSeparation;
mat.scale(QT3DSVec4(m_Camera->m_Scale, 1.0f));
mat.setPosition(camPos);
- m_CameraRightEye.SetLocalTransformFromMatrix(mat);
+ m_CameraRightEye->SetLocalTransformFromMatrix(mat);
- m_CameraLeftEye.MarkDirty();
- m_CameraRightEye.MarkDirty();
+ m_CameraLeftEye->MarkDirty();
+ m_CameraRightEye->MarkDirty();
}