summaryrefslogtreecommitdiffstats
path: root/src/runtimerender
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender')
-rw-r--r--src/runtimerender/Qt3DSRenderUIPLoader.cpp1
-rw-r--r--src/runtimerender/Qt3DSRenderUIPSharedTranslation.h1
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp1
-rw-r--r--src/runtimerender/graphobjects/Qt3DSRenderCamera.h1
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp26
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h2
6 files changed, 20 insertions, 12 deletions
diff --git a/src/runtimerender/Qt3DSRenderUIPLoader.cpp b/src/runtimerender/Qt3DSRenderUIPLoader.cpp
index 9aad397..4740839 100644
--- a/src/runtimerender/Qt3DSRenderUIPLoader.cpp
+++ b/src/runtimerender/Qt3DSRenderUIPLoader.cpp
@@ -764,6 +764,7 @@ struct SRenderUIPLoader : public IDOMReferenceResolver
#define Camera_FOV "fov"
#define Camera_FOVHorizontal "fovhorizontal"
#define Camera_Orthographic "orthographic"
+#define Camera_EnableFrustumCulling "enablefrustumculling"
#define Camera_ScaleMode "scalemode"
#define Camera_ScaleAnchor "scaleanchor"
#define Light_LightType "lighttype"
diff --git a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
index 16ce139..06c6346 100644
--- a/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
+++ b/src/runtimerender/Qt3DSRenderUIPSharedTranslation.h
@@ -352,6 +352,7 @@ namespace render {
HANDLE_QT3DS_RENDER_PROPERTY(Camera, ClipFar, Dirty) \
HANDLE_QT3DS_RENDER_RADIAN_PROPERTY(Camera, FOV, Dirty) \
HANDLE_QT3DS_RENDER_PROPERTY(Camera, FOVHorizontal, Dirty) \
+ HANDLE_QT3DS_RENDER_PROPERTY(Camera, EnableFrustumCulling, Dirty) \
HANDLE_QT3DS_NODE_FLAGS_PROPERTY(Camera, Orthographic, Dirty) \
HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Camera, ScaleMode, Dirty) \
HANDLE_QT3DS_RENDER_ENUM_PROPERTY(Camera, ScaleAnchor, Dirty)
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp b/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp
index b9f9c20..71f74d7 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp
+++ b/src/runtimerender/graphobjects/Qt3DSRenderCamera.cpp
@@ -159,6 +159,7 @@ SCamera::SCamera()
, m_ClipFar(10000)
, m_FOV(60)
, m_FOVHorizontal(false)
+ , m_EnableFrustumCulling(false)
, m_ScaleMode(CameraScaleModes::Fit)
, m_ScaleAnchor(CameraScaleAnchors::Center)
{
diff --git a/src/runtimerender/graphobjects/Qt3DSRenderCamera.h b/src/runtimerender/graphobjects/Qt3DSRenderCamera.h
index be8d53e..0ecfc83 100644
--- a/src/runtimerender/graphobjects/Qt3DSRenderCamera.h
+++ b/src/runtimerender/graphobjects/Qt3DSRenderCamera.h
@@ -110,6 +110,7 @@ namespace render {
// Record some values from creating the projection matrix
// to use during mouse picking.
QT3DSVec2 m_FrustumScale;
+ bool m_EnableFrustumCulling;
SCamera();
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
index a53a40a..bfd52d6 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.cpp
@@ -1409,17 +1409,21 @@ namespace render {
theTextScaleFactor = m_Camera->GetTextScaleFactor(
thePrepResult.GetLayerToPresentationViewport(),
thePrepResult.GetPresentationDesignDimensions());
- SClipPlane nearPlane;
- QT3DSMat33 theUpper33(m_Camera->m_GlobalTransform.getUpper3x3InverseTranspose());
-
- QT3DSVec3 dir(theUpper33.transform(QT3DSVec3(0, 0, -1)));
- dir.normalize();
- nearPlane.normal = dir;
- QT3DSVec3 theGlobalPos = m_Camera->GetGlobalPos() + m_Camera->m_ClipNear * dir;
- nearPlane.d = -(dir.dot(theGlobalPos));
- // the near plane's bbox edges are calculated in the clipping frustum's
- // constructor.
- m_ClippingFrustum = SClippingFrustum(m_ViewProjection, nearPlane);
+ if (m_Camera->m_EnableFrustumCulling) {
+ SClipPlane nearPlane;
+ QT3DSMat33 theUpper33(m_Camera->m_GlobalTransform.getUpper3x3InverseTranspose());
+
+ QT3DSVec3 dir(theUpper33.transform(QT3DSVec3(0, 0, -1)));
+ dir.normalize();
+ nearPlane.normal = dir;
+ QT3DSVec3 theGlobalPos = m_Camera->GetGlobalPos() + m_Camera->m_ClipNear * dir;
+ nearPlane.d = -(dir.dot(theGlobalPos));
+ // the near plane's bbox edges are calculated in the clipping frustum's
+ // constructor.
+ m_ClippingFrustum = SClippingFrustum(m_ViewProjection, nearPlane);
+ } else if (m_ClippingFrustum.hasValue()) {
+ m_ClippingFrustum.setEmpty();
+ }
} else {
m_ViewProjection = QT3DSMat44::createIdentity();
}
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
index 9cb53f8..1eb8766 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplLayerRenderPreparationData.h
@@ -270,7 +270,7 @@ namespace render {
TRenderableObjectList m_RenderedOpaqueObjects;
TRenderableObjectList m_RenderedTransparentObjects;
QT3DSMat44 m_ViewProjection;
- SClippingFrustum m_ClippingFrustum;
+ Option<SClippingFrustum> m_ClippingFrustum;
Option<SLayerRenderPreparationResult> m_LayerPrepResult;
// Widgets drawn at particular times during the rendering process
nvvector<IRenderWidget *> m_IRenderWidgets;