summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/DataModelMetadata/en-us/MetaData.xml3
-rw-r--r--src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp1
-rw-r--r--src/dm/systems/Qt3DSDMComposerTypeDefinitions.h3
-rw-r--r--src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp1
-rw-r--r--src/runtime/Qt3DSAttributeHashes.cpp1
-rw-r--r--src/runtime/Qt3DSAttributeHashes.h1
-rw-r--r--src/runtime/Qt3DSAttributeHashes.txt1
-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
13 files changed, 29 insertions, 14 deletions
diff --git a/res/DataModelMetadata/en-us/MetaData.xml b/res/DataModelMetadata/en-us/MetaData.xml
index 30db5b3..93ad17a 100644
--- a/res/DataModelMetadata/en-us/MetaData.xml
+++ b/res/DataModelMetadata/en-us/MetaData.xml
@@ -203,7 +203,8 @@
<Property name="pivot" formalName="Pivot" type="Vector" category="Basic Properties" description="Offset of the contents away from the local center" />
<!-- Camera Propertiess -->
- <Property name="orthographic" formalName="Orthographic" type="Boolean" category="Camera Properties" description="Remove all perspective from the camera?" />
+ <Property name="orthographic" formalName="Orthographic" type="Boolean" category="Camera Properties" description="Remove all perspective from the camera?" />
+ <Property name="enablefrustumculling" formalName="Enable Frustum Culling" type="Boolean" default="False" category="Camera Properties" description="Remove all items from scene not visible from the camera." />
<Property name="fov" formalName="Field of View" min="1" max="180" default="60" category="Camera Properties" description="Viewing angle of the camera\n(how much it can see)" >
<ShowIfEqual property="orthographic" value="False" />
</Property>
diff --git a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp
index 2bd8941..7aee9b5 100644
--- a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp
+++ b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.cpp
@@ -207,6 +207,7 @@ struct DataConstructor<SObjectRefType>
#define QT3DS_WCHAR_T_shdwmapfov L"shdwmapfov"
#define QT3DS_WCHAR_T_shdwfilter L"shdwfilter"
#define QT3DS_WCHAR_T_orthographic L"orthographic"
+#define QT3DS_WCHAR_T_enablefrustumculling L"enablefrustumculling"
#define QT3DS_WCHAR_T_fov L"fov"
#define QT3DS_WCHAR_T_fovhorizontal L"fovhorizontal"
#define QT3DS_WCHAR_T_clipnear L"clipnear"
diff --git a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h
index 9a075ae..84f08df 100644
--- a/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h
+++ b/src/dm/systems/Qt3DSDMComposerTypeDefinitions.h
@@ -265,7 +265,8 @@ class IPropertySystem;
HANDLE_COMPOSER_PROPERTY_DUPLICATE(controlledproperty, m_ControlledProperty, TDataStrPtr, L"")
#define ITERATE_COMPOSER_CAMERA_PROPERTIES \
- HANDLE_COMPOSER_PROPERTY(orthographic, m_Orthographic, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(orthographic, m_Orthographic, bool, false) \
+ HANDLE_COMPOSER_PROPERTY(enablefrustumculling, m_EnableFrustumCulling, bool, false) \
HANDLE_COMPOSER_PROPERTY(fov, m_Fov, float, 60.f) \
HANDLE_COMPOSER_PROPERTY(fovhorizontal, m_FovHorizontal, bool, false) \
HANDLE_COMPOSER_PROPERTY(clipnear, m_ClipNear, float, 10.f) \
diff --git a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
index b4f5980..f26d3cf 100644
--- a/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
+++ b/src/engine/Qt3DSRenderRuntimeBindingImplTranslation.cpp
@@ -544,6 +544,7 @@ struct SRuntimePropertyParser
#define Camera_ClipFar ATTRIBUTE_CLIPFAR
#define Camera_FOV ATTRIBUTE_FOV
#define Camera_FOVHorizontal ATTRIBUTE_FOVHORIZONTAL
+#define Camera_EnableFrustumCulling ATTRIBUTE_ENABLEFRUSTUMCULLING
#define Camera_Orthographic ATTRIBUTE_ORTHOGRAPHIC
#define Camera_ScaleMode ATTRIBUTE_SCALEMODE
#define Camera_ScaleAnchor ATTRIBUTE_SCALEANCHOR
diff --git a/src/runtime/Qt3DSAttributeHashes.cpp b/src/runtime/Qt3DSAttributeHashes.cpp
index 1daddc1..4e320df 100644
--- a/src/runtime/Qt3DSAttributeHashes.cpp
+++ b/src/runtime/Qt3DSAttributeHashes.cpp
@@ -81,6 +81,7 @@ const char *GetAttributeString(const EAttribute inAttribute)
case ATTRIBUTE_EDGETESS: return "edgetess";
case ATTRIBUTE_INNERTESS: return "innertess";
case ATTRIBUTE_ORTHOGRAPHIC: return "orthographic";
+ case ATTRIBUTE_ENABLEFRUSTUMCULLING: return "enablefrustumculling";
case ATTRIBUTE_CLIPNEAR: return "clipnear";
case ATTRIBUTE_CLIPFAR: return "clipfar";
case ATTRIBUTE_FOV: return "fov";
diff --git a/src/runtime/Qt3DSAttributeHashes.h b/src/runtime/Qt3DSAttributeHashes.h
index 1f712a8..a1cd41f 100644
--- a/src/runtime/Qt3DSAttributeHashes.h
+++ b/src/runtime/Qt3DSAttributeHashes.h
@@ -72,6 +72,7 @@ enum EAttribute {
ATTRIBUTE_EDGETESS = 0x023933D2, // edgetess
ATTRIBUTE_INNERTESS = 0x01529259, // innertess
ATTRIBUTE_ORTHOGRAPHIC = 0x0244BB70, // orthographic
+ ATTRIBUTE_ENABLEFRUSTUMCULLING = 0x01F3E88F, // enablefrustumculling
ATTRIBUTE_CLIPNEAR = 0x0068FF28, // clipnear
ATTRIBUTE_CLIPFAR = 0x037EF699, // clipfar
ATTRIBUTE_FOV = 0x00D60213, // fov
diff --git a/src/runtime/Qt3DSAttributeHashes.txt b/src/runtime/Qt3DSAttributeHashes.txt
index 4168bbd..0cc3e07 100644
--- a/src/runtime/Qt3DSAttributeHashes.txt
+++ b/src/runtime/Qt3DSAttributeHashes.txt
@@ -32,6 +32,7 @@ edgetess
innertess
orthographic
+enablefrustumculling
clipnear
clipfar
fov
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;