summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2017-03-15 10:17:05 +0100
committerPaul Lemire <paul.lemire@kdab.com>2018-02-02 13:58:34 +0000
commit437a33de9336a5c50711e63dd6dfcd86ad28d5a5 (patch)
tree6f6cbf6fa5285a79cda6a849a0b96e744ec840c6
parent46319648436814afb5a77755dde6681e304befaf (diff)
Render: Use SIMD Vectors and Matrices in the backend
Change-Id: I19b3b2f8fcb06eb2bc600ebe370465dd15a8eabc Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r--src/core/resources/qresourcemanager_p.h25
-rw-r--r--src/core/transforms/matrix4x4_p.h12
-rw-r--r--src/core/transforms/vector3d_p.h12
-rw-r--r--src/core/transforms/vector4d_p.h12
-rw-r--r--src/quick3d/quick3dscene2d/items/scene2d.cpp8
-rw-r--r--src/render/aligned_malloc_p.h81
-rw-r--r--src/render/backend/cameralens.cpp22
-rw-r--r--src/render/backend/cameralens_p.h12
-rw-r--r--src/render/backend/entity.cpp4
-rw-r--r--src/render/backend/entity_p.h4
-rw-r--r--src/render/backend/handle_types_p.h5
-rw-r--r--src/render/backend/managers_p.h3
-rw-r--r--src/render/backend/nodemanagers.cpp2
-rw-r--r--src/render/backend/pointsvisitor.cpp4
-rw-r--r--src/render/backend/pointsvisitor_p.h3
-rw-r--r--src/render/backend/renderview.cpp71
-rw-r--r--src/render/backend/renderview_p.h42
-rw-r--r--src/render/backend/renderviewbuilder.cpp2
-rw-r--r--src/render/backend/segmentsvisitor.cpp12
-rw-r--r--src/render/backend/segmentsvisitor_p.h5
-rw-r--r--src/render/backend/transform.cpp6
-rw-r--r--src/render/backend/transform_p.h6
-rw-r--r--src/render/backend/triangleboundingvolume.cpp54
-rw-r--r--src/render/backend/triangleboundingvolume_p.h35
-rw-r--r--src/render/backend/trianglesextractor.cpp2
-rw-r--r--src/render/backend/trianglesextractor_p.h6
-rw-r--r--src/render/backend/trianglesvisitor.cpp26
-rw-r--r--src/render/backend/trianglesvisitor_p.h10
-rw-r--r--src/render/backend/uniform.cpp27
-rw-r--r--src/render/backend/uniform_p.h17
-rw-r--r--src/render/frontend/sphere.cpp48
-rw-r--r--src/render/frontend/sphere_p.h38
-rw-r--r--src/render/jobs/calcboundingvolumejob.cpp24
-rw-r--r--src/render/jobs/frustumcullingjob.cpp12
-rw-r--r--src/render/jobs/frustumcullingjob_p.h11
-rw-r--r--src/render/jobs/pickboundingvolumejob.cpp79
-rw-r--r--src/render/jobs/pickboundingvolumejob_p.h7
-rw-r--r--src/render/jobs/pickboundingvolumeutils.cpp125
-rw-r--r--src/render/jobs/renderviewjobutils_p.h5
-rw-r--r--src/render/jobs/updatelevelofdetailjob.cpp14
-rw-r--r--src/render/jobs/updatelevelofdetailjob_p.h1
-rw-r--r--src/render/jobs/updateworldtransformjob.cpp6
-rw-r--r--src/render/materialsystem/shaderdata.cpp10
-rw-r--r--src/render/materialsystem/shaderdata_p.h10
-rw-r--r--src/render/raycasting/boundingsphere_p.h3
-rw-r--r--src/render/raycasting/qabstractcollisionqueryservice.cpp4
-rw-r--r--src/render/raycasting/qabstractcollisionqueryservice_p.h4
-rw-r--r--src/render/raycasting/qboundingvolume_p.h5
-rw-r--r--src/render/raycasting/qcollisionqueryresult.cpp4
-rw-r--r--src/render/raycasting/qcollisionqueryresult_p.h12
-rw-r--r--src/render/raycasting/qray3d.cpp43
-rw-r--r--src/render/raycasting/qray3d_p.h32
-rw-r--r--src/render/raycasting/qraycastingservice.cpp4
-rw-r--r--src/render/render.pro13
-rw-r--r--tests/auto/core/common/common.pri10
-rw-r--r--tests/auto/core/matrix4x4_avx2/matrix4x4_avx2.pro2
-rw-r--r--tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp3
-rw-r--r--tests/auto/core/vector3d_sse/tst_vector3d_sse.cpp13
-rw-r--r--tests/auto/core/vector4d_sse/tst_vector4d_sse.cpp92
-rw-r--r--tests/auto/render/coordinatereader/tst_coordinatereader.cpp38
-rw-r--r--tests/auto/render/qcamera/tst_qcamera.cpp6
-rw-r--r--tests/auto/render/qray3d/tst_qray3d.cpp312
-rw-r--r--tests/auto/render/raycasting/tst_raycasting.cpp64
-rw-r--r--tests/auto/render/render.pro14
-rw-r--r--tests/auto/render/renderqueue/renderqueue.pro2
-rw-r--r--tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp4
-rw-r--r--tests/auto/render/renderviews/tst_renderviews.cpp17
-rw-r--r--tests/auto/render/renderviewutils/tst_renderviewutils.cpp36
-rw-r--r--tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp56
-rw-r--r--tests/auto/render/transform/tst_transform.cpp6
-rw-r--r--tests/auto/render/triangleboundingvolume/triangleboundingvolume.pro1
-rw-r--r--tests/auto/render/triangleboundingvolume/tst_triangleboundingvolume.cpp140
-rw-r--r--tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp8
-rw-r--r--tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp76
-rw-r--r--tests/auto/render/uniform/tst_uniform.cpp10
-rw-r--r--tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp6
76 files changed, 1161 insertions, 799 deletions
diff --git a/src/core/resources/qresourcemanager_p.h b/src/core/resources/qresourcemanager_p.h
index 038f3d551..e620b40d1 100644
--- a/src/core/resources/qresourcemanager_p.h
+++ b/src/core/resources/qresourcemanager_p.h
@@ -60,6 +60,8 @@
#include <limits>
#include <Qt3DCore/private/qhandle_p.h>
+#include <QtCore/private/qsimd_p.h>
+#include <Qt3DCore/private/qt3dcore-config_p.h>
// Silence complaints about unreferenced local variables in
// ArrayAllocatingPolicy::deallocateBuckets() when the compiler
@@ -313,7 +315,17 @@ private:
void allocateBucket()
{
// no free handle, allocate a new
- Bucket *b = new Bucket;
+ Bucket *b = nullptr;
+ // allocate aligned memory
+#if QT_CONFIG(qt3d_simd_avx2) && defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_AVX2)
+ b = static_cast<Bucket*>(_mm_malloc(sizeof(Bucket), 32));
+#elif QT_CONFIG(qt3d_simd_sse2) && defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSE2)
+ b = static_cast<Bucket*>(_mm_malloc(sizeof(Bucket), 16));
+#else
+ b = static_cast<Bucket*>(malloc(sizeof(Bucket)));
+#endif
+ // placement new
+ new (b) Bucket;
b->header.next = firstBucket;
firstBucket = b;
@@ -329,7 +341,16 @@ private:
Bucket *b = firstBucket;
while (b) {
Bucket *n = b->header.next;
- delete b;
+ // Call dtor explicitly
+ b->~Bucket();
+ // Release aligned memory
+#if QT_CONFIG(qt3d_simd_avx2) && defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_AVX2)
+ _mm_free(b);
+#elif QT_CONFIG(qt3d_simd_sse2) && defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSE2)
+ _mm_free(b);
+#else
+ free(b);
+#endif
b = n;
}
}
diff --git a/src/core/transforms/matrix4x4_p.h b/src/core/transforms/matrix4x4_p.h
index 18f5db4c3..d100d3d3b 100644
--- a/src/core/transforms/matrix4x4_p.h
+++ b/src/core/transforms/matrix4x4_p.h
@@ -83,4 +83,16 @@ QT_END_NAMESPACE
#endif
+template<typename UsingType>
+Q_ALWAYS_INLINE QMatrix4x4 convertToQMatrix4x4(const UsingType &v)
+{
+ return v.toQMatrix4x4();
+}
+
+template<>
+Q_ALWAYS_INLINE QMatrix4x4 convertToQMatrix4x4<QMatrix4x4>(const QMatrix4x4 &v)
+{
+ return v;
+}
+
#endif // QT3DCORE_MATRIX4X4_P_H
diff --git a/src/core/transforms/vector3d_p.h b/src/core/transforms/vector3d_p.h
index 6467d7686..80e936903 100644
--- a/src/core/transforms/vector3d_p.h
+++ b/src/core/transforms/vector3d_p.h
@@ -74,4 +74,16 @@ QT_END_NAMESPACE
#endif
+template<typename UsingType>
+Q_ALWAYS_INLINE QVector3D convertToQVector3D(const UsingType &v)
+{
+ return v.toQVector3D();
+}
+
+template<>
+Q_ALWAYS_INLINE QVector3D convertToQVector3D<QVector3D>(const QVector3D &v)
+{
+ return v;
+}
+
#endif // QT3DCORE_VECTOR3D_P_H
diff --git a/src/core/transforms/vector4d_p.h b/src/core/transforms/vector4d_p.h
index a03dc234f..dbfaffffd 100644
--- a/src/core/transforms/vector4d_p.h
+++ b/src/core/transforms/vector4d_p.h
@@ -74,4 +74,16 @@ QT_END_NAMESPACE
#endif
+template<typename UsingType>
+Q_ALWAYS_INLINE QVector4D convertToQVector4D(const UsingType &v)
+{
+ return v.toQVector4D();
+}
+
+template<>
+Q_ALWAYS_INLINE QVector4D convertToQVector4D<QVector4D>(const QVector4D &v)
+{
+ return v;
+}
+
#endif // QT3DCORE_VECTOR4D_P_H
diff --git a/src/quick3d/quick3dscene2d/items/scene2d.cpp b/src/quick3d/quick3dscene2d/items/scene2d.cpp
index 4abc7cf42..67bb1a671 100644
--- a/src/quick3d/quick3dscene2d/items/scene2d.cpp
+++ b/src/quick3d/quick3dscene2d/items/scene2d.cpp
@@ -466,10 +466,10 @@ void Scene2D::handlePickEvent(int type, const Qt3DRender::QPickEventPtr &ev)
CoordinateReader reader(renderer()->nodeManagers());
if (reader.setGeometry(entity->renderComponent<GeometryRenderer>(),
QAttribute::defaultTextureCoordinateAttributeName())) {
- QVector4D c0 = reader.getCoordinate(pickTriangle->vertex1Index());
- QVector4D c1 = reader.getCoordinate(pickTriangle->vertex2Index());
- QVector4D c2 = reader.getCoordinate(pickTriangle->vertex3Index());
- QVector4D ci = c0 * pickTriangle->uvw().x()
+ Vector4D c0 = reader.getCoordinate(pickTriangle->vertex1Index());
+ Vector4D c1 = reader.getCoordinate(pickTriangle->vertex2Index());
+ Vector4D c2 = reader.getCoordinate(pickTriangle->vertex3Index());
+ Vector4D ci = c0 * pickTriangle->uvw().x()
+ c1 * pickTriangle->uvw().y() + c2 * pickTriangle->uvw().z();
ci.setW(1.0f);
diff --git a/src/render/aligned_malloc_p.h b/src/render/aligned_malloc_p.h
new file mode 100644
index 000000000..a2a619b03
--- /dev/null
+++ b/src/render/aligned_malloc_p.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QT3DRENDER_RENDER_ALIGNED_MALLOC_P_H
+#define QT3DRENDER_RENDER_ALIGNED_MALLOC_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qsimd_p.h>
+#include <Qt3DCore/private/qt3dcore-config_p.h>
+
+#if QT_CONFIG(qt3d_simd_avx2) && defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_AVX2)
+# define QT3D_ALIGNED_MALLOC(s) _mm_malloc(s, 32)
+#elif QT_CONFIG(qt3d_simd_sse2) && defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSE2)
+# define QT3D_ALIGNED_MALLOC(s) _mm_malloc(s, 16)
+#else
+ #define QT3D_ALIGNED_MALLOC(s) malloc(s)
+#endif
+
+#if (QT_CONFIG(qt3d_simd_avx2) && defined(__AVX2__) && defined(QT_COMPILER_SUPPORTS_AVX2)) || (QT_CONFIG(qt3d_simd_sse2) && defined(__SSE2__) && defined(QT_COMPILER_SUPPORTS_SSE2))
+# define QT3D_ALIGNED_FREE(ptr) _mm_free(ptr)
+#else
+# define QT3D_ALIGNED_FREE(ptr) free(ptr)
+#endif
+
+#define QT3D_ALIGNED_MALLOC_AND_FREE() \
+ static void *operator new(size_t s) \
+ { \
+ return QT3D_ALIGNED_MALLOC(s); \
+ } \
+ static void operator delete(void *ptr) \
+ { \
+ QT3D_ALIGNED_FREE(ptr); \
+ }
+
+#endif // QT3DRENDER_RENDER_ALIGNED_MALLOC_P_H
diff --git a/src/render/backend/cameralens.cpp b/src/render/backend/cameralens.cpp
index e127b5885..b540b24c8 100644
--- a/src/render/backend/cameralens.cpp
+++ b/src/render/backend/cameralens.cpp
@@ -105,23 +105,25 @@ void CameraLens::setRenderAspect(QRenderAspect *renderAspect)
m_renderAspect = renderAspect;
}
-QMatrix4x4 CameraLens::viewMatrix(const QMatrix4x4 &worldTransform)
+Matrix4x4 CameraLens::viewMatrix(const Matrix4x4 &worldTransform)
{
- const QVector4D position = worldTransform * QVector4D(0.0f, 0.0f, 0.0f, 1.0f);
+ const Vector4D position = worldTransform * Vector4D(0.0f, 0.0f, 0.0f, 1.0f);
// OpenGL convention is looking down -Z
- const QVector4D viewDirection = worldTransform * QVector4D(0.0f, 0.0f, -1.0f, 0.0f);
- const QVector4D upVector = worldTransform * QVector4D(0.0f, 1.0f, 0.0f, 0.0f);
+ const Vector4D viewDirection = worldTransform * Vector4D(0.0f, 0.0f, -1.0f, 0.0f);
+ const Vector4D upVector = worldTransform * Vector4D(0.0f, 1.0f, 0.0f, 0.0f);
QMatrix4x4 m;
- m.lookAt(position.toVector3D(), (position + viewDirection).toVector3D(), upVector.toVector3D());
- return m;
+ m.lookAt(convertToQVector3D(Vector3D(position)),
+ convertToQVector3D(Vector3D(position + viewDirection)),
+ convertToQVector3D(Vector3D(upVector)));
+ return Matrix4x4(m);
}
void CameraLens::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
{
const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QCameraLensData>>(change);
const auto &data = typedChange->data;
- m_projection = data.projectionMatrix;
+ m_projection = Matrix4x4(data.projectionMatrix);
m_exposure = data.exposure;
}
@@ -160,7 +162,7 @@ void CameraLens::notifySceneBoundingVolume(const Sphere &sphere, QNodeCommand::C
}
}
-void CameraLens::setProjection(const QMatrix4x4 &projection)
+void CameraLens::setProjection(const Matrix4x4 &projection)
{
m_projection = projection;
}
@@ -178,7 +180,7 @@ void CameraLens::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
if (propertyChange->propertyName() == QByteArrayLiteral("projectionMatrix")) {
QMatrix4x4 projectionMatrix = propertyChange->value().value<QMatrix4x4>();
- m_projection = projectionMatrix;
+ m_projection = Matrix4x4(projectionMatrix);
} else if (propertyChange->propertyName() == QByteArrayLiteral("exposure")) {
setExposure(propertyChange->value().toFloat());
}
@@ -212,7 +214,7 @@ void CameraLens::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
}
bool CameraLens::viewMatrixForCamera(EntityManager* manager, Qt3DCore::QNodeId cameraId,
- QMatrix4x4 &viewMatrix, QMatrix4x4 &projectionMatrix)
+ Matrix4x4 &viewMatrix, Matrix4x4 &projectionMatrix)
{
Entity *camNode = manager->lookupResource(cameraId);
if (!camNode)
diff --git a/src/render/backend/cameralens_p.h b/src/render/backend/cameralens_p.h
index 1afeeda24..a177c258c 100644
--- a/src/render/backend/cameralens_p.h
+++ b/src/render/backend/cameralens_p.h
@@ -53,7 +53,7 @@
#include <Qt3DRender/private/backendnode_p.h>
#include <Qt3DCore/private/qnodecommand_p.h>
-#include <QMatrix4x4>
+#include <Qt3DCore/private/matrix4x4_p.h>
#include <QRectF>
QT_BEGIN_NAMESPACE
@@ -89,10 +89,10 @@ public:
void setRenderAspect(QRenderAspect* renderAspect);
- QMatrix4x4 viewMatrix(const QMatrix4x4 &worldTransform);
+ Matrix4x4 viewMatrix(const Matrix4x4 &worldTransform);
- void setProjection(const QMatrix4x4 &projection);
- inline QMatrix4x4 projection() const { return m_projection; }
+ void setProjection(const Matrix4x4 &projection);
+ inline Matrix4x4 projection() const { return m_projection; }
void setExposure(float exposure);
inline float exposure() const { return m_exposure; }
@@ -101,7 +101,7 @@ public:
void notifySceneBoundingVolume(const Sphere &sphere, Qt3DCore::QNodeCommand::CommandId commandId);
static bool viewMatrixForCamera(EntityManager *manager, Qt3DCore::QNodeId cameraId,
- QMatrix4x4 &viewMatrix, QMatrix4x4 &projectionMatrix);
+ Matrix4x4 &viewMatrix, Matrix4x4 &projectionMatrix);
private:
void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL;
@@ -110,8 +110,8 @@ private:
Qt3DCore::QNodeCommand::CommandId commandId);
QRenderAspect *m_renderAspect;
- QMatrix4x4 m_projection;
Qt3DCore::QNodeCommand::CommandId m_pendingViewAllCommand;
+ Matrix4x4 m_projection;
float m_exposure;
};
diff --git a/src/render/backend/entity.cpp b/src/render/backend/entity.cpp
index 914ac2ec3..a0f4bcb97 100644
--- a/src/render/backend/entity.cpp
+++ b/src/render/backend/entity.cpp
@@ -287,12 +287,12 @@ QVector<Entity *> Entity::children() const
return childrenVector;
}
-QMatrix4x4 *Entity::worldTransform()
+Matrix4x4 *Entity::worldTransform()
{
return m_nodeManagers->worldMatrixManager()->data(m_worldTransform);
}
-const QMatrix4x4 *Entity::worldTransform() const
+const Matrix4x4 *Entity::worldTransform() const
{
return m_nodeManagers->worldMatrixManager()->data(m_worldTransform);
}
diff --git a/src/render/backend/entity_p.h b/src/render/backend/entity_p.h
index d2227965d..12eec98f6 100644
--- a/src/render/backend/entity_p.h
+++ b/src/render/backend/entity_p.h
@@ -104,8 +104,8 @@ public:
QVector<Entity *> children() const;
bool hasChildren() const { return !m_childrenHandles.empty(); }
- QMatrix4x4 *worldTransform();
- const QMatrix4x4 *worldTransform() const;
+ Matrix4x4 *worldTransform();
+ const Matrix4x4 *worldTransform() const;
Sphere *localBoundingVolume() const { return m_localBoundingVolume.data(); }
Sphere *worldBoundingVolume() const { return m_worldBoundingVolume.data(); }
Sphere *worldBoundingVolumeWithChildren() const { return m_worldBoundingVolumeWithChildren.data(); }
diff --git a/src/render/backend/handle_types_p.h b/src/render/backend/handle_types_p.h
index 4062aadeb..26b1cec88 100644
--- a/src/render/backend/handle_types_p.h
+++ b/src/render/backend/handle_types_p.h
@@ -53,11 +53,10 @@
#include <Qt3DRender/qt3drender_global.h>
#include <Qt3DCore/private/qhandle_p.h>
+#include <Qt3DCore/private/matrix4x4_p.h>
QT_BEGIN_NAMESPACE
-class QMatrix4x4;
-
namespace Qt3DRender {
class QTextureImageData;
@@ -108,7 +107,7 @@ typedef Qt3DCore::QHandle<FrameGraphNode *> HFrameGraphNode;
typedef Qt3DCore::QHandle<Layer> HLayer;
typedef Qt3DCore::QHandle<LevelOfDetail> HLevelOfDetail;
typedef Qt3DCore::QHandle<Material> HMaterial;
-typedef Qt3DCore::QHandle<QMatrix4x4> HMatrix;
+typedef Qt3DCore::QHandle<Matrix4x4> HMatrix;
typedef Qt3DCore::QHandle<OpenGLVertexArrayObject> HVao;
typedef Qt3DCore::QHandle<Shader> HShader;
typedef Qt3DCore::QHandle<ShaderBuilder> HShaderBuilder;
diff --git a/src/render/backend/managers_p.h b/src/render/backend/managers_p.h
index b811057cb..8a33b1122 100644
--- a/src/render/backend/managers_p.h
+++ b/src/render/backend/managers_p.h
@@ -52,6 +52,7 @@
//
#include <Qt3DCore/private/qresourcemanager_p.h>
+#include <Qt3DCore/private/matrix4x4_p.h>
#include <Qt3DRender/private/rendertargetoutput_p.h>
#include <Qt3DRender/private/cameralens_p.h>
#include <Qt3DRender/private/filterkey_p.h>
@@ -188,7 +189,7 @@ public:
};
class MatrixManager : public Qt3DCore::QResourceManager<
- QMatrix4x4,
+ Matrix4x4,
Qt3DCore::QNodeId,
Qt3DCore::NonLockingPolicy>
{
diff --git a/src/render/backend/nodemanagers.cpp b/src/render/backend/nodemanagers.cpp
index f5de64dae..b42b7fc96 100644
--- a/src/render/backend/nodemanagers.cpp
+++ b/src/render/backend/nodemanagers.cpp
@@ -172,7 +172,7 @@ MaterialManager *NodeManagers::manager<Material>() const Q_DECL_NOTHROW
}
template<>
-MatrixManager *NodeManagers::manager<QMatrix4x4*>() const Q_DECL_NOTHROW
+MatrixManager *NodeManagers::manager<Matrix4x4>() const Q_DECL_NOTHROW
{
return m_worldMatrixManager;
}
diff --git a/src/render/backend/pointsvisitor.cpp b/src/render/backend/pointsvisitor.cpp
index 663488357..750182b19 100644
--- a/src/render/backend/pointsvisitor.cpp
+++ b/src/render/backend/pointsvisitor.cpp
@@ -72,7 +72,7 @@ void traverseCoordinatesIndexed(Index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx;
- QVector3D abc;
+ Vector3D abc;
while (i < indexInfo.count) {
ndx = indices[i];
const uint idx = ndx * verticesStride;
@@ -94,7 +94,7 @@ void traverseCoordinates(Vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx = 0;
- QVector3D abc;
+ Vector3D abc;
while (ndx < vertexInfo.count) {
const uint idx = ndx * verticesStride;
for (uint j = 0; j < maxVerticesDataSize; ++j)
diff --git a/src/render/backend/pointsvisitor_p.h b/src/render/backend/pointsvisitor_p.h
index 9d44ffec5..1614f185b 100644
--- a/src/render/backend/pointsvisitor_p.h
+++ b/src/render/backend/pointsvisitor_p.h
@@ -52,6 +52,7 @@
//
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/vector3d_p.h>
QT_BEGIN_NAMESPACE
@@ -75,7 +76,7 @@ public:
void apply(const Qt3DCore::QEntity *entity);
void apply(const GeometryRenderer *renderer, const Qt3DCore::QNodeId id);
- virtual void visit(uint ndx, const QVector3D &c) = 0;
+ virtual void visit(uint ndx, const Vector3D &c) = 0;
protected:
NodeManagers *m_manager;
diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp
index 995d63f3c..da3d551e6 100644
--- a/src/render/backend/renderview.cpp
+++ b/src/render/backend/renderview.cpp
@@ -148,16 +148,16 @@ static QRectF resolveViewport(const QRectF &fractionalViewport, const QSize &sur
fractionalViewport.height() * surfaceSize.height());
}
-static QMatrix4x4 getProjectionMatrix(const CameraLens *lens)
+static Matrix4x4 getProjectionMatrix(const CameraLens *lens)
{
if (!lens)
qWarning() << "[Qt3D Renderer] No Camera Lens found. Add a CameraSelector to your Frame Graph or make sure that no entities will be rendered.";
- return lens ? lens->projection() : QMatrix4x4();
+ return lens ? lens->projection() : Matrix4x4();
}
UniformValue RenderView::standardUniformValue(RenderView::StandardUniform standardUniformType,
Entity *entity,
- const QMatrix4x4 &model) const
+ const Matrix4x4 &model) const
{
switch (standardUniformType) {
case ModelMatrix:
@@ -182,24 +182,26 @@ UniformValue RenderView::standardUniformValue(RenderView::StandardUniform standa
case InverseModelViewMatrix:
return UniformValue((m_data.m_viewMatrix * model).inverted());
case InverseViewProjectionMatrix: {
- const QMatrix4x4 viewProjectionMatrix = getProjectionMatrix(m_data.m_renderCameraLens) * m_data.m_viewMatrix;
+ const Matrix4x4 viewProjectionMatrix = getProjectionMatrix(m_data.m_renderCameraLens) * m_data.m_viewMatrix;
return UniformValue(viewProjectionMatrix.inverted());
}
case InverseModelViewProjectionMatrix:
- return UniformValue((m_data.m_viewProjectionMatrix * model).inverted(0));
+ return UniformValue((m_data.m_viewProjectionMatrix * model).inverted());
case ModelNormalMatrix:
- return UniformValue(model.normalMatrix());
+ return UniformValue(convertToQMatrix4x4(model).normalMatrix());
case ModelViewNormalMatrix:
- return UniformValue((m_data.m_viewMatrix * model).normalMatrix());
+ return UniformValue(convertToQMatrix4x4(m_data.m_viewMatrix * model).normalMatrix());
case ViewportMatrix: {
QMatrix4x4 viewportMatrix;
+ // TO DO: Implement on Matrix4x4
viewportMatrix.viewport(resolveViewport(m_viewport, m_surfaceSize));
- return UniformValue(viewportMatrix);
+ return UniformValue(Matrix4x4(viewportMatrix));
}
case InverseViewportMatrix: {
QMatrix4x4 viewportMatrix;
+ // TO DO: Implement on Matrix4x4
viewportMatrix.viewport(resolveViewport(m_viewport, m_surfaceSize));
- return UniformValue(viewportMatrix.inverted());
+ return UniformValue(Matrix4x4(viewportMatrix.inverted()));
}
case AspectRatio:
return float(m_surfaceSize.width()) / float(m_surfaceSize.height());
@@ -494,20 +496,6 @@ void RenderView::setRenderer(Renderer *renderer)
m_manager = renderer->nodeManagers();
}
-class LightSourceCompare
-{
-public:
- LightSourceCompare(Entity *node) { p = node->worldBoundingVolume()->center(); }
- bool operator()(const LightSource &a, const LightSource &b) const {
- const float distA = p.distanceToPoint(a.entity->worldBoundingVolume()->center());
- const float distB = p.distanceToPoint(b.entity->worldBoundingVolume()->center());
- return distA < distB;
- }
-
-private:
- QVector3D p;
-};
-
void RenderView::addClearBuffers(const ClearBuffers *cb) {
QClearBuffers::BufferTypeFlags type = cb->type();
@@ -579,7 +567,7 @@ QVector<RenderCommand *> RenderView::buildDrawRenderCommands(const QVector<Entit
// Project the camera-to-object-center vector onto the camera
// view vector. This gives a depth value suitable as the key
// for BackToFront sorting.
- command->m_depth = QVector3D::dotProduct(entity->worldBoundingVolume()->center() - m_data.m_eyePos, m_data.m_eyeViewDir);
+ command->m_depth = Vector3D::dotProduct(entity->worldBoundingVolume()->center() - m_data.m_eyePos, m_data.m_eyeViewDir);
command->m_geometry = geometryHandle;
command->m_geometryRenderer = geometryRendererHandle;
@@ -605,8 +593,15 @@ QVector<RenderCommand *> RenderView::buildDrawRenderCommands(const QVector<Entit
// Replace with more sophisticated mechanisms later.
// Copy vector so that we can sort it concurrently and we only want to sort the one for the current command
QVector<LightSource> lightSources = m_lightSources;
- if (lightSources.size() > 1)
- std::sort(lightSources.begin(), lightSources.end(), LightSourceCompare(entity));
+ if (lightSources.size() > 1) {
+ const Vector3D entityCenter = entity->worldBoundingVolume()->center();
+ std::sort(lightSources.begin(), lightSources.end(),
+ [&] (const LightSource &a, const LightSource &b) {
+ const float distA = entityCenter.distanceToPoint(a.entity->worldBoundingVolume()->center());
+ const float distB = entityCenter.distanceToPoint(b.entity->worldBoundingVolume()->center());
+ return distA < distB;
+ });
+ }
ParameterInfoList globalParameters = passData.parameterInfo;
// setShaderAndUniforms can initialize a localData
@@ -733,21 +728,21 @@ QVector<RenderCommand *> RenderView::buildComputeRenderCommands(const QVector<En
void RenderView::updateMatrices()
{
if (m_data.m_renderCameraNode && m_data.m_renderCameraLens && m_data.m_renderCameraLens->isEnabled()) {
- const QMatrix4x4 cameraWorld = *(m_data.m_renderCameraNode->worldTransform());
+ const Matrix4x4 cameraWorld = *(m_data.m_renderCameraNode->worldTransform());
setViewMatrix(m_data.m_renderCameraLens->viewMatrix(cameraWorld));
setViewProjectionMatrix(m_data.m_renderCameraLens->projection() * viewMatrix());
//To get the eyePosition of the camera, we need to use the inverse of the
//camera's worldTransform matrix.
- const QMatrix4x4 inverseWorldTransform = viewMatrix().inverted();
- const QVector3D eyePosition(inverseWorldTransform.column(3));
+ const Matrix4x4 inverseWorldTransform = viewMatrix().inverted();
+ const Vector3D eyePosition(inverseWorldTransform.column(3));
setEyePosition(eyePosition);
// Get the viewing direction of the camera. Use the normal matrix to
// ensure non-uniform scale works too.
- QMatrix3x3 normalMat = m_data.m_viewMatrix.normalMatrix();
+ const QMatrix3x3 normalMat = convertToQMatrix4x4(m_data.m_viewMatrix).normalMatrix();
// dir = normalize(QVector3D(0, 0, -1) * normalMat)
- setEyeViewDirection(QVector3D(-normalMat(2, 0), -normalMat(2, 1), -normalMat(2, 2)).normalized());
+ setEyeViewDirection(Vector3D(-normalMat(2, 0), -normalMat(2, 1), -normalMat(2, 2)).normalized());
}
}
@@ -775,7 +770,7 @@ void RenderView::setStandardUniformValue(ShaderParameterPack &uniformPack,
int glslNameId,
int nameId,
Entity *entity,
- const QMatrix4x4 &worldTransform) const
+ const Matrix4x4 &worldTransform) const
{
uniformPack.setUniform(glslNameId, standardUniformValue(ms_standardUniformSetters[nameId], entity, worldTransform));
}
@@ -960,7 +955,7 @@ void RenderView::setShaderAndUniforms(RenderCommand *command,
!shaderStorageBlockNamesIds.isEmpty() || !attributeNamesIds.isEmpty()) {
// Set default standard uniforms without bindings
- QMatrix4x4 worldTransform = *(entity->worldTransform());
+ const Matrix4x4 worldTransform = *(entity->worldTransform());
for (const int uniformNameId : uniformNamesIds) {
if (ms_standardUniformSetters.contains(uniformNameId))
setStandardUniformValue(command->m_parameterPack, uniformNameId, uniformNameId, entity, worldTransform);
@@ -1006,7 +1001,7 @@ void RenderView::setShaderAndUniforms(RenderCommand *command,
if (lightIdx == MAX_LIGHTS)
break;
Entity *lightEntity = lightSource.entity;
- const QVector3D worldPos = lightEntity->worldBoundingVolume()->center();
+ const Vector3D worldPos = lightEntity->worldBoundingVolume()->center();
for (Light *light : lightSource.lights) {
if (!light->isEnabled())
continue;
@@ -1021,13 +1016,13 @@ void RenderView::setShaderAndUniforms(RenderCommand *command,
// Note: implicit conversion of values to UniformValue
setUniformValue(command->m_parameterPack, LIGHT_POSITION_NAMES[lightIdx], worldPos);
setUniformValue(command->m_parameterPack, LIGHT_TYPE_NAMES[lightIdx], int(QAbstractLight::PointLight));
- setUniformValue(command->m_parameterPack, LIGHT_COLOR_NAMES[lightIdx], QVector3D(1.0f, 1.0f, 1.0f));
+ setUniformValue(command->m_parameterPack, LIGHT_COLOR_NAMES[lightIdx], Vector3D(1.0f, 1.0f, 1.0f));
setUniformValue(command->m_parameterPack, LIGHT_INTENSITY_NAMES[lightIdx], 0.5f);
// There is no risk in doing that even if multithreaded
// since we are sure that a shaderData is unique for a given light
// and won't ever be referenced as a Component either
- QMatrix4x4 *worldTransform = lightEntity->worldTransform();
+ Matrix4x4 *worldTransform = lightEntity->worldTransform();
if (worldTransform)
shaderData->updateWorldTransform(*worldTransform);
@@ -1042,9 +1037,9 @@ void RenderView::setShaderAndUniforms(RenderCommand *command,
// If no active light sources and no environment light, add a default light
if (activeLightSources.isEmpty() && !environmentLight) {
// Note: implicit conversion of values to UniformValue
- setUniformValue(command->m_parameterPack, LIGHT_POSITION_NAMES[0], QVector3D(10.0f, 10.0f, 0.0f));
+ setUniformValue(command->m_parameterPack, LIGHT_POSITION_NAMES[0], Vector3D(10.0f, 10.0f, 0.0f));
setUniformValue(command->m_parameterPack, LIGHT_TYPE_NAMES[0], int(QAbstractLight::PointLight));
- setUniformValue(command->m_parameterPack, LIGHT_COLOR_NAMES[0], QVector3D(1.0f, 1.0f, 1.0f));
+ setUniformValue(command->m_parameterPack, LIGHT_COLOR_NAMES[0], Vector3D(1.0f, 1.0f, 1.0f));
setUniformValue(command->m_parameterPack, LIGHT_INTENSITY_NAMES[0], 0.5f);
}
diff --git a/src/render/backend/renderview_p.h b/src/render/backend/renderview_p.h
index 21d25a528..4c8acfe96 100644
--- a/src/render/backend/renderview_p.h
+++ b/src/render/backend/renderview_p.h
@@ -67,6 +67,7 @@
#include <Qt3DRender/private/qblitframebuffer_p.h>
#include <Qt3DCore/private/qframeallocator_p.h>
+#include <Qt3DRender/private/aligned_malloc_p.h>
// TODO: Move out once this is all refactored
#include <Qt3DRender/private/renderviewjobutils_p.h>
@@ -98,14 +99,14 @@ typedef QPair<QString, ActivePropertyContent > ActiveProperty;
struct Q_AUTOTEST_EXPORT Plane
{
- explicit Plane(const QVector4D &planeEquation)
+ explicit Plane(const Vector4D &planeEquation)
: planeEquation(planeEquation)
- , normal(planeEquation.toVector3D().normalized())
- , d(planeEquation.w() / planeEquation.toVector3D().length())
+ , normal(Vector3D(planeEquation).normalized())
+ , d(planeEquation.w() / Vector3D(planeEquation).length())
{}
- const QVector4D planeEquation;
- const QVector3D normal;
+ const Vector4D planeEquation;
+ const Vector3D normal;
const float d;
};
@@ -136,6 +137,8 @@ public:
RenderView();
~RenderView();
+ QT3D_ALIGNED_MALLOC_AND_FREE()
+
// TODO: Add a way to specify a sort predicate for the RenderCommands
void sort();
@@ -153,17 +156,17 @@ public:
inline void setRenderCameraEntity(Entity *renderCameraNode) Q_DECL_NOTHROW { m_data.m_renderCameraNode = renderCameraNode; }
inline Entity *renderCameraEntity() const Q_DECL_NOTHROW { return m_data.m_renderCameraNode; }
- inline void setViewMatrix(const QMatrix4x4 &viewMatrix) Q_DECL_NOTHROW { m_data.m_viewMatrix = viewMatrix; }
- inline QMatrix4x4 viewMatrix() const Q_DECL_NOTHROW { return m_data.m_viewMatrix; }
+ inline void setViewMatrix(const Matrix4x4 &viewMatrix) Q_DECL_NOTHROW { m_data.m_viewMatrix = viewMatrix; }
+ inline Matrix4x4 viewMatrix() const Q_DECL_NOTHROW { return m_data.m_viewMatrix; }
- inline void setViewProjectionMatrix(const QMatrix4x4 &viewProjectionMatrix) Q_DECL_NOTHROW { m_data.m_viewProjectionMatrix = viewProjectionMatrix; }
- inline QMatrix4x4 viewProjectionMatrix() const Q_DECL_NOTHROW { return m_data.m_viewProjectionMatrix; }
+ inline void setViewProjectionMatrix(const Matrix4x4 &viewProjectionMatrix) Q_DECL_NOTHROW { m_data.m_viewProjectionMatrix = viewProjectionMatrix; }
+ inline Matrix4x4 viewProjectionMatrix() const Q_DECL_NOTHROW { return m_data.m_viewProjectionMatrix; }
- inline void setEyePosition(const QVector3D &eyePos) Q_DECL_NOTHROW { m_data.m_eyePos = eyePos; }
- inline QVector3D eyePosition() const Q_DECL_NOTHROW { return m_data.m_eyePos; }
+ inline void setEyePosition(const Vector3D &eyePos) Q_DECL_NOTHROW { m_data.m_eyePos = eyePos; }
+ inline Vector3D eyePosition() const Q_DECL_NOTHROW { return m_data.m_eyePos; }
- inline void setEyeViewDirection(const QVector3D &dir) Q_DECL_NOTHROW { m_data.m_eyeViewDir = dir; }
- inline QVector3D eyeViewDirection() const Q_DECL_NOTHROW { return m_data.m_eyeViewDir; }
+ inline void setEyeViewDirection(const Vector3D &dir) Q_DECL_NOTHROW { m_data.m_eyeViewDir = dir; }
+ inline Vector3D eyeViewDirection() const Q_DECL_NOTHROW { return m_data.m_eyeViewDir; }
inline void appendLayerFilter(const Qt3DCore::QNodeId layerFilterId) Q_DECL_NOTHROW { m_data.m_layerFilterIds.push_back(layerFilterId); }
inline Qt3DCore::QNodeIdVector layerFilters() const Q_DECL_NOTHROW { return m_data.m_layerFilterIds; }
@@ -260,12 +263,12 @@ public:
Entity *m_renderCameraNode;
const TechniqueFilter *m_techniqueFilter;
const RenderPassFilter *m_passFilter;
- QMatrix4x4 m_viewMatrix;
- QMatrix4x4 m_viewProjectionMatrix;
+ Matrix4x4 m_viewMatrix;
+ Matrix4x4 m_viewProjectionMatrix;
Qt3DCore::QNodeIdVector m_layerFilterIds;
QVector<Qt3DRender::QSortPolicy::SortType> m_sortingTypes;
- QVector3D m_eyePos;
- QVector3D m_eyeViewDir;
+ Vector3D m_eyePos;
+ Vector3D m_eyeViewDir;
Qt3DCore::QNodeIdVector m_proximityFilterIds;
};
@@ -285,7 +288,6 @@ private:
Entity *entity,
const QVector<LightSource> &activeLightSources,
EnvironmentLight *environmentLight) const;
-
mutable QThreadStorage<UniformBlockValueBuilder*> m_localData;
Qt3DCore::QNodeId m_renderCaptureNodeId;
@@ -360,14 +362,14 @@ private:
UniformValue standardUniformValue(StandardUniform standardUniformType,
Entity *entity,
- const QMatrix4x4 &model) const;
+ const Matrix4x4 &model) const;
void setUniformValue(ShaderParameterPack &uniformPack, int nameId, const UniformValue &value) const;
void setStandardUniformValue(ShaderParameterPack &uniformPack,
int glslNameId,
int nameId,
Entity *entity,
- const QMatrix4x4 &worldTransform) const;
+ const Matrix4x4 &worldTransform) const;
void setUniformBlockValue(ShaderParameterPack &uniformPack,
Shader *shader,
const ShaderUniformBlock &block,
diff --git a/src/render/backend/renderviewbuilder.cpp b/src/render/backend/renderviewbuilder.cpp
index ce5a63565..47ef6cb03 100644
--- a/src/render/backend/renderviewbuilder.cpp
+++ b/src/render/backend/renderviewbuilder.cpp
@@ -334,7 +334,7 @@ RenderViewBuilder::RenderViewBuilder(Render::FrameGraphNode *leafNode, int rende
, m_lightGathererJob(Render::LightGathererPtr::create())
, m_renderableEntityFilterJob(RenderableEntityFilterPtr::create())
, m_computableEntityFilterJob(ComputableEntityFilterPtr::create())
- , m_frustumCullingJob(Render::FrustumCullingJobPtr::create())
+ , m_frustumCullingJob(new Render::FrustumCullingJob())
, m_syncFrustumCullingJob(SynchronizerJobPtr::create(SyncFrustumCulling(m_renderViewJob, m_frustumCullingJob), JobTypes::SyncFrustumCulling))
, m_setClearDrawBufferIndexJob(SynchronizerJobPtr::create(SetClearDrawBufferIndex(m_renderViewJob), JobTypes::ClearBufferDrawIndex))
, m_syncFilterEntityByLayerJob()
diff --git a/src/render/backend/segmentsvisitor.cpp b/src/render/backend/segmentsvisitor.cpp
index 96e2b3b6c..a3a5d059c 100644
--- a/src/render/backend/segmentsvisitor.cpp
+++ b/src/render/backend/segmentsvisitor.cpp
@@ -86,7 +86,7 @@ void traverseSegmentsIndexed(Index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
while (i < indexInfo.count) {
for (uint u = 0; u < 2; ++u) {
ndx[u] = indices[i + u];
@@ -112,7 +112,7 @@ void traverseSegments(Vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
while (i < vertexInfo.count) {
for (uint u = 0; u < 2; ++u) {
ndx[u] = (i + u);
@@ -139,7 +139,7 @@ void traverseSegmentStripIndexed(Index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
ndx[0] = indices[0];
uint idx = ndx[0] * verticesStride;
for (uint j = 0; j < maxVerticesDataSize; ++j)
@@ -180,7 +180,7 @@ void traverseSegmentStrip(Vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
ndx[0] = i;
uint idx = ndx[0] * verticesStride;
for (uint j = 0; j < maxVerticesDataSize; ++j)
@@ -218,7 +218,7 @@ void traverseSegmentAdjacencyIndexed(Index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
while (i < n) {
for (uint u = 0; u < 2; ++u) {
ndx[u] = indices[i + u];
@@ -245,7 +245,7 @@ void traverseSegmentAdjacency(Vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
while (i < n) {
for (uint u = 0; u < 2; ++u) {
ndx[u] = (i + u);
diff --git a/src/render/backend/segmentsvisitor_p.h b/src/render/backend/segmentsvisitor_p.h
index 21867b0d5..cd5df1268 100644
--- a/src/render/backend/segmentsvisitor_p.h
+++ b/src/render/backend/segmentsvisitor_p.h
@@ -52,6 +52,7 @@
//
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/vector3d_p.h>
QT_BEGIN_NAMESPACE
@@ -75,8 +76,8 @@ public:
void apply(const Qt3DCore::QEntity *entity);
void apply(const GeometryRenderer *renderer, const Qt3DCore::QNodeId id);
- virtual void visit(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b) = 0;
+ virtual void visit(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b) = 0;
protected:
NodeManagers *m_manager;
diff --git a/src/render/backend/transform.cpp b/src/render/backend/transform.cpp
index 636c2d103..20574d6f7 100644
--- a/src/render/backend/transform.cpp
+++ b/src/render/backend/transform.cpp
@@ -64,7 +64,7 @@ void Transform::cleanup()
m_rotation = QQuaternion();
m_scale = QVector3D();
m_translation = QVector3D();
- m_transformMatrix = QMatrix4x4();
+ m_transformMatrix = Matrix4x4();
QBackendNode::setEnabled(false);
}
@@ -78,7 +78,7 @@ void Transform::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &ch
updateMatrix();
}
-QMatrix4x4 Transform::transformMatrix() const
+Matrix4x4 Transform::transformMatrix() const
{
return m_transformMatrix;
}
@@ -125,7 +125,7 @@ void Transform::updateMatrix()
m.translate(m_translation);
m.rotate(m_rotation);
m.scale(m_scale);
- m_transformMatrix = m;
+ m_transformMatrix = Matrix4x4(m);
}
} // namespace Render
diff --git a/src/render/backend/transform_p.h b/src/render/backend/transform_p.h
index 4b58e3cae..5c625ba8e 100644
--- a/src/render/backend/transform_p.h
+++ b/src/render/backend/transform_p.h
@@ -54,7 +54,7 @@
#include <Qt3DRender/private/backendnode_p.h>
#include <QtGui/qquaternion.h>
#include <QtGui/qvector3d.h>
-#include <QMatrix4x4>
+#include <Qt3DCore/private/matrix4x4_p.h>
QT_BEGIN_NAMESPACE
@@ -71,7 +71,7 @@ public:
Transform();
void cleanup();
- QMatrix4x4 transformMatrix() const;
+ Matrix4x4 transformMatrix() const;
QVector3D scale() const;
QQuaternion rotation() const;
QVector3D translation() const;
@@ -83,7 +83,7 @@ public:
private:
void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL;
- QMatrix4x4 m_transformMatrix;
+ Matrix4x4 m_transformMatrix;
QQuaternion m_rotation;
QVector3D m_scale;
QVector3D m_translation;
diff --git a/src/render/backend/triangleboundingvolume.cpp b/src/render/backend/triangleboundingvolume.cpp
index ca2d26897..be5206657 100644
--- a/src/render/backend/triangleboundingvolume.cpp
+++ b/src/render/backend/triangleboundingvolume.cpp
@@ -49,35 +49,35 @@ namespace Render {
// Note: a, b, c in clockwise order
// RealTime Collision Detection page 192
bool intersectsSegmentTriangle(const RayCasting::QRay3D &ray,
- const QVector3D &a,
- const QVector3D &b,
- const QVector3D &c,
- QVector3D &uvw,
+ const Vector3D &a,
+ const Vector3D &b,
+ const Vector3D &c,
+ Vector3D &uvw,
float &t)
{
- const QVector3D ab = b - a;
- const QVector3D ac = c - a;
- const QVector3D qp = (ray.origin() - ray.point(ray.distance()));
+ const Vector3D ab = b - a;
+ const Vector3D ac = c - a;
+ const Vector3D qp = (ray.origin() - ray.point(ray.distance()));
- const QVector3D n = QVector3D::crossProduct(ab, ac);
- const float d = QVector3D::dotProduct(qp, n);
+ const Vector3D n = Vector3D::crossProduct(ab, ac);
+ const float d = Vector3D::dotProduct(qp, n);
if (d <= 0.0f)
return false;
- const QVector3D ap = ray.origin() - a;
- t = QVector3D::dotProduct(ap, n);
+ const Vector3D ap = ray.origin() - a;
+ t = Vector3D::dotProduct(ap, n);
if (t < 0.0f || t > d)
return false;
- const QVector3D e = QVector3D::crossProduct(qp, ap);
- uvw.setY(QVector3D::dotProduct(ac, e));
+ const Vector3D e = Vector3D::crossProduct(qp, ap);
+ uvw.setY(Vector3D::dotProduct(ac, e));
if (uvw.y() < 0.0f || uvw.y() > d)
return false;
- uvw.setZ(-QVector3D::dotProduct(ab, e));
+ uvw.setZ(-Vector3D::dotProduct(ab, e));
if (uvw.z() < 0.0f || uvw.y() + uvw.z() > d)
return false;
@@ -99,7 +99,7 @@ TriangleBoundingVolume::TriangleBoundingVolume()
/*!
The vertices a, b, c are assumed to be in counter clockwise order.
*/
-TriangleBoundingVolume::TriangleBoundingVolume(Qt3DCore::QNodeId id, const QVector3D &a, const QVector3D &b, const QVector3D &c)
+TriangleBoundingVolume::TriangleBoundingVolume(Qt3DCore::QNodeId id, const Vector3D &a, const Vector3D &b, const Vector3D &c)
: QBoundingVolume()
, m_id(id)
, m_a(a)
@@ -112,10 +112,10 @@ Qt3DCore::QNodeId TriangleBoundingVolume::id() const
return m_id;
}
-bool TriangleBoundingVolume::intersects(const RayCasting::QRay3D &ray, QVector3D *q, QVector3D *uvw) const
+bool TriangleBoundingVolume::intersects(const RayCasting::QRay3D &ray, Vector3D *q, Vector3D *uvw) const
{
float t = 0.0f;
- QVector3D uvwr;
+ Vector3D uvwr;
const float intersected = intersectsSegmentTriangle(ray, m_c, m_b, m_a, uvwr, t);
if (intersected) {
@@ -132,41 +132,41 @@ TriangleBoundingVolume::Type TriangleBoundingVolume::type() const
return RayCasting::QBoundingVolume::Triangle;
}
-QVector3D TriangleBoundingVolume::a() const
+Vector3D TriangleBoundingVolume::a() const
{
return m_a;
}
-QVector3D TriangleBoundingVolume::b() const
+Vector3D TriangleBoundingVolume::b() const
{
return m_b;
}
-QVector3D TriangleBoundingVolume::c() const
+Vector3D TriangleBoundingVolume::c() const
{
return m_c;
}
-void TriangleBoundingVolume::setA(const QVector3D &a)
+void TriangleBoundingVolume::setA(const Vector3D &a)
{
m_a = a;
}
-void TriangleBoundingVolume::setB(const QVector3D &b)
+void TriangleBoundingVolume::setB(const Vector3D &b)
{
m_b = b;
}
-void TriangleBoundingVolume::setC(const QVector3D &c)
+void TriangleBoundingVolume::setC(const Vector3D &c)
{
m_c = c;
}
-TriangleBoundingVolume TriangleBoundingVolume::transformed(const QMatrix4x4 &mat) const
+TriangleBoundingVolume TriangleBoundingVolume::transformed(const Matrix4x4 &mat) const
{
- const QVector3D tA = mat * m_a;
- const QVector3D tB = mat * m_b;
- const QVector3D tC = mat * m_c;
+ const Vector3D tA = mat * m_a;
+ const Vector3D tB = mat * m_b;
+ const Vector3D tC = mat * m_c;
return TriangleBoundingVolume(id(), tA, tB, tC);
}
diff --git a/src/render/backend/triangleboundingvolume_p.h b/src/render/backend/triangleboundingvolume_p.h
index 3192ad456..dcdd972ae 100644
--- a/src/render/backend/triangleboundingvolume_p.h
+++ b/src/render/backend/triangleboundingvolume_p.h
@@ -53,6 +53,7 @@
#include <Qt3DRender/private/qboundingvolume_p.h>
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/matrix4x4_p.h>
#include <QVector3D>
QT_BEGIN_NAMESPACE
@@ -62,10 +63,10 @@ namespace Qt3DRender {
namespace Render {
Q_AUTOTEST_EXPORT bool intersectsSegmentTriangle(const RayCasting::QRay3D &ray,
- const QVector3D &a,
- const QVector3D &b,
- const QVector3D &c,
- QVector3D &uvw,
+ const Vector3D &a,
+ const Vector3D &b,
+ const Vector3D &c,
+ Vector3D &uvw,
float &t);
class Q_AUTOTEST_EXPORT TriangleBoundingVolume : public RayCasting::QBoundingVolume
@@ -73,25 +74,25 @@ class Q_AUTOTEST_EXPORT TriangleBoundingVolume : public RayCasting::QBoundingVol
public:
TriangleBoundingVolume();
explicit TriangleBoundingVolume(Qt3DCore::QNodeId id,
- const QVector3D &a,
- const QVector3D &b,
- const QVector3D &c);
+ const Vector3D &a,
+ const Vector3D &b,
+ const Vector3D &c);
Qt3DCore::QNodeId id() const Q_DECL_FINAL;
- bool intersects(const RayCasting::QRay3D &ray, QVector3D *q, QVector3D *uvw) const Q_DECL_FINAL;
+ bool intersects(const RayCasting::QRay3D &ray, Vector3D *q, Vector3D *uvw) const Q_DECL_FINAL;
Type type() const Q_DECL_FINAL;
- QVector3D a() const;
- QVector3D b() const;
- QVector3D c() const;
+ Vector3D a() const;
+ Vector3D b() const;
+ Vector3D c() const;
- void setA(const QVector3D &a);
- void setB(const QVector3D &b);
- void setC(const QVector3D &c);
+ void setA(const Vector3D &a);
+ void setB(const Vector3D &b);
+ void setC(const Vector3D &c);
- TriangleBoundingVolume transformed(const QMatrix4x4 &mat) const;
+ TriangleBoundingVolume transformed(const Matrix4x4 &mat) const;
- inline TriangleBoundingVolume &transform(const QMatrix4x4 &mat)
+ inline TriangleBoundingVolume &transform(const Matrix4x4 &mat)
{
*this = transformed(mat);
return *this;
@@ -99,7 +100,7 @@ public:
private:
Qt3DCore::QNodeId m_id;
- QVector3D m_a, m_b, m_c;
+ Vector3D m_a, m_b, m_c;
};
} // namespace Render
diff --git a/src/render/backend/trianglesextractor.cpp b/src/render/backend/trianglesextractor.cpp
index e7a36dab3..2ddb425a0 100644
--- a/src/render/backend/trianglesextractor.cpp
+++ b/src/render/backend/trianglesextractor.cpp
@@ -68,7 +68,7 @@ QVector<RayCasting::QBoundingVolume *> TrianglesExtractor::extract(const Qt3DCor
return m_volumes;
}
-void TrianglesExtractor::visit(uint andx, const QVector3D &a, uint bndx, const QVector3D &b, uint cndx, const QVector3D &c)
+void TrianglesExtractor::visit(uint andx, const Vector3D &a, uint bndx, const Vector3D &b, uint cndx, const Vector3D &c)
{
Q_UNUSED(andx); Q_UNUSED(bndx); Q_UNUSED(cndx);
m_volumes.push_back(new TriangleBoundingVolume(m_nodeId, a, b, c));
diff --git a/src/render/backend/trianglesextractor_p.h b/src/render/backend/trianglesextractor_p.h
index 8772d9a72..7dc92d8e2 100644
--- a/src/render/backend/trianglesextractor_p.h
+++ b/src/render/backend/trianglesextractor_p.h
@@ -71,9 +71,9 @@ public:
QVector<RayCasting::QBoundingVolume *> extract(const Qt3DCore::QNodeId id);
private:
- void visit(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b,
- uint cndx, const QVector3D &c) Q_DECL_OVERRIDE;
+ void visit(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b,
+ uint cndx, const Vector3D &c) Q_DECL_OVERRIDE;
GeometryRenderer *m_renderer;
QVector<RayCasting::QBoundingVolume *> m_volumes;
diff --git a/src/render/backend/trianglesvisitor.cpp b/src/render/backend/trianglesvisitor.cpp
index 57538c8d7..4a05d8f19 100644
--- a/src/render/backend/trianglesvisitor.cpp
+++ b/src/render/backend/trianglesvisitor.cpp
@@ -89,7 +89,7 @@ void traverseTrianglesIndexed(index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
while (i < indexInfo.count) {
for (uint u = 0; u < 3; ++u) {
ndx[u] = indices[i + u];
@@ -115,7 +115,7 @@ void traverseTriangles(vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
while (i < vertexInfo.count) {
for (uint u = 0; u < 3; ++u) {
ndx[u] = (i + u);
@@ -151,7 +151,7 @@ void traverseTriangleStripIndexed(index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
while (i < indexInfo.count - 2) {
bool degenerate = false;
for (uint u = 0; u < 3; ++u) {
@@ -182,7 +182,7 @@ void traverseTriangleStrip(vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
while (i < vertexInfo.count - 2) {
for (uint u = 0; u < 3; ++u) {
ndx[u] = (i + u);
@@ -208,7 +208,7 @@ void traverseTriangleFanIndexed(index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
for (uint j = 0; j < maxVerticesDataSize; ++j) {
abc[0][j] = vertices[static_cast<int>(indices[0]) * verticesStride + j];
@@ -238,7 +238,7 @@ void traverseTriangleFan(vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
for (uint j = 0; j < maxVerticesDataSize; ++j) {
abc[0][j] = vertices[j];
@@ -272,7 +272,7 @@ void traverseTriangleAdjacencyIndexed(index *indices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
while (i < indexInfo.count) {
for (uint u = 0; u < 6; u += 2) {
ndx[u / 2] = indices[i + u];
@@ -298,7 +298,7 @@ void traverseTriangleAdjacency(Vertex *vertices,
const uint maxVerticesDataSize = qMin(vertexInfo.dataSize, 3U);
uint ndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
while (i < vertexInfo.count) {
for (uint u = 0; u < 6; u += 2) {
ndx[u / 2] = (i + u);
@@ -313,10 +313,10 @@ void traverseTriangleAdjacency(Vertex *vertices,
}
template<typename Coordinate>
-QVector4D readCoordinate(const BufferInfo &info, Coordinate *coordinates, uint index)
+Vector4D readCoordinate(const BufferInfo &info, Coordinate *coordinates, uint index)
{
const uint stride = info.byteStride / sizeof(Coordinate);
- QVector4D ret(0, 0, 0, 1.0f);
+ Vector4D ret(0, 0, 0, 1.0f);
coordinates += stride * index;
for (uint e = 0; e < info.dataSize; ++e)
ret[e] = coordinates[e];
@@ -340,7 +340,7 @@ typename EnumToType<v>::type *castToType(const QByteArray &u, uint byteOffset)
return reinterpret_cast< typename EnumToType<v>::type *>(u.constData() + byteOffset);
}
-QVector4D readBuffer(const BufferInfo &info, uint index)
+Vector4D readBuffer(const BufferInfo &info, uint index)
{
switch (info.type) {
case QAttribute::Byte:
@@ -362,7 +362,7 @@ QVector4D readBuffer(const BufferInfo &info, uint index)
default:
break;
}
- return QVector4D();
+ return Vector4D();
}
template<typename Index, typename Visitor>
@@ -509,7 +509,7 @@ bool CoordinateReader::setGeometry(const GeometryRenderer *renderer, const QStri
return true;
}
-QVector4D CoordinateReader::getCoordinate(uint vertexIndex)
+Vector4D CoordinateReader::getCoordinate(uint vertexIndex)
{
return readBuffer(m_bufferInfo, vertexIndex);
}
diff --git a/src/render/backend/trianglesvisitor_p.h b/src/render/backend/trianglesvisitor_p.h
index 9428857ac..ee206f1c9 100644
--- a/src/render/backend/trianglesvisitor_p.h
+++ b/src/render/backend/trianglesvisitor_p.h
@@ -54,6 +54,8 @@
#include <Qt3DCore/qnodeid.h>
#include <Qt3DRender/QAttribute>
#include <Qt3DRender/private/bufferutils_p.h>
+#include <Qt3DCore/private/vector3d_p.h>
+#include <Qt3DCore/private/vector4d_p.h>
#include <private/qt3drender_global_p.h>
@@ -81,9 +83,9 @@ public:
void apply(const Qt3DCore::QEntity *entity);
void apply(const GeometryRenderer *renderer, const Qt3DCore::QNodeId id);
- virtual void visit(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b,
- uint cndx, const QVector3D &c) = 0;
+ virtual void visit(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b,
+ uint cndx, const Vector3D &c) = 0;
protected:
NodeManagers *m_manager;
@@ -102,7 +104,7 @@ public:
bool setGeometry(const GeometryRenderer *renderer, const QString &attributeName);
- QVector4D getCoordinate(uint vertexIndex);
+ Vector4D getCoordinate(uint vertexIndex);
protected:
NodeManagers *m_manager;
diff --git a/src/render/backend/uniform.cpp b/src/render/backend/uniform.cpp
index 03220a219..aedba5375 100644
--- a/src/render/backend/uniform.cpp
+++ b/src/render/backend/uniform.cpp
@@ -47,10 +47,20 @@ namespace Render {
namespace {
const int qNodeIdTypeId = qMetaTypeId<Qt3DCore::QNodeId>();
+const int qVector3DTypeId = qMetaTypeId<Vector3D>();
+const int qVector4DTypeId = qMetaTypeId<Vector4D>();
+const int qMatrix4x4TypeId = qMetaTypeId<Matrix4x4>();
// glUniform*fv/glUniform*iv/glUniform*uiv -> only handles sizeof(float)/sizeof(int)
int byteSizeForMetaType(int type)
{
+ if (type == qMatrix4x4TypeId)
+ return sizeof(Matrix4x4);
+ if (type == qVector3DTypeId)
+ return sizeof(Vector3D);
+ if (type == qVector4DTypeId)
+ return sizeof(Vector4D);
+
switch (type) {
case QMetaType::Bool:
case QMetaType::Int:
@@ -88,9 +98,9 @@ int byteSizeForMetaType(int type)
case QMetaType::QVector4D:
case QMetaType::QColor:
return 4 * sizeof(float);
-
case QMetaType::QMatrix4x4:
return 16 * sizeof(float);
+
default:
Q_UNREACHABLE();
return -1;
@@ -102,11 +112,22 @@ int byteSizeForMetaType(int type)
UniformValue UniformValue::fromVariant(const QVariant &variant)
{
// Texture/Buffer case
- if (variant.userType() == qNodeIdTypeId)
+ const int type = variant.userType();
+
+ if (type == qNodeIdTypeId)
return UniformValue(variant.value<Qt3DCore::QNodeId>());
+ if (type == qMatrix4x4TypeId)
+ return UniformValue(variant.value<Matrix4x4>());
+
+ if (type == qVector3DTypeId)
+ return UniformValue(variant.value<Vector3D>());
+
+ if (type == qVector4DTypeId)
+ return UniformValue(variant.value<Vector4D>());
+
UniformValue v;
- switch (variant.userType()) {
+ switch (type) {
case QMetaType::Bool:
v.data<bool>()[0] = variant.toBool();
break;
diff --git a/src/render/backend/uniform_p.h b/src/render/backend/uniform_p.h
index e0d8fedeb..213cf2606 100644
--- a/src/render/backend/uniform_p.h
+++ b/src/render/backend/uniform_p.h
@@ -53,6 +53,9 @@
#include <qt3drender_global.h>
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/matrix4x4_p.h>
+#include <Qt3DCore/private/vector3d_p.h>
+#include <Qt3DCore/private/vector4d_p.h>
#include <QMatrix4x4>
#include <QVector2D>
@@ -135,8 +138,8 @@ public:
UniformValue(double d) : UniformValue() { data<float>()[0] = d; } // Double to float conversion
UniformValue(bool b) : UniformValue() { data<bool>()[0] = b; }
UniformValue(const QVector2D &vec2) : UniformValue() { memcpy(m_data.data(), &vec2, sizeof(QVector2D)); }
- UniformValue(const QVector3D &vec3) : UniformValue() { memcpy(m_data.data(), &vec3, sizeof(QVector3D)); }
- UniformValue(const QVector4D &vec4) : m_data(4) { memcpy(m_data.data(), &vec4, sizeof(QVector4D)); }
+ UniformValue(const Vector3D &vec3) : UniformValue() { memcpy(m_data.data(), &vec3, sizeof(Vector3D)); }
+ UniformValue(const Vector4D &vec4) : m_data(sizeof(Vector4D) / sizeof(float)) { memcpy(m_data.data(), &vec4, sizeof(Vector4D)); }
UniformValue(const QMatrix3x3 &mat33)
: m_data(9)
@@ -145,12 +148,22 @@ public:
memcpy(m_data.data(), mat33.constData(), 9 * sizeof(float));
}
+ // We don t want the QMatrix4x4 builder to use sizeof since QMatrix4x4 contains a type flag
+#if defined(__SSE2__) || defined(__AVX2__)
+ UniformValue(const Matrix4x4 &mat44)
+ : m_data(sizeof(Matrix4x4) / sizeof(float))
+ {
+ // Use constData because we want column-major layout
+ memcpy(m_data.data(), &mat44, sizeof(Matrix4x4));
+ }
+#else
UniformValue(const QMatrix4x4 &mat44)
: m_data(16)
{
// Use constData because we want column-major layout
memcpy(m_data.data(), mat44.constData(), 16 * sizeof(float));
}
+#endif
UniformValue(const QVector<QMatrix4x4> &v)
: m_data(16 * v.size())
diff --git a/src/render/frontend/sphere.cpp b/src/render/frontend/sphere.cpp
index 2c22e0da4..740626163 100644
--- a/src/render/frontend/sphere.cpp
+++ b/src/render/frontend/sphere.cpp
@@ -53,18 +53,18 @@ namespace {
// Intersects ray r = p + td, |d| = 1, with sphere s and, if intersecting,
// returns true and intersection point q; false otherwise
-bool intersectRaySphere(const Qt3DRender::RayCasting::QRay3D &ray, const Qt3DRender::Render::Sphere &s, QVector3D *q = nullptr)
+bool intersectRaySphere(const Qt3DRender::RayCasting::QRay3D &ray, const Qt3DRender::Render::Sphere &s, Vector3D *q = nullptr)
{
- const QVector3D p = ray.origin();
- const QVector3D d = ray.direction();
- const QVector3D m = p - s.center();
- const float c = QVector3D::dotProduct(m, m) - s.radius() * s.radius();
+ const Vector3D p = ray.origin();
+ const Vector3D d = ray.direction();
+ const Vector3D m = p - s.center();
+ const float c = Vector3D::dotProduct(m, m) - s.radius() * s.radius();
// If there is definitely at least one real root, there must be an intersection
if (q == nullptr && c <= 0.0f)
return true;
- const float b = QVector3D::dotProduct(m, d);
+ const float b = Vector3D::dotProduct(m, d);
// Exit if r’s origin outside s (c > 0) and r pointing away from s (b > 0)
if (c > 0.0f && b > 0.0f)
return false;
@@ -89,12 +89,12 @@ bool intersectRaySphere(const Qt3DRender::RayCasting::QRay3D &ray, const Qt3DRen
return true;
}
-inline QPair<int, int> findExtremePoints(const QVector<QVector3D> &points)
+inline QPair<int, int> findExtremePoints(const QVector<Vector3D> &points)
{
// Find indices of extreme points along x, y, and z axes
int xMin = 0, xMax = 0, yMin = 0, yMax = 0, zMin = 0, zMax = 0;
for (int i = 1; i < points.size(); ++i) {
- const QVector3D &p = points.at(i);
+ const Vector3D &p = points.at(i);
if (p.x() < points[xMin].x())
xMin = i;
if (p.x() > points[xMax].x())
@@ -124,20 +124,20 @@ inline QPair<int, int> findExtremePoints(const QVector<QVector3D> &points)
return extremeIndices;
}
-inline void sphereFromExtremePoints(Qt3DRender::Render::Sphere &s, const QVector<QVector3D> &points)
+inline void sphereFromExtremePoints(Qt3DRender::Render::Sphere &s, const QVector<Vector3D> &points)
{
// Find two most separated points on any of the basis vectors
QPair<int, int> extremeIndices = findExtremePoints(points);
// Construct sphere to contain these two points
- const QVector3D &p = points.at(extremeIndices.first);
- const QVector3D &q = points.at(extremeIndices.second);
- const QVector3D c = 0.5f * (p + q);
+ const Vector3D &p = points.at(extremeIndices.first);
+ const Vector3D &q = points.at(extremeIndices.second);
+ const Vector3D c = 0.5f * (p + q);
s.setCenter(c);
s.setRadius((q - c).length());
}
-inline void constructRitterSphere(Qt3DRender::Render::Sphere &s, const QVector<QVector3D> &points)
+inline void constructRitterSphere(Qt3DRender::Render::Sphere &s, const QVector<Vector3D> &points)
{
// Calculate the sphere encompassing two axially extreme points
sphereFromExtremePoints(s, points);
@@ -154,22 +154,22 @@ namespace Render {
const float Sphere::ms_epsilon = 1.0e-7f;
-Sphere Sphere::fromPoints(const QVector<QVector3D> &points)
+Sphere Sphere::fromPoints(const QVector<Vector3D> &points)
{
Sphere s;
s.initializeFromPoints(points);
return s;
}
-void Sphere::initializeFromPoints(const QVector<QVector3D> &points)
+void Sphere::initializeFromPoints(const QVector<Vector3D> &points)
{
if (!points.isEmpty())
constructRitterSphere(*this, points);
}
-void Sphere::expandToContain(const QVector3D &p)
+void Sphere::expandToContain(const Vector3D &p)
{
- const QVector3D d = p - m_center;
+ const Vector3D d = p - m_center;
const float dist2 = d.lengthSquared();
if (dist2 > m_radius * m_radius) {
@@ -184,7 +184,7 @@ void Sphere::expandToContain(const QVector3D &p)
void Sphere::expandToContain(const Sphere &sphere)
{
- const QVector3D d(sphere.m_center - m_center);
+ const Vector3D d(sphere.m_center - m_center);
const float dist2 = d.lengthSquared();
const float dr = sphere.m_radius - m_radius;
@@ -204,16 +204,16 @@ void Sphere::expandToContain(const Sphere &sphere)
}
}
-Sphere Sphere::transformed(const QMatrix4x4 &mat) const
+Sphere Sphere::transformed(const Matrix4x4 &mat) const
{
// Transform extremities in x, y, and z directions to find extremities
// of the resulting ellipsoid
- QVector3D x = mat.map(m_center + QVector3D(m_radius, 0.0f, 0.0f));
- QVector3D y = mat.map(m_center + QVector3D(0.0f, m_radius, 0.0f));
- QVector3D z = mat.map(m_center + QVector3D(0.0f, 0.0f, m_radius));
+ Vector3D x = mat.map(m_center + Vector3D(m_radius, 0.0f, 0.0f));
+ Vector3D y = mat.map(m_center + Vector3D(0.0f, m_radius, 0.0f));
+ Vector3D z = mat.map(m_center + Vector3D(0.0f, 0.0f, m_radius));
// Transform center and find maximum radius of ellipsoid
- QVector3D c = mat.map(m_center);
+ Vector3D c = mat.map(m_center);
float rSquared = qMax(qMax((x - c).lengthSquared(), (y - c).lengthSquared()), (z - c).lengthSquared());
return Sphere(c, sqrt(rSquared), id());
}
@@ -223,7 +223,7 @@ Qt3DCore::QNodeId Sphere::id() const
return m_id;
}
-bool Sphere::intersects(const RayCasting::QRay3D &ray, QVector3D *q, QVector3D *uvw) const
+bool Sphere::intersects(const RayCasting::QRay3D &ray, Vector3D *q, Vector3D *uvw) const
{
Q_UNUSED(uvw);
return intersectRaySphere(ray, *this, q);
diff --git a/src/render/frontend/sphere_p.h b/src/render/frontend/sphere_p.h
index 1587aecab..ff6b2286b 100644
--- a/src/render/frontend/sphere_p.h
+++ b/src/render/frontend/sphere_p.h
@@ -53,10 +53,10 @@
#include <Qt3DRender/private/qt3drender_global_p.h>
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/matrix4x4_p.h>
#include <Qt3DRender/private/boundingsphere_p.h>
#include <QMatrix4x4>
-#include <QVector3D>
QT_BEGIN_NAMESPACE
@@ -73,58 +73,58 @@ public:
, m_id(i)
{}
- inline Sphere(const QVector3D &c, float r, Qt3DCore::QNodeId i = Qt3DCore::QNodeId())
+ inline Sphere(const Vector3D &c, float r, Qt3DCore::QNodeId i = Qt3DCore::QNodeId())
: m_center(c)
, m_radius(r)
, m_id(i)
{}
- void setCenter(const QVector3D &c);
- QVector3D center() const Q_DECL_OVERRIDE;
+ void setCenter(const Vector3D &c);
+ Vector3D center() const Q_DECL_OVERRIDE;
- inline bool isNull() { return m_center == QVector3D() && m_radius == 0.0f; }
+ inline bool isNull() { return m_center == Vector3D() && m_radius == 0.0f; }
void setRadius(float r);
float radius() const Q_DECL_OVERRIDE;
void clear();
- void initializeFromPoints(const QVector<QVector3D> &points);
- void expandToContain(const QVector3D &point);
- inline void expandToContain(const QVector<QVector3D> &points)
+ void initializeFromPoints(const QVector<Vector3D> &points);
+ void expandToContain(const Vector3D &point);
+ inline void expandToContain(const QVector<Vector3D> &points)
{
- for (const QVector3D &p : points)
+ for (const Vector3D &p : points)
expandToContain(p);
}
void expandToContain(const Sphere &sphere);
- Sphere transformed(const QMatrix4x4 &mat) const;
- inline Sphere &transform(const QMatrix4x4 &mat)
+ Sphere transformed(const Matrix4x4 &mat) const;
+ inline Sphere &transform(const Matrix4x4 &mat)
{
*this = transformed(mat);
return *this;
}
Qt3DCore::QNodeId id() const Q_DECL_FINAL;
- bool intersects(const RayCasting::QRay3D &ray, QVector3D *q, QVector3D *uvw = nullptr) const Q_DECL_FINAL;
+ bool intersects(const RayCasting::QRay3D &ray, Vector3D *q, Vector3D *uvw = nullptr) const Q_DECL_FINAL;
Type type() const Q_DECL_FINAL;
- static Sphere fromPoints(const QVector<QVector3D> &points);
+ static Sphere fromPoints(const QVector<Vector3D> &points);
private:
- QVector3D m_center;
+ Vector3D m_center;
float m_radius;
Qt3DCore::QNodeId m_id;
static const float ms_epsilon;
};
-inline void Sphere::setCenter(const QVector3D &c)
+inline void Sphere::setCenter(const Vector3D &c)
{
m_center = c;
}
-inline QVector3D Sphere::center() const
+inline Vector3D Sphere::center() const
{
return m_center;
}
@@ -141,15 +141,15 @@ inline float Sphere::radius() const
inline void Sphere::clear()
{
- m_center = QVector3D();
+ m_center = Vector3D();
m_radius = 0.0f;
}
inline bool intersects(const Sphere &a, const Sphere &b)
{
// Calculate squared distance between sphere centers
- const QVector3D d = a.center() - b.center();
- const float distSq = QVector3D::dotProduct(d, d);
+ const Vector3D d = a.center() - b.center();
+ const float distSq = Vector3D::dotProduct(d, d);
// Spheres intersect if squared distance is less than squared
// sum of radii
diff --git a/src/render/jobs/calcboundingvolumejob.cpp b/src/render/jobs/calcboundingvolumejob.cpp
index e81836502..7504b4ebd 100644
--- a/src/render/jobs/calcboundingvolumejob.cpp
+++ b/src/render/jobs/calcboundingvolumejob.cpp
@@ -93,8 +93,8 @@ public:
const float zDist2 = (findExtremePoints.zMaxPt - findExtremePoints.zMinPt).lengthSquared();
// Select most distant pair
- QVector3D p = findExtremePoints.xMinPt;
- QVector3D q = findExtremePoints.xMaxPt;
+ Vector3D p = findExtremePoints.xMinPt;
+ Vector3D q = findExtremePoints.xMaxPt;
if (yDist2 > xDist2 && yDist2 > zDist2) {
p = findExtremePoints.yMinPt;
q = findExtremePoints.yMaxPt;
@@ -104,7 +104,7 @@ public:
q = findExtremePoints.zMaxPt;
}
- const QVector3D c = 0.5f * (p + q);
+ const Vector3D c = 0.5f * (p + q);
m_volume.setCenter(c);
m_volume.setRadius((q - c).length());
@@ -128,40 +128,40 @@ private:
{ }
float xMin, xMax, yMin, yMax, zMin, zMax;
- QVector3D xMinPt, xMaxPt, yMinPt, yMaxPt, zMinPt, zMaxPt;
+ Vector3D xMinPt, xMaxPt, yMinPt, yMaxPt, zMinPt, zMaxPt;
void visit(uint ndx, float x, float y, float z) override
{
if (ndx) {
if (x < xMin) {
xMin = x;
- xMinPt = QVector3D(x, y, z);
+ xMinPt = Vector3D(x, y, z);
}
if (x > xMax) {
xMax = x;
- xMaxPt = QVector3D(x, y, z);
+ xMaxPt = Vector3D(x, y, z);
}
if (y < yMin) {
yMin = y;
- yMinPt = QVector3D(x, y, z);
+ yMinPt = Vector3D(x, y, z);
}
if (y > yMax) {
yMax = y;
- yMaxPt = QVector3D(x, y, z);
+ yMaxPt = Vector3D(x, y, z);
}
if (z < zMin) {
zMin = z;
- zMinPt = QVector3D(x, y, z);
+ zMinPt = Vector3D(x, y, z);
}
if (z > zMax) {
zMax = z;
- zMaxPt = QVector3D(x, y, z);
+ zMaxPt = Vector3D(x, y, z);
}
} else {
xMin = xMax = x;
yMin = yMax = y;
zMin = zMax = z;
- xMinPt = xMaxPt = yMinPt = yMaxPt = zMinPt = zMaxPt = QVector3D(x, y, z);
+ xMinPt = xMaxPt = yMinPt = yMaxPt = zMinPt = zMaxPt = Vector3D(x, y, z);
}
}
};
@@ -177,7 +177,7 @@ private:
void visit(uint ndx, float x, float y, float z) override
{
Q_UNUSED(ndx);
- m_volume.expandToContain(QVector3D(x, y, z));
+ m_volume.expandToContain(Vector3D(x, y, z));
}
};
};
diff --git a/src/render/jobs/frustumcullingjob.cpp b/src/render/jobs/frustumcullingjob.cpp
index 85c6b5cad..1a03b691d 100644
--- a/src/render/jobs/frustumcullingjob.cpp
+++ b/src/render/jobs/frustumcullingjob.cpp
@@ -86,17 +86,17 @@ void FrustumCullingJob::cullScene(Entity *e, const Plane *planes)
const Sphere *s = e->worldBoundingVolumeWithChildren();
// Unrolled loop
- if (QVector3D::dotProduct(s->center(), planes[0].normal) + planes[0].d < -s->radius())
+ if (Vector3D::dotProduct(s->center(), planes[0].normal) + planes[0].d < -s->radius())
return;
- if (QVector3D::dotProduct(s->center(), planes[1].normal) + planes[1].d < -s->radius())
+ if (Vector3D::dotProduct(s->center(), planes[1].normal) + planes[1].d < -s->radius())
return;
- if (QVector3D::dotProduct(s->center(), planes[2].normal) + planes[2].d < -s->radius())
+ if (Vector3D::dotProduct(s->center(), planes[2].normal) + planes[2].d < -s->radius())
return;
- if (QVector3D::dotProduct(s->center(), planes[3].normal) + planes[3].d < -s->radius())
+ if (Vector3D::dotProduct(s->center(), planes[3].normal) + planes[3].d < -s->radius())
return;
- if (QVector3D::dotProduct(s->center(), planes[4].normal) + planes[4].d < -s->radius())
+ if (Vector3D::dotProduct(s->center(), planes[4].normal) + planes[4].d < -s->radius())
return;
- if (QVector3D::dotProduct(s->center(), planes[5].normal) + planes[5].d < -s->radius())
+ if (Vector3D::dotProduct(s->center(), planes[5].normal) + planes[5].d < -s->radius())
return;
m_visibleEntities.push_back(e);
diff --git a/src/render/jobs/frustumcullingjob_p.h b/src/render/jobs/frustumcullingjob_p.h
index ebd870937..4a5d8fd57 100644
--- a/src/render/jobs/frustumcullingjob_p.h
+++ b/src/render/jobs/frustumcullingjob_p.h
@@ -41,7 +41,8 @@
#define QT3DRENDER_RENDER_FRUSTUMCULLINGJOB_P_H
#include <Qt3DCore/qaspectjob.h>
-#include <QMatrix4x4>
+#include <Qt3DCore/private/matrix4x4_p.h>
+#include <Qt3DRender/private/aligned_malloc_p.h>
//
// W A R N I N G
@@ -69,11 +70,13 @@ class FrustumCullingJob : public Qt3DCore::QAspectJob
public:
FrustumCullingJob();
+ QT3D_ALIGNED_MALLOC_AND_FREE()
+
inline void setRoot(Entity *root) Q_DECL_NOTHROW { m_root = root; }
inline void setActive(bool active) Q_DECL_NOTHROW { m_active = active; }
inline bool isActive() const Q_DECL_NOTHROW { return m_active; }
- inline void setViewProjection(const QMatrix4x4 &viewProjection) Q_DECL_NOTHROW { m_viewProjection = viewProjection; }
- inline QMatrix4x4 viewProjection() const Q_DECL_NOTHROW { return m_viewProjection; }
+ inline void setViewProjection(const Matrix4x4 &viewProjection) Q_DECL_NOTHROW { m_viewProjection = viewProjection; }
+ inline Matrix4x4 viewProjection() const Q_DECL_NOTHROW { return m_viewProjection; }
QVector<Entity *> visibleEntities() const Q_DECL_NOTHROW { return m_visibleEntities; }
@@ -81,7 +84,7 @@ public:
private:
void cullScene(Entity *e, const Plane *planes);
- QMatrix4x4 m_viewProjection;
+ Matrix4x4 m_viewProjection;
Entity *m_root;
QVector<Entity *> m_visibleEntities;
bool m_active;
diff --git a/src/render/jobs/pickboundingvolumejob.cpp b/src/render/jobs/pickboundingvolumejob.cpp
index ed6944d31..902c048e6 100644
--- a/src/render/jobs/pickboundingvolumejob.cpp
+++ b/src/render/jobs/pickboundingvolumejob.cpp
@@ -139,12 +139,12 @@ void PickBoundingVolumeJob::setRenderSettings(RenderSettings *settings)
m_renderSettings = settings;
}
-RayCasting::QRay3D PickBoundingVolumeJob::intersectionRay(const QPoint &pos, const QMatrix4x4 &viewMatrix,
- const QMatrix4x4 &projectionMatrix, const QRect &viewport)
+RayCasting::QRay3D PickBoundingVolumeJob::intersectionRay(const QPoint &pos, const Matrix4x4 &viewMatrix,
+ const Matrix4x4 &projectionMatrix, const QRect &viewport)
{
- QVector3D nearPos = QVector3D(pos.x(), pos.y(), 0.0f);
+ Vector3D nearPos = Vector3D(pos.x(), pos.y(), 0.0f);
nearPos = nearPos.unproject(viewMatrix, projectionMatrix, viewport);
- QVector3D farPos = QVector3D(pos.x(), pos.y(), 1.0f);
+ Vector3D farPos = Vector3D(pos.x(), pos.y(), 1.0f);
farPos = farPos.unproject(viewMatrix, projectionMatrix, viewport);
return RayCasting::QRay3D(nearPos,
@@ -351,39 +351,48 @@ void PickBoundingVolumeJob::dispatchPickEvents(const QMouseEvent &event,
}
// Send the corresponding event
- QVector3D localIntersection = hit.m_intersection;
+ Vector3D localIntersection = hit.m_intersection;
if (entity && entity->worldTransform())
localIntersection = entity->worldTransform()->inverted() * hit.m_intersection;
QPickEventPtr pickEvent;
switch (hit.m_type) {
case QCollisionQueryResult::Hit::Triangle:
- pickEvent = QPickTriangleEventPtr::create(event.localPos(), hit.m_intersection,
- localIntersection, hit.m_distance,
- hit.m_primitiveIndex,
- hit.m_vertexIndex[0],
- hit.m_vertexIndex[1],
- hit.m_vertexIndex[2],
- eventButton, eventButtons,
- eventModifiers, hit.m_uvw);
+ pickEvent.reset(new QPickTriangleEvent(event.localPos(),
+ convertToQVector3D(hit.m_intersection),
+ convertToQVector3D(localIntersection),
+ hit.m_distance,
+ hit.m_primitiveIndex,
+ hit.m_vertexIndex[0],
+ hit.m_vertexIndex[1],
+ hit.m_vertexIndex[2],
+ eventButton, eventButtons,
+ eventModifiers,
+ convertToQVector3D(hit.m_uvw)));
break;
case QCollisionQueryResult::Hit::Edge:
- pickEvent = QPickLineEventPtr::create(event.localPos(), hit.m_intersection,
- localIntersection, hit.m_distance,
- hit.m_primitiveIndex,
- hit.m_vertexIndex[0], hit.m_vertexIndex[1],
- eventButton, eventButtons, eventModifiers);
+ pickEvent.reset(new QPickLineEvent(event.localPos(),
+ convertToQVector3D(hit.m_intersection),
+ convertToQVector3D(localIntersection),
+ hit.m_distance,
+ hit.m_primitiveIndex,
+ hit.m_vertexIndex[0], hit.m_vertexIndex[1],
+ eventButton, eventButtons, eventModifiers));
break;
case QCollisionQueryResult::Hit::Point:
- pickEvent = QPickPointEventPtr::create(event.localPos(), hit.m_intersection,
- localIntersection, hit.m_distance,
- hit.m_vertexIndex[0],
- eventButton, eventButtons, eventModifiers);
+ pickEvent.reset(new QPickPointEvent(event.localPos(),
+ convertToQVector3D(hit.m_intersection),
+ convertToQVector3D(localIntersection),
+ hit.m_distance,
+ hit.m_vertexIndex[0],
+ eventButton, eventButtons, eventModifiers));
break;
case QCollisionQueryResult::Hit::Entity:
- pickEvent = QPickEventPtr::create(event.localPos(), hit.m_intersection,
- localIntersection, hit.m_distance,
- eventButton, eventButtons, eventModifiers);
+ pickEvent.reset(new QPickEvent(event.localPos(),
+ convertToQVector3D(hit.m_intersection),
+ convertToQVector3D(localIntersection),
+ hit.m_distance,
+ eventButton, eventButtons, eventModifiers));
break;
default:
Q_UNREACHABLE();
@@ -461,6 +470,20 @@ void PickBoundingVolumeJob::dispatchPickEvents(const QMouseEvent &event,
}
}
+void PickBoundingVolumeJob::viewMatrixForCamera(Qt3DCore::QNodeId cameraId,
+ Matrix4x4 &viewMatrix,
+ Matrix4x4 &projectionMatrix) const
+{
+ Render::CameraLens *lens = nullptr;
+ Entity *camNode = m_manager->renderNodesManager()->lookupResource(cameraId);
+ if (camNode != nullptr &&
+ (lens = camNode->renderComponent<CameraLens>()) != nullptr &&
+ lens->isEnabled()) {
+ viewMatrix = *camNode->worldTransform();
+ projectionMatrix = lens->projection();
+ }
+}
+
QRect PickBoundingVolumeJob::windowViewport(const QSize &area, const QRectF &relativeViewport) const
{
if (area.isValid()) {
@@ -479,9 +502,9 @@ RayCasting::QRay3D PickBoundingVolumeJob::rayForViewportAndCamera(const QSize &a
const QRectF &relativeViewport,
const Qt3DCore::QNodeId cameraId) const
{
- QMatrix4x4 viewMatrix;
- QMatrix4x4 projectionMatrix;
- Render::CameraLens::viewMatrixForCamera(m_manager->renderNodesManager(), cameraId, viewMatrix, projectionMatrix);
+ Matrix4x4 viewMatrix;
+ Matrix4x4 projectionMatrix;
+ viewMatrixForCamera(cameraId, viewMatrix, projectionMatrix);
const QRect viewport = windowViewport(area, relativeViewport);
// In GL the y is inverted compared to Qt
diff --git a/src/render/jobs/pickboundingvolumejob_p.h b/src/render/jobs/pickboundingvolumejob_p.h
index d3f270d35..5d4f63f77 100644
--- a/src/render/jobs/pickboundingvolumejob_p.h
+++ b/src/render/jobs/pickboundingvolumejob_p.h
@@ -94,8 +94,8 @@ public:
bool pickersDirty() const { return m_pickersDirty; }
static RayCasting::QRay3D intersectionRay(const QPoint &pos,
- const QMatrix4x4 &viewMatrix,
- const QMatrix4x4 &projectionMatrix,
+ const Matrix4x4 &viewMatrix,
+ const Matrix4x4 &projectionMatrix,
const QRect &viewport);
// For unit tests
@@ -124,6 +124,9 @@ private:
QList<QKeyEvent> m_pendingKeyEvents;
+ void viewMatrixForCamera(Qt3DCore::QNodeId cameraId,
+ Matrix4x4 &viewMatrix,
+ Matrix4x4 &projectionMatrix) const;
QRect windowViewport(const QSize &area, const QRectF &relativeViewport) const;
RayCasting::QRay3D rayForViewportAndCamera(const QSize &area,
const QPoint &pos,
diff --git a/src/render/jobs/pickboundingvolumeutils.cpp b/src/render/jobs/pickboundingvolumeutils.cpp
index 564c1e86c..ae80b0a23 100644
--- a/src/render/jobs/pickboundingvolumeutils.cpp
+++ b/src/render/jobs/pickboundingvolumeutils.cpp
@@ -154,7 +154,6 @@ QVector<Entity *> EntityGatherer::entities() const
return m_entities;
}
-
class TriangleCollisionVisitor : public TrianglesVisitor
{
public:
@@ -174,20 +173,20 @@ private:
bool m_frontFaceRequested;
bool m_backFaceRequested;
- void visit(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b,
- uint cndx, const QVector3D &c) Q_DECL_OVERRIDE;
- bool intersectsSegmentTriangle(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b,
- uint cndx, const QVector3D &c);
+ void visit(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b,
+ uint cndx, const Vector3D &c) Q_DECL_OVERRIDE;
+ bool intersectsSegmentTriangle(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b,
+ uint cndx, const Vector3D &c);
};
-void TriangleCollisionVisitor::visit(uint andx, const QVector3D &a, uint bndx, const QVector3D &b, uint cndx, const QVector3D &c)
+void TriangleCollisionVisitor::visit(uint andx, const Vector3D &a, uint bndx, const Vector3D &b, uint cndx, const Vector3D &c)
{
- const QMatrix4x4 &mat = *m_root->worldTransform();
- const QVector3D tA = mat * a;
- const QVector3D tB = mat * b;
- const QVector3D tC = mat * c;
+ const Matrix4x4 &mat = *m_root->worldTransform();
+ const Vector3D tA = mat * a;
+ const Vector3D tB = mat * b;
+ const Vector3D tC = mat * c;
bool intersected = m_frontFaceRequested &&
intersectsSegmentTriangle(cndx, tC, bndx, tB, andx, tA); // front facing
@@ -198,10 +197,11 @@ void TriangleCollisionVisitor::visit(uint andx, const QVector3D &a, uint bndx, c
m_triangleIndex++;
}
-bool TriangleCollisionVisitor::intersectsSegmentTriangle(uint andx, const QVector3D &a, uint bndx, const QVector3D &b, uint cndx, const QVector3D &c)
+
+bool TriangleCollisionVisitor::intersectsSegmentTriangle(uint andx, const Vector3D &a, uint bndx, const Vector3D &b, uint cndx, const Vector3D &c)
{
float t = 0.0f;
- QVector3D uvw;
+ Vector3D uvw;
bool intersected = Render::intersectsSegmentTriangle(m_ray, a, b, c, uvw, t);
if (intersected) {
QCollisionQueryResult::Hit queryResult;
@@ -237,30 +237,30 @@ private:
uint m_segmentIndex;
float m_pickWorldSpaceTolerance;
- void visit(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b) Q_DECL_OVERRIDE;
- bool intersectsSegmentSegment(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b);
- bool rayToLineSegment(const QVector3D& lineStart,const QVector3D& lineEnd,
- float &distance, QVector3D &intersection) const;
+ void visit(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b) Q_DECL_OVERRIDE;
+ bool intersectsSegmentSegment(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b);
+ bool rayToLineSegment(const Vector3D& lineStart,const Vector3D& lineEnd,
+ float &distance, Vector3D &intersection) const;
};
-void LineCollisionVisitor::visit(uint andx, const QVector3D &a, uint bndx, const QVector3D &b)
+void LineCollisionVisitor::visit(uint andx, const Vector3D &a, uint bndx, const Vector3D &b)
{
- const QMatrix4x4 &mat = *m_root->worldTransform();
- const QVector3D tA = mat * a;
- const QVector3D tB = mat * b;
+ const Matrix4x4 &mat = *m_root->worldTransform();
+ const Vector3D tA = mat * a;
+ const Vector3D tB = mat * b;
intersectsSegmentSegment(andx, tA, bndx, tB);
m_segmentIndex++;
}
-bool LineCollisionVisitor::intersectsSegmentSegment(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b)
+bool LineCollisionVisitor::intersectsSegmentSegment(uint andx, const Vector3D &a,
+ uint bndx, const Vector3D &b)
{
float distance = 0.f;
- QVector3D intersection;
+ Vector3D intersection;
bool res = rayToLineSegment(a, b, distance, intersection);
if (res) {
QCollisionQueryResult::Hit queryResult;
@@ -277,19 +277,19 @@ bool LineCollisionVisitor::intersectsSegmentSegment(uint andx, const QVector3D &
return false;
}
-bool LineCollisionVisitor::rayToLineSegment(const QVector3D& lineStart,const QVector3D& lineEnd,
- float &distance, QVector3D &intersection) const
+bool LineCollisionVisitor::rayToLineSegment(const Vector3D& lineStart,const Vector3D& lineEnd,
+ float &distance, Vector3D &intersection) const
{
const float epsilon = 0.00000001f;
- const QVector3D u = m_ray.direction() * m_ray.distance();
- const QVector3D v = lineEnd - lineStart;
- const QVector3D w = m_ray.origin() - lineStart;
- const float a = QVector3D::dotProduct(u, u);
- const float b = QVector3D::dotProduct(u, v);
- const float c = QVector3D::dotProduct(v, v);
- const float d = QVector3D::dotProduct(u, w);
- const float e = QVector3D::dotProduct(v, w);
+ const Vector3D u = m_ray.direction() * m_ray.distance();
+ const Vector3D v = lineEnd - lineStart;
+ const Vector3D w = m_ray.origin() - lineStart;
+ const float a = Vector3D::dotProduct(u, u);
+ const float b = Vector3D::dotProduct(u, v);
+ const float c = Vector3D::dotProduct(v, v);
+ const float d = Vector3D::dotProduct(u, w);
+ const float e = Vector3D::dotProduct(v, w);
const float D = a * c - b * b;
float sc, sN, sD = D;
float tc, tN, tD = D;
@@ -330,7 +330,7 @@ bool LineCollisionVisitor::rayToLineSegment(const QVector3D& lineStart,const QVe
sc = (qAbs(sN) < epsilon ? 0.0f : sN / sD);
tc = (qAbs(tN) < epsilon ? 0.0f : tN / tD);
- const QVector3D dP = w + (sc * u) - (tc * v);
+ const Vector3D dP = w + (sc * u) - (tc * v);
const float f = dP.length();
if (f < m_pickWorldSpaceTolerance) {
distance = sc * u.length();
@@ -358,23 +358,23 @@ private:
uint m_pointIndex;
float m_pickWorldSpaceTolerance;
- void visit(uint ndx, const QVector3D &p) Q_DECL_OVERRIDE;
+ void visit(uint ndx, const Vector3D &p) Q_DECL_OVERRIDE;
- double pointToRayDistance(const QVector3D &a, QVector3D &p)
+ double pointToRayDistance(const Vector3D &a, Vector3D &p)
{
- const QVector3D v = a - m_ray.origin();
- const double t = QVector3D::dotProduct(v, m_ray.direction());
+ const Vector3D v = a - m_ray.origin();
+ const double t = Vector3D::dotProduct(v, m_ray.direction());
p = m_ray.origin() + t * m_ray.direction();
return (p - a).length();
}
};
-void PointCollisionVisitor::visit(uint ndx, const QVector3D &p)
+void PointCollisionVisitor::visit(uint ndx, const Vector3D &p)
{
- const QMatrix4x4 &mat = *m_root->worldTransform();
- const QVector3D tP = mat * p;
- QVector3D intersection;
+ const Matrix4x4 &mat = *m_root->worldTransform();
+ const Vector3D tP = mat * p;
+ Vector3D intersection;
float d = pointToRayDistance(tP, intersection);
if (d < m_pickWorldSpaceTolerance) {
@@ -461,10 +461,32 @@ void AbstractCollisionGathererFunctor::sortHits(HitList &results)
std::sort(results.begin(), results.end(), compareHitsDistance);
}
+namespace {
+
+// Workaround to avoid passing *this into the blockMappedReduce calls for the
+// mapFunctor which would cause an SSE alignment error on Windows Also note
+// that a lambda doesn't work since we need the typedef result_type defined to
+// work with QtConcurrent
+struct MapFunctorHolder
+{
+ MapFunctorHolder(const AbstractCollisionGathererFunctor *gatherer)
+ : m_gatherer(gatherer)
+ {}
+
+ // This define is required to work with QtConcurrent
+ typedef HitList result_type;
+ HitList operator ()(const Entity *e) const { return m_gatherer->operator ()(e); }
+
+ const AbstractCollisionGathererFunctor *m_gatherer;
+};
+
+} // anonymous
+
HitList EntityCollisionGathererFunctor::computeHits(const QVector<Entity *> &entities, bool allHitsRequested)
{
const auto reducerOp = allHitsRequested ? PickingUtils::reduceToAllHits : PickingUtils::reduceToFirstHit;
- return QtConcurrent::blockingMappedReduced<HitList>(entities, *this, reducerOp);
+ const MapFunctorHolder holder(this);
+ return QtConcurrent::blockingMappedReduced<HitList>(entities, holder, reducerOp);
}
HitList EntityCollisionGathererFunctor::pick(const Entity *entity) const
@@ -482,7 +504,8 @@ HitList EntityCollisionGathererFunctor::pick(const Entity *entity) const
HitList TriangleCollisionGathererFunctor::computeHits(const QVector<Entity *> &entities, bool allHitsRequested)
{
const auto reducerOp = allHitsRequested ? PickingUtils::reduceToAllHits : PickingUtils::reduceToFirstHit;
- return QtConcurrent::blockingMappedReduced<HitList>(entities, *this, reducerOp);
+ const MapFunctorHolder holder(this);
+ return QtConcurrent::blockingMappedReduced<HitList>(entities, holder, reducerOp);
}
HitList TriangleCollisionGathererFunctor::pick(const Entity *entity) const
@@ -507,7 +530,8 @@ HitList TriangleCollisionGathererFunctor::pick(const Entity *entity) const
HitList LineCollisionGathererFunctor::computeHits(const QVector<Entity *> &entities, bool allHitsRequested)
{
const auto reducerOp = allHitsRequested ? PickingUtils::reduceToAllHits : PickingUtils::reduceToFirstHit;
- return QtConcurrent::blockingMappedReduced<HitList>(entities, *this, reducerOp);
+ const MapFunctorHolder holder(this);
+ return QtConcurrent::blockingMappedReduced<HitList>(entities, holder, reducerOp);
}
HitList LineCollisionGathererFunctor::pick(const Entity *entity) const
@@ -531,7 +555,8 @@ HitList LineCollisionGathererFunctor::pick(const Entity *entity) const
HitList PointCollisionGathererFunctor::computeHits(const QVector<Entity *> &entities, bool allHitsRequested)
{
const auto reducerOp = allHitsRequested ? PickingUtils::reduceToAllHits : PickingUtils::reduceToFirstHit;
- return QtConcurrent::blockingMappedReduced<HitList>(entities, *this, reducerOp);
+ const MapFunctorHolder holder(this);
+ return QtConcurrent::blockingMappedReduced<HitList>(entities, holder, reducerOp);
}
HitList PointCollisionGathererFunctor::pick(const Entity *entity) const
diff --git a/src/render/jobs/renderviewjobutils_p.h b/src/render/jobs/renderviewjobutils_p.h
index c1d37b28a..542b797d0 100644
--- a/src/render/jobs/renderviewjobutils_p.h
+++ b/src/render/jobs/renderviewjobutils_p.h
@@ -57,6 +57,7 @@
#include <QtCore/qvariant.h>
#include <QMatrix4x4>
#include <Qt3DRender/private/uniform_p.h>
+#include <Qt3DRender/private/aligned_malloc_p.h>
QT_BEGIN_NAMESPACE
@@ -158,6 +159,8 @@ struct Q_AUTOTEST_EXPORT UniformBlockValueBuilder
UniformBlockValueBuilder();
~UniformBlockValueBuilder();
+ QT3D_ALIGNED_MALLOC_AND_FREE()
+
void buildActiveUniformNameValueMapHelper(ShaderData *currentShaderData,
const QString &blockName,
const QString &qmlPropertyName,
@@ -171,7 +174,7 @@ struct Q_AUTOTEST_EXPORT UniformBlockValueBuilder
UniformBlockValueBuilderHash activeUniformNamesToValue;
ShaderDataManager *shaderDataManager;
TextureManager *textureManager;
- QMatrix4x4 viewMatrix;
+ Matrix4x4 viewMatrix;
};
} // namespace Render
diff --git a/src/render/jobs/updatelevelofdetailjob.cpp b/src/render/jobs/updatelevelofdetailjob.cpp
index 8b604229a..ad9bee8e1 100644
--- a/src/render/jobs/updatelevelofdetailjob.cpp
+++ b/src/render/jobs/updatelevelofdetailjob.cpp
@@ -140,20 +140,20 @@ void UpdateLevelOfDetailJob::updateEntityLod(Entity *entity)
void UpdateLevelOfDetailJob::updateEntityLodByDistance(Entity *entity, LevelOfDetail *lod)
{
- QMatrix4x4 viewMatrix;
- QMatrix4x4 projectionMatrix;
+ Matrix4x4 viewMatrix;
+ Matrix4x4 projectionMatrix;
if (!Render::CameraLens::viewMatrixForCamera(m_manager->renderNodesManager(), lod->camera(), viewMatrix, projectionMatrix))
return;
const QVector<qreal> thresholds = lod->thresholds();
- QVector3D center = lod->center();
+ Vector3D center(lod->center());
if (lod->hasBoundingVolumeOverride() || entity->worldBoundingVolume() == nullptr) {
center = *entity->worldTransform() * center;
} else {
center = entity->worldBoundingVolume()->center();
}
- const QVector3D tcenter = viewMatrix * center;
+ const Vector3D tcenter = viewMatrix * center;
const float dist = tcenter.length();
const int n = thresholds.size();
for (int i=0; i<n; ++i) {
@@ -169,8 +169,8 @@ void UpdateLevelOfDetailJob::updateEntityLodByDistance(Entity *entity, LevelOfDe
void UpdateLevelOfDetailJob::updateEntityLodByScreenArea(Entity *entity, LevelOfDetail *lod)
{
- QMatrix4x4 viewMatrix;
- QMatrix4x4 projectionMatrix;
+ Matrix4x4 viewMatrix;
+ Matrix4x4 projectionMatrix;
if (!Render::CameraLens::viewMatrixForCamera(m_manager->renderNodesManager(), lod->camera(), viewMatrix, projectionMatrix))
return;
@@ -182,7 +182,7 @@ void UpdateLevelOfDetailJob::updateEntityLodByScreenArea(Entity *entity, LevelOf
const PickingUtils::ViewportCameraAreaTriplet &vca = vcaTriplets.front();
const QVector<qreal> thresholds = lod->thresholds();
- Sphere bv(lod->center(), lod->radius());
+ Sphere bv(Vector3D(lod->center()), lod->radius());
if (!lod->hasBoundingVolumeOverride() && entity->worldBoundingVolume() != nullptr) {
bv = *(entity->worldBoundingVolume());
} else {
diff --git a/src/render/jobs/updatelevelofdetailjob_p.h b/src/render/jobs/updatelevelofdetailjob_p.h
index c29501a09..71c7d003d 100644
--- a/src/render/jobs/updatelevelofdetailjob_p.h
+++ b/src/render/jobs/updatelevelofdetailjob_p.h
@@ -84,6 +84,7 @@ private:
void updateEntityLod(Entity *entity);
void updateEntityLodByDistance(Entity *entity, LevelOfDetail *lod);
void updateEntityLodByScreenArea(Entity *entity, LevelOfDetail *lod);
+
QRect windowViewport(const QSize &area, const QRectF &relativeViewport) const;
NodeManagers *m_manager;
diff --git a/src/render/jobs/updateworldtransformjob.cpp b/src/render/jobs/updateworldtransformjob.cpp
index 8b11cd309..c56ed8507 100644
--- a/src/render/jobs/updateworldtransformjob.cpp
+++ b/src/render/jobs/updateworldtransformjob.cpp
@@ -54,9 +54,9 @@ namespace Render {
namespace {
-void updateWorldTransformAndBounds(Qt3DRender::Render::Entity *node, const QMatrix4x4 &parentTransform)
+void updateWorldTransformAndBounds(Qt3DRender::Render::Entity *node, const Matrix4x4 &parentTransform)
{
- QMatrix4x4 worldTransform(parentTransform);
+ Matrix4x4 worldTransform(parentTransform);
Transform *nodeTransform = node->renderComponent<Transform>();
if (nodeTransform != nullptr && nodeTransform->isEnabled())
@@ -94,7 +94,7 @@ void UpdateWorldTransformJob::run()
qCDebug(Jobs) << "Entering" << Q_FUNC_INFO << QThread::currentThread();
- QMatrix4x4 parentTransform;
+ Matrix4x4 parentTransform;
Entity *parent = m_node->parent();
if (parent != nullptr)
parentTransform = *(parent->worldTransform());
diff --git a/src/render/materialsystem/shaderdata.cpp b/src/render/materialsystem/shaderdata.cpp
index fec1e66ac..de423c3c2 100644
--- a/src/render/materialsystem/shaderdata.cpp
+++ b/src/render/materialsystem/shaderdata.cpp
@@ -171,7 +171,7 @@ void ShaderData::cleanup(NodeManagers *managers)
m_updatedShaderData.clear();
}
-QVariant ShaderData::getTransformedProperty(const QString &name, const QMatrix4x4 &viewMatrix)
+QVariant ShaderData::getTransformedProperty(const QString &name, const Matrix4x4 &viewMatrix)
{
// Note protecting m_worldMatrix at this point as we assume all world updates
// have been performed when reaching this point
@@ -180,11 +180,11 @@ QVariant ShaderData::getTransformedProperty(const QString &name, const QMatrix4x
const TransformType transformType = it.value();
switch (transformType) {
case ModelToEye:
- return QVariant::fromValue(viewMatrix * m_worldMatrix * m_originalProperties.value(name).value<QVector3D>());
+ return QVariant::fromValue(viewMatrix * m_worldMatrix * Vector3D(m_originalProperties.value(name).value<QVector3D>()));
case ModelToWorld:
- return QVariant::fromValue(m_worldMatrix * m_originalProperties.value(it.key()).value<QVector3D>());
+ return QVariant::fromValue(m_worldMatrix * Vector3D(m_originalProperties.value(it.key()).value<QVector3D>()));
case ModelToWorldDirection:
- return QVariant::fromValue((m_worldMatrix * QVector4D(m_originalProperties.value(it.key()).value<QVector3D>(), 0.0f)).toVector3D());
+ return QVariant::fromValue(Vector3D(m_worldMatrix * Vector4D(m_originalProperties.value(it.key()).value<QVector3D>(), 0.0f)));
case NoTransform:
break;
}
@@ -193,7 +193,7 @@ QVariant ShaderData::getTransformedProperty(const QString &name, const QMatrix4x
}
// Called by FramePreparationJob or by RenderView when dealing with lights
-void ShaderData::updateWorldTransform(const QMatrix4x4 &worldMatrix)
+void ShaderData::updateWorldTransform(const Matrix4x4 &worldMatrix)
{
QMutexLocker lock(&m_mutex);
if (m_worldMatrix != worldMatrix) {
diff --git a/src/render/materialsystem/shaderdata_p.h b/src/render/materialsystem/shaderdata_p.h
index 987687eab..5951af53c 100644
--- a/src/render/materialsystem/shaderdata_p.h
+++ b/src/render/materialsystem/shaderdata_p.h
@@ -55,7 +55,7 @@
#include <Qt3DRender/private/shadervariables_p.h>
#include <Qt3DRender/qshaderdata.h>
#include <QMutex>
-#include <QMatrix4x4>
+#include <Qt3DCore/private/matrix4x4_p.h>
QT_BEGIN_NAMESPACE
@@ -83,13 +83,13 @@ public:
QHash<QString, QVariant> properties() const { return m_originalProperties; }
// Called by FramePreparationJob
- void updateWorldTransform(const QMatrix4x4 &worldMatrix);
+ void updateWorldTransform(const Matrix4x4 &worldMatrix);
// Call by RenderViewJob
void markDirty();
TransformType propertyTransformType(const QString &name) const;
- QVariant getTransformedProperty(const QString &name, const QMatrix4x4 &viewMatrix);
+ QVariant getTransformedProperty(const QString &name, const Matrix4x4 &viewMatrix);
// Called by FrameCleanupJob
static void cleanup(NodeManagers *managers);
@@ -114,8 +114,8 @@ protected:
QMutex m_mutex;
static QVector<Qt3DCore::QNodeId> m_updatedShaderData;
- QMatrix4x4 m_worldMatrix;
- QMatrix4x4 m_viewMatrix;
+ Matrix4x4 m_worldMatrix;
+ Matrix4x4 m_viewMatrix;
NodeManagers *m_managers;
void clearUpdatedProperties();
diff --git a/src/render/raycasting/boundingsphere_p.h b/src/render/raycasting/boundingsphere_p.h
index 63bd8a562..bcffbaa19 100644
--- a/src/render/raycasting/boundingsphere_p.h
+++ b/src/render/raycasting/boundingsphere_p.h
@@ -53,6 +53,7 @@
#include <Qt3DRender/qt3drender_global.h>
#include <Qt3DRender/private/qboundingvolume_p.h>
+#include <Qt3DCore/private/vector3d_p.h>
QT_BEGIN_NAMESPACE
@@ -65,7 +66,7 @@ public:
BoundingSphere();
~BoundingSphere();
- virtual QVector3D center() const = 0;
+ virtual Vector3D center() const = 0;
virtual float radius() const = 0;
};
diff --git a/src/render/raycasting/qabstractcollisionqueryservice.cpp b/src/render/raycasting/qabstractcollisionqueryservice.cpp
index 993ad840e..5148df911 100644
--- a/src/render/raycasting/qabstractcollisionqueryservice.cpp
+++ b/src/render/raycasting/qabstractcollisionqueryservice.cpp
@@ -62,8 +62,8 @@ void QAbstractCollisionQueryService::setResultHandle(QCollisionQueryResult &resu
}
void QAbstractCollisionQueryService::addEntityHit(QCollisionQueryResult &result, Qt3DCore::QNodeId entity,
- const QVector3D& intersection, float distance,
- const QVector3D& uvw)
+ const Vector3D& intersection, float distance,
+ const Vector3D& uvw)
{
result.d_func()->addEntityHit(entity, intersection, distance, uvw);
}
diff --git a/src/render/raycasting/qabstractcollisionqueryservice_p.h b/src/render/raycasting/qabstractcollisionqueryservice_p.h
index 1c1261937..fa35792d0 100644
--- a/src/render/raycasting/qabstractcollisionqueryservice_p.h
+++ b/src/render/raycasting/qabstractcollisionqueryservice_p.h
@@ -97,8 +97,8 @@ protected:
QAbstractCollisionQueryService(QAbstractCollisionQueryServicePrivate &dd);
void setResultHandle(QCollisionQueryResult &result, const QQueryHandle &handle);
- void addEntityHit(QCollisionQueryResult &result, Qt3DCore::QNodeId entity, const QVector3D &intersection,
- float distance, const QVector3D &uvw);
+ void addEntityHit(QCollisionQueryResult &result, Qt3DCore::QNodeId entity, const Vector3D &intersection,
+ float distance, const Vector3D &uvw);
private:
Q_DECLARE_PRIVATE(QAbstractCollisionQueryService)
diff --git a/src/render/raycasting/qboundingvolume_p.h b/src/render/raycasting/qboundingvolume_p.h
index 8267c2b18..b63463f23 100644
--- a/src/render/raycasting/qboundingvolume_p.h
+++ b/src/render/raycasting/qboundingvolume_p.h
@@ -53,6 +53,7 @@
#include <Qt3DRender/qt3drender_global.h>
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/vector3d_p.h>
QT_BEGIN_NAMESPACE
namespace Qt3DRender {
@@ -72,8 +73,8 @@ public:
};
virtual Qt3DCore::QNodeId id() const = 0;
- virtual bool intersects(const QRay3D &ray, QVector3D *q = nullptr,
- QVector3D *uvw = nullptr) const = 0;
+ virtual bool intersects(const QRay3D &ray, Vector3D *q = nullptr,
+ Vector3D *uvw = nullptr) const = 0;
virtual Type type() const = 0;
};
diff --git a/src/render/raycasting/qcollisionqueryresult.cpp b/src/render/raycasting/qcollisionqueryresult.cpp
index 62975200c..9d1e484b6 100644
--- a/src/render/raycasting/qcollisionqueryresult.cpp
+++ b/src/render/raycasting/qcollisionqueryresult.cpp
@@ -56,8 +56,8 @@ QCollisionQueryResultPrivate::QCollisionQueryResultPrivate(const QCollisionQuery
{
}
-void QCollisionQueryResultPrivate::addEntityHit(Qt3DCore::QNodeId entity, const QVector3D& intersection,
- float distance, const QVector3D& uvw)
+void QCollisionQueryResultPrivate::addEntityHit(Qt3DCore::QNodeId entity, const Vector3D& intersection,
+ float distance, const Vector3D& uvw)
{
m_hits.append(QCollisionQueryResult::Hit(entity, intersection, distance, uvw));
}
diff --git a/src/render/raycasting/qcollisionqueryresult_p.h b/src/render/raycasting/qcollisionqueryresult_p.h
index 1a430e019..24371d30e 100644
--- a/src/render/raycasting/qcollisionqueryresult_p.h
+++ b/src/render/raycasting/qcollisionqueryresult_p.h
@@ -53,8 +53,8 @@
#include <Qt3DRender/qt3drender_global.h>
#include <Qt3DCore/qnodeid.h>
+#include <Qt3DCore/private/vector3d_p.h>
#include <QVector>
-#include <QVector3D>
#include <QSharedData>
QT_BEGIN_NAMESPACE
@@ -84,7 +84,7 @@ public:
m_vertexIndex[0] = m_vertexIndex[1] = m_vertexIndex[2] = 0;
}
- Hit(Qt3DCore::QNodeId entity, const QVector3D &intersection, float distance, const QVector3D &uvw)
+ Hit(Qt3DCore::QNodeId entity, const Vector3D &intersection, float distance, const Vector3D &uvw)
: m_entityId(entity)
, m_intersection(intersection)
, m_distance(distance)
@@ -94,11 +94,11 @@ public:
Qt3DCore::QNodeId m_entityId;
HitType m_type;
- QVector3D m_intersection;
+ Vector3D m_intersection;
float m_distance;
uint m_primitiveIndex;
uint m_vertexIndex[3];
- QVector3D m_uvw;
+ Vector3D m_uvw;
};
QCollisionQueryResult();
@@ -146,8 +146,8 @@ public:
explicit QCollisionQueryResultPrivate(const QCollisionQueryResultPrivate &copy);
void setHandle(const QQueryHandle &handle);
- void addEntityHit(Qt3DCore::QNodeId entity, const QVector3D& intersection, float distance,
- const QVector3D& uvw);
+ void addEntityHit(Qt3DCore::QNodeId entity, const Vector3D& intersection, float distance,
+ const Vector3D& uvw);
QQueryHandle m_handle;
QVector<QCollisionQueryResult::Hit> m_hits;
diff --git a/src/render/raycasting/qray3d.cpp b/src/render/raycasting/qray3d.cpp
index 3f136deb8..40d16bc73 100644
--- a/src/render/raycasting/qray3d.cpp
+++ b/src/render/raycasting/qray3d.cpp
@@ -93,7 +93,7 @@ QRay3D::QRay3D()
QRay3D thruAB(pointA, pointB - pointA);
\endcode
*/
-QRay3D::QRay3D(const QVector3D &origin, const QVector3D &direction, float distance)
+QRay3D::QRay3D(const Vector3D &origin, const Vector3D &direction, float distance)
: m_origin(origin)
, m_direction(direction)
, m_distance(distance)
@@ -110,7 +110,7 @@ QRay3D::~QRay3D()
\sa setOrigin(), direction()
*/
-QVector3D QRay3D::origin() const
+Vector3D QRay3D::origin() const
{
return m_origin;
}
@@ -122,7 +122,7 @@ QVector3D QRay3D::origin() const
\sa origin(), setDirection()
*/
-void QRay3D::setOrigin(const QVector3D &value)
+void QRay3D::setOrigin(const Vector3D &value)
{
m_origin = value;
}
@@ -134,7 +134,7 @@ void QRay3D::setOrigin(const QVector3D &value)
\sa setDirection(), origin()
*/
-QVector3D QRay3D::direction() const
+Vector3D QRay3D::direction() const
{
return m_direction;
}
@@ -146,7 +146,7 @@ QVector3D QRay3D::direction() const
\sa direction(), setOrigin()
*/
-void QRay3D::setDirection(const QVector3D &value)
+void QRay3D::setDirection(const Vector3D &value)
{
if (value.isNull())
return;
@@ -164,12 +164,12 @@ void QRay3D::setDistance(float distance)
m_distance = distance;
}
-QVector3D QRay3D::point(float t) const
+Vector3D QRay3D::point(float t) const
{
return m_origin + t * m_direction;
}
-QRay3D &QRay3D::transform(const QMatrix4x4 &matrix)
+QRay3D &QRay3D::transform(const Matrix4x4 &matrix)
{
m_origin = matrix * m_origin;
m_direction = matrix.mapVector(m_direction);
@@ -177,7 +177,7 @@ QRay3D &QRay3D::transform(const QMatrix4x4 &matrix)
return *this;
}
-QRay3D QRay3D::transformed(const QMatrix4x4 &matrix) const
+QRay3D QRay3D::transformed(const Matrix4x4 &matrix) const
{
return QRay3D(matrix * m_origin, matrix.mapVector(m_direction));
}
@@ -195,12 +195,12 @@ bool QRay3D::operator!=(const QRay3D &other) const
/*!
Returns true if \a point lies on this ray; false otherwise.
*/
-bool QRay3D::contains(const QVector3D &point) const
+bool QRay3D::contains(const Vector3D &point) const
{
- QVector3D ppVec(point - m_origin);
+ Vector3D ppVec(point - m_origin);
if (ppVec.isNull()) // point coincides with origin
return true;
- const float dot = QVector3D::dotProduct(ppVec, m_direction);
+ const float dot = Vector3D ::dotProduct(ppVec, m_direction);
if (qFuzzyIsNull(dot))
return false;
return qFuzzyCompare(dot*dot, ppVec.lengthSquared() * m_direction.lengthSquared());
@@ -213,7 +213,7 @@ bool QRay3D::contains(const QVector3D &point) const
*/
bool QRay3D::contains(const QRay3D &ray) const
{
- const float dot = QVector3D::dotProduct(m_direction, ray.direction());
+ const float dot = Vector3D ::dotProduct(m_direction, ray.direction());
if (!qFuzzyCompare(dot*dot, m_direction.lengthSquared() * ray.direction().lengthSquared()))
return false;
return contains(ray.origin());
@@ -247,11 +247,11 @@ bool QRay3D::contains(const QRay3D &ray) const
\sa point(), project()
*/
-float QRay3D::projectedDistance(const QVector3D &point) const
+float QRay3D::projectedDistance(const Vector3D &point) const
{
Q_ASSERT(!m_direction.isNull());
- return QVector3D::dotProduct(point - m_origin, m_direction) /
+ return Vector3D ::dotProduct(point - m_origin, m_direction) /
m_direction.lengthSquared();
}
@@ -264,10 +264,10 @@ float QRay3D::projectedDistance(const QVector3D &point) const
\sa projectedDistance()
*/
-QVector3D QRay3D::project(const QVector3D &vector) const
+Vector3D QRay3D::project(const Vector3D &vector) const
{
- QVector3D norm = m_direction.normalized();
- return QVector3D::dotProduct(vector, norm) * norm;
+ Vector3D norm = m_direction.normalized();
+ return Vector3D ::dotProduct(vector, norm) * norm;
}
/*!
@@ -277,7 +277,7 @@ QVector3D QRay3D::project(const QVector3D &vector) const
\sa point()
*/
-float QRay3D::distance(const QVector3D &point) const
+float QRay3D::distance(const Vector3D &point) const
{
float t = projectedDistance(point);
return (point - (m_origin + t * m_direction)).length();
@@ -350,8 +350,8 @@ QDebug operator<<(QDebug dbg, const QRay3D &ray)
*/
QDataStream &operator<<(QDataStream &stream, const QRay3D &ray)
{
- stream << ray.origin();
- stream << ray.direction();
+ stream << convertToQVector3D(ray.origin());
+ stream << convertToQVector3D(ray.direction());
return stream;
}
@@ -364,9 +364,10 @@ QDataStream &operator<<(QDataStream &stream, const QRay3D &ray)
QDataStream &operator>>(QDataStream &stream, QRay3D &ray)
{
QVector3D origin, direction;
+
stream >> origin;
stream >> direction;
- ray = QRay3D(origin, direction);
+ ray = QRay3D(Vector3D(origin), Vector3D(direction));
return stream;
}
diff --git a/src/render/raycasting/qray3d_p.h b/src/render/raycasting/qray3d_p.h
index 7c1156b76..c5e2be078 100644
--- a/src/render/raycasting/qray3d_p.h
+++ b/src/render/raycasting/qray3d_p.h
@@ -53,8 +53,8 @@
//
#include <Qt3DRender/qt3drender_global.h>
-#include <QtGui/qvector3d.h>
-#include <QtGui/qmatrix4x4.h>
+#include <Qt3DCore/private/matrix4x4_p.h>
+#include <Qt3DCore/private/vector3d_p.h>
QT_BEGIN_NAMESPACE
@@ -65,37 +65,37 @@ class QT3DRENDERSHARED_EXPORT QRay3D
{
public:
QRay3D();
- explicit QRay3D(const QVector3D &origin, const QVector3D &direction = QVector3D(0.0f, 0.0f, 1.0f), float distance = 1.0f);
+ explicit QRay3D(const Vector3D &origin, const Vector3D &direction = Vector3D(0.0f, 0.0f, 1.0f), float distance = 1.0f);
~QRay3D();
- QVector3D origin() const;
- void setOrigin(const QVector3D &value);
+ Vector3D origin() const;
+ void setOrigin(const Vector3D &value);
- QVector3D direction() const;
- void setDirection(const QVector3D &value);
+ Vector3D direction() const;
+ void setDirection(const Vector3D &value);
float distance() const;
void setDistance(float distance);
- bool contains(const QVector3D &point) const;
+ bool contains(const Vector3D &point) const;
bool contains(const QRay3D &ray) const;
- QVector3D point(float t) const;
- float projectedDistance(const QVector3D &point) const;
+ Vector3D point(float t) const;
+ float projectedDistance(const Vector3D &point) const;
- QVector3D project(const QVector3D &vector) const;
+ Vector3D project(const Vector3D &vector) const;
- float distance(const QVector3D &point) const;
+ float distance(const Vector3D &point) const;
- QRay3D &transform(const QMatrix4x4 &matrix);
- QRay3D transformed(const QMatrix4x4 &matrix) const;
+ QRay3D &transform(const Matrix4x4 &matrix);
+ QRay3D transformed(const Matrix4x4 &matrix) const;
bool operator==(const QRay3D &other) const;
bool operator!=(const QRay3D &other) const;
private:
- QVector3D m_origin;
- QVector3D m_direction;
+ Vector3D m_origin;
+ Vector3D m_direction;
float m_distance;
};
QT3D_DECLARE_TYPEINFO_2(Qt3DRender, RayCasting, QRay3D, Q_MOVABLE_TYPE)
diff --git a/src/render/raycasting/qraycastingservice.cpp b/src/render/raycasting/qraycastingservice.cpp
index e0c7b6199..8debeac6a 100644
--- a/src/render/raycasting/qraycastingservice.cpp
+++ b/src/render/raycasting/qraycastingservice.cpp
@@ -67,8 +67,8 @@ struct Hit
bool intersects;
float distance;
Qt3DCore::QNodeId id;
- QVector3D intersection;
- QVector3D uvw;
+ Vector3D intersection;
+ Vector3D uvw;
};
bool compareHitsDistance(const Hit &a, const Hit &b)
diff --git a/src/render/render.pro b/src/render/render.pro
index c31db94b7..e8f192643 100644
--- a/src/render/render.pro
+++ b/src/render/render.pro
@@ -28,10 +28,21 @@ gcov {
QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage
}
+qtConfig(qt3d-simd-avx2) {
+ CONFIG += simd
+ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2
+}
+
+qtConfig(qt3d-simd-sse2):!qtConfig(qt3d-simd-avx2) {
+ CONFIG += simd
+ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE2
+}
+
HEADERS += \
renderlogging_p.h \
qt3drender_global.h \
- qt3drender_global_p.h
+ qt3drender_global_p.h \
+ aligned_malloc_p.h
# otherwise mingw headers do not declare common functions like ::strcasecmp
win32-g++*:QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x
diff --git a/tests/auto/core/common/common.pri b/tests/auto/core/common/common.pri
index 3a85df875..9b761b8e0 100644
--- a/tests/auto/core/common/common.pri
+++ b/tests/auto/core/common/common.pri
@@ -15,3 +15,13 @@ qtConfig(private_tests) {
}
QT += core-private 3dcore 3dcore-private
+
+qtConfig(qt3d-simd-avx2) {
+ CONFIG += simd
+ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2
+}
+
+qtConfig(qt3d-simd-sse2):!qtConfig(qt3d-simd-avx2) {
+ CONFIG += simd
+ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE2
+}
diff --git a/tests/auto/core/matrix4x4_avx2/matrix4x4_avx2.pro b/tests/auto/core/matrix4x4_avx2/matrix4x4_avx2.pro
index 4a97ab2a9..4db8a1975 100644
--- a/tests/auto/core/matrix4x4_avx2/matrix4x4_avx2.pro
+++ b/tests/auto/core/matrix4x4_avx2/matrix4x4_avx2.pro
@@ -1,6 +1,6 @@
TARGET = tst_matrix4x4_avx2
CONFIG += testcase
-QT += testlib 3dcore 3dcore-private
+QT += testlib 3dcore 3dcore-private 3drender-private
QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2
diff --git a/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp b/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp
index 41b0c535c..144df6711 100644
--- a/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp
+++ b/tests/auto/core/matrix4x4_avx2/tst_matrix4x4_avx2.cpp
@@ -28,12 +28,15 @@
#include <QtTest/QtTest>
#include <Qt3DCore/private/matrix4x4_avx2_p.h>
+#include <Qt3DRender/private/aligned_malloc_p.h>
using namespace Qt3DCore;
class tst_Matrix4x4_AVX2: public QObject
{
Q_OBJECT
+public:
+ QT3D_ALIGNED_MALLOC_AND_FREE()
private Q_SLOTS:
diff --git a/tests/auto/core/vector3d_sse/tst_vector3d_sse.cpp b/tests/auto/core/vector3d_sse/tst_vector3d_sse.cpp
index be9fbc347..7ea79a5f5 100644
--- a/tests/auto/core/vector3d_sse/tst_vector3d_sse.cpp
+++ b/tests/auto/core/vector3d_sse/tst_vector3d_sse.cpp
@@ -668,6 +668,14 @@ private Q_SLOTS:
// THEN
QVERIFY(v0 == v1);
}
+ {
+ // GIVEN
+ Vector3D_SSE v0(6.0f, 6.0f, 6.0f);
+ Vector3D_SSE v1(6.0f, 6.0f, 6.0f);
+
+ // THEN
+ QVERIFY(v0 == v1);
+ }
}
void checkInequality()
@@ -787,11 +795,6 @@ private Q_SLOTS:
}
}
- void checkNormalized()
- {
-
- }
-
void checkIsNull()
{
{
diff --git a/tests/auto/core/vector4d_sse/tst_vector4d_sse.cpp b/tests/auto/core/vector4d_sse/tst_vector4d_sse.cpp
index e7b58c8cf..ed9722ffb 100644
--- a/tests/auto/core/vector4d_sse/tst_vector4d_sse.cpp
+++ b/tests/auto/core/vector4d_sse/tst_vector4d_sse.cpp
@@ -823,6 +823,98 @@ private Q_SLOTS:
QCOMPARE(v0.w(), v1.w());
}
}
+
+ void checkLengthSquared()
+ {
+ {
+ // GIVEN
+ Vector4D_SSE v0(10.0f, 10.0f, 10.0f, 10.0f);
+
+ // THEN
+ QCOMPARE(v0.lengthSquared(), 400.0f);
+ }
+ {
+ // GIVEN
+ Vector4D_SSE v0(3.0f, 1.0f, 2.0f, 4.0f);
+
+ // THEN
+ QCOMPARE(v0.lengthSquared(), 30.0f);
+ }
+ }
+
+ void checkLength()
+ {
+ {
+ // GIVEN
+ Vector4D_SSE v0(3.0f, 0.0f, 0.0f, 0.0f);
+
+ // THEN
+ QCOMPARE(v0.length(), 3.0f);
+ }
+ {
+ // GIVEN
+ Vector4D_SSE v0(0.0f, 10.0f, 0.0f, 0.0f);
+
+ // THEN
+ QCOMPARE(v0.length(), 10.0f);
+ }
+ {
+ // GIVEN
+ Vector4D_SSE v0(0.0f, 0.0f, 9.0f, 0.0f);
+
+ // THEN
+ QCOMPARE(v0.length(), 9.0f);
+ }
+ {
+ // GIVEN
+ Vector4D_SSE v0(0.0f, 0.0f, 0.0f, 8.0f);
+
+ // THEN
+ QCOMPARE(v0.length(), 8.0f);
+ }
+ }
+
+ void checkNormalize()
+ {
+ {
+ // GIVEN
+ Vector4D_SSE v0(10.0f, 0.0f, 0.0f, 0.0f);
+
+ // WHEN
+ v0.normalize();
+
+ // THEN
+ QCOMPARE(v0, Vector4D_SSE(1.0f, 0.0f, 0.0f, 0.0f));
+ }
+ {
+ // GIVEN
+ Vector4D_SSE v0(0.0f, 0.0f, 3.0f, 0.0f);
+
+ // WHEN
+ v0.normalize();
+
+ // THEN
+ QCOMPARE(v0, Vector4D_SSE(0.0, 0.0f, 1.0f, 0.0f));
+ }
+ }
+
+ void checkIsNull()
+ {
+ {
+ // GIVEN
+ Vector4D_SSE v0;
+
+ // THEN
+ QVERIFY(v0.isNull());
+ }
+ {
+ // GIVEN
+ Vector4D_SSE v0(1.0f, 1.0f, 1.0f, 1.0f);
+
+ // THEN
+ QVERIFY(!v0.isNull());
+ }
+ }
};
QTEST_APPLESS_MAIN(tst_Vector4D_SSE)
diff --git a/tests/auto/render/coordinatereader/tst_coordinatereader.cpp b/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
index 7dfe3ceba..afb18fe55 100644
--- a/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
+++ b/tests/auto/render/coordinatereader/tst_coordinatereader.cpp
@@ -67,7 +67,7 @@ public:
{
return m_bufferInfo;
}
- bool verifyCoordinate(uint index, QVector4D value)
+ bool verifyCoordinate(uint index, Vector4D value)
{
return qFuzzyCompare(getCoordinate(index), value);
}
@@ -270,12 +270,12 @@ private Q_SLOTS:
// THEN
QCOMPARE(ret, true);
- QVERIFY(reader.verifyCoordinate(0, QVector4D(0, 0, 1, 1)));
- QVERIFY(reader.verifyCoordinate(1, QVector4D(1, 0, 0, 1)));
- QVERIFY(reader.verifyCoordinate(2, QVector4D(0, 1, 0, 1)));
- QVERIFY(reader.verifyCoordinate(3, QVector4D(0, 0, 1, 1)));
- QVERIFY(reader.verifyCoordinate(4, QVector4D(1, 0, 0, 1)));
- QVERIFY(reader.verifyCoordinate(5, QVector4D(0, 1, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(0, Vector4D(0, 0, 1, 1)));
+ QVERIFY(reader.verifyCoordinate(1, Vector4D(1, 0, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(2, Vector4D(0, 1, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(3, Vector4D(0, 0, 1, 1)));
+ QVERIFY(reader.verifyCoordinate(4, Vector4D(1, 0, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(5, Vector4D(0, 1, 0, 1)));
}
void testReadCoordinateVec4()
@@ -364,12 +364,12 @@ private Q_SLOTS:
// THEN
QCOMPARE(ret, true);
- QVERIFY(reader.verifyCoordinate(0, QVector4D(0, 0, 1, 1)));
- QVERIFY(reader.verifyCoordinate(1, QVector4D(1, 0, 0, 1)));
- QVERIFY(reader.verifyCoordinate(2, QVector4D(0, 1, 0, 0)));
- QVERIFY(reader.verifyCoordinate(3, QVector4D(0, 0, 1, 0)));
- QVERIFY(reader.verifyCoordinate(4, QVector4D(1, 0, 0, 0)));
- QVERIFY(reader.verifyCoordinate(5, QVector4D(0, 1, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(0, Vector4D(0, 0, 1, 1)));
+ QVERIFY(reader.verifyCoordinate(1, Vector4D(1, 0, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(2, Vector4D(0, 1, 0, 0)));
+ QVERIFY(reader.verifyCoordinate(3, Vector4D(0, 0, 1, 0)));
+ QVERIFY(reader.verifyCoordinate(4, Vector4D(1, 0, 0, 0)));
+ QVERIFY(reader.verifyCoordinate(5, Vector4D(0, 1, 0, 1)));
}
void testReadCoordinateFromAttribute()
@@ -468,9 +468,9 @@ private Q_SLOTS:
// THEN
QCOMPARE(ret, true);
- QVERIFY(reader.verifyCoordinate(0, QVector4D(0, 0, 1, 1)));
- QVERIFY(reader.verifyCoordinate(1, QVector4D(0, 1, 0, 1)));
- QVERIFY(reader.verifyCoordinate(2, QVector4D(1, 0, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(0, Vector4D(0, 0, 1, 1)));
+ QVERIFY(reader.verifyCoordinate(1, Vector4D(0, 1, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(2, Vector4D(1, 0, 0, 1)));
// WHEN
ret = reader.setGeometry(backendRenderer,
@@ -479,9 +479,9 @@ private Q_SLOTS:
// THEN
QCOMPARE(ret, true);
- QVERIFY(reader.verifyCoordinate(0, QVector4D(1, 0, 0, 1)));
- QVERIFY(reader.verifyCoordinate(1, QVector4D(0, 0, 1, 1)));
- QVERIFY(reader.verifyCoordinate(2, QVector4D(0, 1, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(0, Vector4D(1, 0, 0, 1)));
+ QVERIFY(reader.verifyCoordinate(1, Vector4D(0, 0, 1, 1)));
+ QVERIFY(reader.verifyCoordinate(2, Vector4D(0, 1, 0, 1)));
}
};
diff --git a/tests/auto/render/qcamera/tst_qcamera.cpp b/tests/auto/render/qcamera/tst_qcamera.cpp
index 82a6d8b89..b630c447a 100644
--- a/tests/auto/render/qcamera/tst_qcamera.cpp
+++ b/tests/auto/render/qcamera/tst_qcamera.cpp
@@ -165,7 +165,7 @@ private Q_SLOTS:
Qt3DRender::Render::Entity *cameraEntity = test->nodeManagers()->lookupResource<Qt3DRender::Render::Entity, Qt3DRender::Render::EntityManager>(camera->id());
// THEN
- QVERIFY(qFuzzyCompare(*cameraEntity->worldTransform(), parentTransform->matrix()));
+ QVERIFY(qFuzzyCompare(convertToQMatrix4x4(*cameraEntity->worldTransform()), convertToQMatrix4x4(parentTransform->matrix())));
}
void checkTransformWithParentAndLookAt()
@@ -193,7 +193,7 @@ private Q_SLOTS:
m.translate(0.f, 1.f, 0.f); // 90 deg z-rotation + x-translation = y-translation
m.rotate(90.f, QVector3D(0.f, 0.f, 1.f));
- const QMatrix4x4 worldTransform = *cameraEntity->worldTransform();
+ const QMatrix4x4 worldTransform = convertToQMatrix4x4(*cameraEntity->worldTransform());
fuzzyCompareMatrix(worldTransform, m);
}
@@ -234,7 +234,7 @@ private Q_SLOTS:
m.translate(3.f, 2.f, -1.f); // child's world translation
m.rotate(90.f, QVector3D(0.f, 1.f, 0.f)); // camera's rotation
- fuzzyCompareMatrix(*childEntity->worldTransform(), m);
+ fuzzyCompareMatrix(convertToQMatrix4x4(*childEntity->worldTransform()), m);
}
};
diff --git a/tests/auto/render/qray3d/tst_qray3d.cpp b/tests/auto/render/qray3d/tst_qray3d.cpp
index e6ab02af0..e9d4d3033 100644
--- a/tests/auto/render/qray3d/tst_qray3d.cpp
+++ b/tests/auto/render/qray3d/tst_qray3d.cpp
@@ -70,7 +70,7 @@ static inline bool fuzzyCompare(float p1, float p2)
return (qAbs(p1 - p2) <= (qIsNull(fac) ? 0.00001f : 0.00001f * fac));
}
-static inline bool fuzzyCompare(const QVector3D &lhs, const QVector3D &rhs)
+static inline bool fuzzyCompare(const Vector3D &lhs, const Vector3D &rhs)
{
if (fuzzyCompare(lhs.x(), rhs.x()) &&
fuzzyCompare(lhs.y(), rhs.y()) &&
@@ -85,59 +85,59 @@ static inline bool fuzzyCompare(const QVector3D &lhs, const QVector3D &rhs)
void tst_QRay3D::create_data()
{
- QTest::addColumn<QVector3D>("point");
- QTest::addColumn<QVector3D>("direction");
+ QTest::addColumn<Vector3D>("point");
+ QTest::addColumn<Vector3D>("direction");
// normalized direction vectors
QTest::newRow("line on x-axis from origin")
- << QVector3D()
- << QVector3D(1.0f, 0.0f, 0.0f);
+ << Vector3D()
+ << Vector3D(1.0f, 0.0f, 0.0f);
QTest::newRow("line parallel -z-axis from 3,3,3")
- << QVector3D(3.0f, 3.0f, 3.0f)
- << QVector3D(0.0f, 0.0f, -1.0f);
+ << Vector3D(3.0f, 3.0f, 3.0f)
+ << Vector3D(0.0f, 0.0f, -1.0f);
QTest::newRow("vertical line (parallel to y-axis)")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(0.0f, 1.0f, 0.0f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(0.0f, 1.0f, 0.0f);
QTest::newRow("equidistant from all 3 axes")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(0.57735026919f, 0.57735026919f, 0.57735026919f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(0.57735026919f, 0.57735026919f, 0.57735026919f);
// non-normalized direction vectors
QTest::newRow("line on x-axis from origin - B")
- << QVector3D()
- << QVector3D(2.0f, 0.0f, 0.0f);
+ << Vector3D()
+ << Vector3D(2.0f, 0.0f, 0.0f);
QTest::newRow("line parallel -z-axis from 3,3,3 - B")
- << QVector3D(3.0f, 3.0f, 3.0f)
- << QVector3D(0.0f, 0.0f, -0.7f);
+ << Vector3D(3.0f, 3.0f, 3.0f)
+ << Vector3D(0.0f, 0.0f, -0.7f);
QTest::newRow("vertical line (parallel to y-axis) - B")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(0.0f, 5.3f, 0.0f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(0.0f, 5.3f, 0.0f);
QTest::newRow("equidistant from all 3 axes - B")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(1.0f, 1.0f, 1.0f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(1.0f, 1.0f, 1.0f);
QTest::newRow("negative direction")
- << QVector3D(-3.0f, -3.0f, -3.0f)
- << QVector3D(-1.2f, -1.8f, -2.4f);
+ << Vector3D(-3.0f, -3.0f, -3.0f)
+ << Vector3D(-1.2f, -1.8f, -2.4f);
}
void tst_QRay3D::create()
{
- QFETCH(QVector3D, point);
- QFETCH(QVector3D, direction);
+ QFETCH(Vector3D, point);
+ QFETCH(Vector3D, direction);
Qt3DRender::RayCasting::QRay3D ray(point, direction);
QVERIFY(fuzzyCompare(ray.direction(), direction));
QVERIFY(fuzzyCompare(ray.origin(), point));
Qt3DRender::RayCasting::QRay3D ray2;
- QCOMPARE(ray2.origin(), QVector3D(0, 0, 0));
- QCOMPARE(ray2.direction(), QVector3D(0, 0, 1));
+ QCOMPARE(ray2.origin(), Vector3D(0, 0, 0));
+ QCOMPARE(ray2.direction(), Vector3D(0, 0, 1));
ray2.setOrigin(point);
ray2.setDirection(direction);
QVERIFY(fuzzyCompare(ray.direction(), direction));
@@ -146,97 +146,97 @@ void tst_QRay3D::create()
void tst_QRay3D::projection_data()
{
- QTest::addColumn<QVector3D>("point");
- QTest::addColumn<QVector3D>("direction");
- QTest::addColumn<QVector3D>("vector");
- QTest::addColumn<QVector3D>("expected");
+ QTest::addColumn<Vector3D>("point");
+ QTest::addColumn<Vector3D>("direction");
+ QTest::addColumn<Vector3D>("vector");
+ QTest::addColumn<Vector3D>("expected");
QTest::newRow("line on x-axis from origin")
- << QVector3D()
- << QVector3D(2.0f, 0.0f, 0.0f)
- << QVector3D(0.6f, 0.0f, 0.0f)
- << QVector3D(0.6f, 0.0f, 0.0f);
+ << Vector3D()
+ << Vector3D(2.0f, 0.0f, 0.0f)
+ << Vector3D(0.6f, 0.0f, 0.0f)
+ << Vector3D(0.6f, 0.0f, 0.0f);
QTest::newRow("line parallel -z-axis from 3,3,3")
- << QVector3D(3.0f, 3.0f, 3.0f)
- << QVector3D(0.0f, 0.0f, -0.7f)
- << QVector3D(3.0f, 3.0f, 2.4f)
- << QVector3D(0.0f, 0.0f, 2.4f);
+ << Vector3D(3.0f, 3.0f, 3.0f)
+ << Vector3D(0.0f, 0.0f, -0.7f)
+ << Vector3D(3.0f, 3.0f, 2.4f)
+ << Vector3D(0.0f, 0.0f, 2.4f);
QTest::newRow("vertical line (parallel to y-axis)")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(0.0f, 5.3f, 0.0f)
- << QVector3D(0.5f, 0.6f, 0.5f)
- << QVector3D(0.0f, 0.6f, 0.0f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(0.0f, 5.3f, 0.0f)
+ << Vector3D(0.5f, 0.6f, 0.5f)
+ << Vector3D(0.0f, 0.6f, 0.0f);
QTest::newRow("equidistant from all 3 axes, project y-axis (with some z & x)")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(1.0f, 1.0f, 1.0f)
- << QVector3D(0.5f, 5.0f, 0.5f)
- << QVector3D(2.0f, 2.0f, 2.0f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(1.0f, 1.0f, 1.0f)
+ << Vector3D(0.5f, 5.0f, 0.5f)
+ << Vector3D(2.0f, 2.0f, 2.0f);
QTest::newRow("negative direction line, project +ve y-axis (with some z & x)")
- << QVector3D(-3.0f, -3.0f, -3.0f)
- << QVector3D(-1.2f, -1.8f, -2.4f)
- << QVector3D(0.5f, 5.0f, 0.5f)
- << QVector3D(1.241379261016846f, 1.862068772315979f, 2.48275852203369f);
+ << Vector3D(-3.0f, -3.0f, -3.0f)
+ << Vector3D(-1.2f, -1.8f, -2.4f)
+ << Vector3D(0.5f, 5.0f, 0.5f)
+ << Vector3D(1.241379261016846f, 1.862068772315979f, 2.48275852203369f);
}
void tst_QRay3D::projection()
{
- QFETCH(QVector3D, point);
- QFETCH(QVector3D, direction);
- QFETCH(QVector3D, vector);
- QFETCH(QVector3D, expected);
+ QFETCH(Vector3D, point);
+ QFETCH(Vector3D, direction);
+ QFETCH(Vector3D, vector);
+ QFETCH(Vector3D, expected);
Qt3DRender::RayCasting::QRay3D line(point, direction);
- QVector3D result = line.project(vector);
+ Vector3D result = line.project(vector);
QVERIFY(fuzzyCompare(result, expected));
}
void tst_QRay3D::point_data()
{
- QTest::addColumn<QVector3D>("point");
- QTest::addColumn<QVector3D>("direction");
- QTest::addColumn<QVector3D>("point_on_line_pos_0_6");
- QTest::addColumn<QVector3D>("point_on_line_neg_7_2");
+ QTest::addColumn<Vector3D>("point");
+ QTest::addColumn<Vector3D>("direction");
+ QTest::addColumn<Vector3D>("point_on_line_pos_0_6");
+ QTest::addColumn<Vector3D>("point_on_line_neg_7_2");
QTest::newRow("line on x-axis from origin")
- << QVector3D()
- << QVector3D(2.0f, 0.0f, 0.0f)
- << QVector3D(1.2f, 0.0f, 0.0f)
- << QVector3D(-14.4f, 0.0f, 0.0f);
+ << Vector3D()
+ << Vector3D(2.0f, 0.0f, 0.0f)
+ << Vector3D(1.2f, 0.0f, 0.0f)
+ << Vector3D(-14.4f, 0.0f, 0.0f);
QTest::newRow("line parallel -z-axis from 3,3,3")
- << QVector3D(3.0f, 3.0f, 3.0f)
- << QVector3D(0.0f, 0.0f, -0.7f)
- << QVector3D(3.0f, 3.0f, 2.58f)
- << QVector3D(3.0f, 3.0f, 8.04f);
+ << Vector3D(3.0f, 3.0f, 3.0f)
+ << Vector3D(0.0f, 0.0f, -0.7f)
+ << Vector3D(3.0f, 3.0f, 2.58f)
+ << Vector3D(3.0f, 3.0f, 8.04f);
QTest::newRow("vertical line (parallel to y-axis)")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(0.0f, 5.3f, 0.0f)
- << QVector3D(0.5f, 3.18f, 0.5f)
- << QVector3D(0.5f, -38.16f, 0.5f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(0.0f, 5.3f, 0.0f)
+ << Vector3D(0.5f, 3.18f, 0.5f)
+ << Vector3D(0.5f, -38.16f, 0.5f);
QTest::newRow("equidistant from all 3 axes")
- << QVector3D(0.5f, 0.0f, 0.5f)
- << QVector3D(1.0f, 1.0f, 1.0f)
- << QVector3D(1.1f, 0.6f, 1.1f)
- << QVector3D(-6.7f, -7.2f, -6.7f);
+ << Vector3D(0.5f, 0.0f, 0.5f)
+ << Vector3D(1.0f, 1.0f, 1.0f)
+ << Vector3D(1.1f, 0.6f, 1.1f)
+ << Vector3D(-6.7f, -7.2f, -6.7f);
QTest::newRow("negative direction")
- << QVector3D(-3.0f, -3.0f, -3.0f)
- << QVector3D(-1.2f, -1.8f, -2.4f)
- << QVector3D(-3.72f, -4.08f, -4.44f)
- << QVector3D(5.64f, 9.96f, 14.28f);
+ << Vector3D(-3.0f, -3.0f, -3.0f)
+ << Vector3D(-1.2f, -1.8f, -2.4f)
+ << Vector3D(-3.72f, -4.08f, -4.44f)
+ << Vector3D(5.64f, 9.96f, 14.28f);
}
void tst_QRay3D::point()
{
- QFETCH(QVector3D, point);
- QFETCH(QVector3D, direction);
- QFETCH(QVector3D, point_on_line_pos_0_6);
- QFETCH(QVector3D, point_on_line_neg_7_2);
+ QFETCH(Vector3D, point);
+ QFETCH(Vector3D, direction);
+ QFETCH(Vector3D, point_on_line_pos_0_6);
+ QFETCH(Vector3D, point_on_line_neg_7_2);
Qt3DRender::RayCasting::QRay3D line(point, direction);
QVERIFY(fuzzyCompare(line.point(0.6f), point_on_line_pos_0_6));
QVERIFY(fuzzyCompare(line.point(-7.2f), point_on_line_neg_7_2));
@@ -246,39 +246,39 @@ void tst_QRay3D::point()
void tst_QRay3D::contains_point_data()
{
- QTest::addColumn<QVector3D>("origin");
- QTest::addColumn<QVector3D>("direction");
- QTest::addColumn<QVector3D>("point");
+ QTest::addColumn<Vector3D>("origin");
+ QTest::addColumn<Vector3D>("direction");
+ QTest::addColumn<Vector3D>("point");
QTest::addColumn<bool>("contains");
QTest::newRow("bogus this line with null direction")
- << QVector3D(1.0, 3.0, 3.0)
- << QVector3D(0.0, 0.0, 0.0)
- << QVector3D(1.0, 2.0, 4.0)
+ << Vector3D(1.0, 3.0, 3.0)
+ << Vector3D(0.0, 0.0, 0.0)
+ << Vector3D(1.0, 2.0, 4.0)
<< false;
QTest::newRow("point at the origin")
- << QVector3D(0.0, 0.0, 0.0)
- << QVector3D(1.0, 3.0, 3.0)
- << QVector3D(0.0, 0.0, 0.0)
+ << Vector3D(0.0, 0.0, 0.0)
+ << Vector3D(1.0, 3.0, 3.0)
+ << Vector3D(0.0, 0.0, 0.0)
<< true;
QTest::newRow("close to the origin")
- << QVector3D(1.0, 1.0, 1.0)
- << QVector3D(1.0, 3.0, 3.0)
- << QVector3D(1.0005f, 1.0005f, 1.0)
+ << Vector3D(1.0, 1.0, 1.0)
+ << Vector3D(1.0, 3.0, 3.0)
+ << Vector3D(1.0005f, 1.0005f, 1.0)
<< false;
QTest::newRow("45 line line in plane x=1")
- << QVector3D(1.0, 3.0, 3.0)
- << QVector3D(0.0, -1.0, -1.0)
- << QVector3D(1.0, 4.0, 4.0)
+ << Vector3D(1.0, 3.0, 3.0)
+ << Vector3D(0.0, -1.0, -1.0)
+ << Vector3D(1.0, 4.0, 4.0)
<< true;
{
// This is to prove that the constructed approach give the
// same results
- QVector3D p(1.0, 3.0, 3.0);
- QVector3D v(0.0, -1.0, -1.0);
+ Vector3D p(1.0, 3.0, 3.0);
+ Vector3D v(0.0, -1.0, -1.0);
QTest::newRow("constructed 45 line line in plane x=1")
<< p
@@ -288,20 +288,20 @@ void tst_QRay3D::contains_point_data()
}
QTest::newRow("intersection with negative s in plane z=-1")
- << QVector3D(1.0f, 2.0f, -1.0f)
- << QVector3D(1.0f, 1.0f, 0.0f)
- << QVector3D(2.0f, 1.0f, 0.0f)
+ << Vector3D(1.0f, 2.0f, -1.0f)
+ << Vector3D(1.0f, 1.0f, 0.0f)
+ << Vector3D(2.0f, 1.0f, 0.0f)
<< false;
QTest::newRow("45 angled line")
- << QVector3D(3.0f, 0.0f, -1.0f)
- << QVector3D(1.0f, -1.0f, 1.0f)
- << QVector3D(6.0f, -3.0f, 2.0f)
+ << Vector3D(3.0f, 0.0f, -1.0f)
+ << Vector3D(1.0f, -1.0f, 1.0f)
+ << Vector3D(6.0f, -3.0f, 2.0f)
<< true;
{
- QVector3D p(-10.0, 3.0, 3.0);
- QVector3D v(0.0, 20.0, -1.0);
+ Vector3D p(-10.0, 3.0, 3.0);
+ Vector3D v(0.0, 20.0, -1.0);
QTest::newRow("constructed vector close to axis")
<< p
<< v
@@ -310,8 +310,8 @@ void tst_QRay3D::contains_point_data()
}
{
- QVector3D p(1.0, 3.0, 3.0);
- QVector3D v(40.0, 500.0, -1.0);
+ Vector3D p(1.0, 3.0, 3.0);
+ Vector3D v(40.0, 500.0, -1.0);
QTest::newRow("constructed larger values close to axis")
<< p
<< v
@@ -322,9 +322,9 @@ void tst_QRay3D::contains_point_data()
void tst_QRay3D::contains_point()
{
- QFETCH(QVector3D, origin);
- QFETCH(QVector3D, direction);
- QFETCH(QVector3D, point);
+ QFETCH(Vector3D, origin);
+ QFETCH(Vector3D, direction);
+ QFETCH(Vector3D, point);
QFETCH(bool, contains);
Qt3DRender::RayCasting::QRay3D line(origin, direction);
@@ -338,9 +338,9 @@ void tst_QRay3D::contains_ray_data()
void tst_QRay3D::contains_ray()
{
- QFETCH(QVector3D, origin);
- QFETCH(QVector3D, direction);
- QFETCH(QVector3D, point);
+ QFETCH(Vector3D, origin);
+ QFETCH(Vector3D, direction);
+ QFETCH(Vector3D, point);
QFETCH(bool, contains);
Qt3DRender::RayCasting::QRay3D line(origin, direction);
@@ -355,7 +355,7 @@ void tst_QRay3D::contains_ray()
QVERIFY(line2.contains(line));
// Different direction.
- Qt3DRender::RayCasting::QRay3D line4(point, QVector3D(direction.y(), direction.x(), direction.z()));
+ Qt3DRender::RayCasting::QRay3D line4(point, Vector3D(direction.y(), direction.x(), direction.z()));
QVERIFY(!line.contains(line4));
QVERIFY(!line4.contains(line));
} else {
@@ -367,41 +367,41 @@ void tst_QRay3D::contains_ray()
void tst_QRay3D::distance_data()
{
- QTest::addColumn<QVector3D>("origin");
- QTest::addColumn<QVector3D>("direction");
- QTest::addColumn<QVector3D>("point");
+ QTest::addColumn<Vector3D>("origin");
+ QTest::addColumn<Vector3D>("direction");
+ QTest::addColumn<Vector3D>("point");
QTest::addColumn<float>("distance");
QTest::newRow("axis-x")
- << QVector3D(6.0f, 0.0f, 0.0f)
- << QVector3D(1.0f, 0.0f, 0.0f)
- << QVector3D(0.0f, 0.0f, 0.0f)
+ << Vector3D(6.0f, 0.0f, 0.0f)
+ << Vector3D(1.0f, 0.0f, 0.0f)
+ << Vector3D(0.0f, 0.0f, 0.0f)
<< 0.0f;
QTest::newRow("axis-x to 1")
- << QVector3D(6.0f, 0.0f, 0.0f)
- << QVector3D(1.0f, 0.0f, 0.0f)
- << QVector3D(0.0f, 1.0f, 0.0f)
+ << Vector3D(6.0f, 0.0f, 0.0f)
+ << Vector3D(1.0f, 0.0f, 0.0f)
+ << Vector3D(0.0f, 1.0f, 0.0f)
<< 1.0f;
QTest::newRow("neg-axis-y")
- << QVector3D(0.0f, 6.0f, 0.0f)
- << QVector3D(0.0f, -1.5f, 0.0f)
- << QVector3D(0.0f, 100.0f, 0.0f)
+ << Vector3D(0.0f, 6.0f, 0.0f)
+ << Vector3D(0.0f, -1.5f, 0.0f)
+ << Vector3D(0.0f, 100.0f, 0.0f)
<< 0.0f;
QTest::newRow("neg-axis-y to 2")
- << QVector3D(0.0f, 6.0f, 0.0f)
- << QVector3D(0.0f, -1.5f, 0.0f)
- << QVector3D(2.0f, 0.0f, 0.0f)
+ << Vector3D(0.0f, 6.0f, 0.0f)
+ << Vector3D(0.0f, -1.5f, 0.0f)
+ << Vector3D(2.0f, 0.0f, 0.0f)
<< 2.0f;
}
void tst_QRay3D::distance()
{
- QFETCH(QVector3D, origin);
- QFETCH(QVector3D, direction);
- QFETCH(QVector3D, point);
+ QFETCH(Vector3D, origin);
+ QFETCH(Vector3D, direction);
+ QFETCH(Vector3D, point);
QFETCH(float, distance);
Qt3DRender::RayCasting::QRay3D line(origin, direction);
@@ -410,9 +410,9 @@ void tst_QRay3D::distance()
void tst_QRay3D::compare()
{
- Qt3DRender::RayCasting::QRay3D ray1(QVector3D(10, 20, 30), QVector3D(-3, -4, -5));
- Qt3DRender::RayCasting::QRay3D ray2(QVector3D(10, 20, 30), QVector3D(1.5f, 2.0f, 2.5f));
- Qt3DRender::RayCasting::QRay3D ray3(QVector3D(0, 20, 30), QVector3D(-3, -4, -5));
+ Qt3DRender::RayCasting::QRay3D ray1(Vector3D(10, 20, 30), Vector3D(-3, -4, -5));
+ Qt3DRender::RayCasting::QRay3D ray2(Vector3D(10, 20, 30), Vector3D(1.5f, 2.0f, 2.5f));
+ Qt3DRender::RayCasting::QRay3D ray3(Vector3D(0, 20, 30), Vector3D(-3, -4, -5));
QVERIFY(ray1 == ray1);
QVERIFY(!(ray1 != ray1));
QVERIFY(qFuzzyCompare(ray1, ray1));
@@ -427,7 +427,7 @@ void tst_QRay3D::compare()
void tst_QRay3D::dataStream()
{
#ifndef QT_NO_DATASTREAM
- Qt3DRender::RayCasting::QRay3D ray(QVector3D(1.0f, 2.0f, 3.0f), QVector3D(4.0f, 5.0f, 6.0f));
+ Qt3DRender::RayCasting::QRay3D ray(Vector3D(1.0f, 2.0f, 3.0f), Vector3D(4.0f, 5.0f, 6.0f));
QByteArray data;
{
@@ -452,13 +452,17 @@ void tst_QRay3D::transform_data()
void tst_QRay3D::transform()
{
- QFETCH(QVector3D, point);
- QFETCH(QVector3D, direction);
+ QFETCH(Vector3D, point);
+ QFETCH(Vector3D, direction);
- QMatrix4x4 m;
- m.translate(-1.0f, 2.5f, 5.0f);
- m.rotate(45.0f, 1.0f, 1.0f, 1.0f);
- m.scale(23.5f);
+ Matrix4x4 m;
+ {
+ QMatrix4x4 c;
+ c.translate(-1.0f, 2.5f, 5.0f);
+ c.rotate(45.0f, 1.0f, 1.0f, 1.0f);
+ c.scale(23.5f);
+ m = Matrix4x4(c);
+ }
Qt3DRender::RayCasting::QRay3D ray1(point, direction);
Qt3DRender::RayCasting::QRay3D ray2(ray1);
@@ -495,19 +499,19 @@ void tst_QRay3D::properties()
qRegisterMetaType<Qt3DRender::RayCasting::QRay3D>();
- obj.setRay(Qt3DRender::RayCasting::QRay3D(QVector3D(1, 2, 3), QVector3D(4, 5, 6)));
+ obj.setRay(Qt3DRender::RayCasting::QRay3D(Vector3D(1, 2, 3), Vector3D(4, 5, 6)));
Qt3DRender::RayCasting::QRay3D r = qvariant_cast<Qt3DRender::RayCasting::QRay3D>(obj.property("ray"));
- QCOMPARE(r.origin(), QVector3D(1, 2, 3));
- QCOMPARE(r.direction(), QVector3D(4, 5, 6));
+ QCOMPARE(r.origin(), Vector3D(1, 2, 3));
+ QCOMPARE(r.direction(), Vector3D(4, 5, 6));
obj.setProperty("ray",
qVariantFromValue
- (Qt3DRender::RayCasting::QRay3D(QVector3D(-1, -2, -3), QVector3D(-4, -5, -6))));
+ (Qt3DRender::RayCasting::QRay3D(Vector3D(-1, -2, -3), Vector3D(-4, -5, -6))));
r = qvariant_cast<Qt3DRender::RayCasting::QRay3D>(obj.property("ray"));
- QCOMPARE(r.origin(), QVector3D(-1, -2, -3));
- QCOMPARE(r.direction(), QVector3D(-4, -5, -6));
+ QCOMPARE(r.origin(), Vector3D(-1, -2, -3));
+ QCOMPARE(r.direction(), Vector3D(-4, -5, -6));
}
void tst_QRay3D::metaTypes()
@@ -523,14 +527,14 @@ void tst_QRay3D::shouldNotAllowNullDirection()
// GIVEN
Qt3DRender::RayCasting::QRay3D ray;
- QCOMPARE(ray.origin(), QVector3D(0, 0, 0));
- QCOMPARE(ray.direction(), QVector3D(0, 0, 1));
+ QCOMPARE(ray.origin(), Vector3D(0, 0, 0));
+ QCOMPARE(ray.direction(), Vector3D(0, 0, 1));
// WHEN
- ray.setDirection(QVector3D(0, 0, 0));
+ ray.setDirection(Vector3D(0, 0, 0));
// THEN
- QCOMPARE(ray.direction(), QVector3D(0, 0, 1));
+ QCOMPARE(ray.direction(), Vector3D(0, 0, 1));
}
QTEST_APPLESS_MAIN(tst_QRay3D)
diff --git a/tests/auto/render/raycasting/tst_raycasting.cpp b/tests/auto/render/raycasting/tst_raycasting.cpp
index 50e33e272..1f6cb58a0 100644
--- a/tests/auto/render/raycasting/tst_raycasting.cpp
+++ b/tests/auto/render/raycasting/tst_raycasting.cpp
@@ -72,15 +72,15 @@ void tst_RayCasting::shouldIntersect_data()
QTest::addColumn<Sphere>("sphere");
QTest::addColumn<bool>("shouldIntersect");
- QRay3D ray(QVector3D(1, 1, 1), QVector3D(0, 0, 1));
+ QRay3D ray(Vector3D(1, 1, 1), Vector3D(0, 0, 1));
- Sphere sphere1(QVector3D(1, 1, 1), 2);
- Sphere sphere2(QVector3D(0, 0, 0), 3);
- Sphere sphere3(QVector3D(0, 1, 3), 1);
- Sphere sphere4(QVector3D(4, 4, 5), 1);
- Sphere sphere5(QVector3D(2, 2, 11), 5);
- Sphere sphere6(QVector3D(2, 2, 13), 1);
- Sphere sphere7(QVector3D(2, 2, 15), 5);
+ Sphere sphere1(Vector3D(1, 1, 1), 2);
+ Sphere sphere2(Vector3D(0, 0, 0), 3);
+ Sphere sphere3(Vector3D(0, 1, 3), 1);
+ Sphere sphere4(Vector3D(4, 4, 5), 1);
+ Sphere sphere5(Vector3D(2, 2, 11), 5);
+ Sphere sphere6(Vector3D(2, 2, 13), 1);
+ Sphere sphere7(Vector3D(2, 2, 15), 5);
QTest::newRow("Ray starts inside sphere") << ray << sphere1 << true;
QTest::newRow("Ray starts inside sphere") << ray << sphere2 << true;
@@ -97,7 +97,7 @@ void tst_RayCasting::shouldIntersect()
QFETCH(Sphere, sphere);
QFETCH(bool, shouldIntersect);
- QVector3D intersectionPoint;
+ Vector3D intersectionPoint;
QCOMPARE(sphere.intersects(ray, &intersectionPoint), shouldIntersect);
}
@@ -206,16 +206,16 @@ void tst_RayCasting::shouldReturnHits_data()
QTest::addColumn<QVector<QNodeId> >("hits");
QTest::addColumn<QAbstractCollisionQueryService::QueryMode >("queryMode");
- QRay3D ray(QVector3D(1, 1, 1), QVector3D(0, 0, 1));
+ QRay3D ray(Vector3D(1, 1, 1), Vector3D(0, 0, 1));
this->boundingVolumes.clear();
- this->boundingVolumes.append(QVector<Sphere>() << Sphere(QVector3D(1, 1, 1), 3, QNodeId::createId())
- << Sphere(QVector3D(0, 0, 0), 3, QNodeId::createId())
- << Sphere(QVector3D(0, 1, 3), 1, QNodeId::createId())
- << Sphere(QVector3D(4, 4, 5), 1, QNodeId::createId())
- << Sphere(QVector3D(2, 2, 11), 5, QNodeId::createId())
- << Sphere(QVector3D(2, 2, 13), 1, QNodeId::createId())
- << Sphere(QVector3D(2, 2, 15), 5, QNodeId::createId()));
+ this->boundingVolumes.append(QVector<Sphere>() << Sphere(Vector3D(1, 1, 1), 3, QNodeId::createId())
+ << Sphere(Vector3D(0, 0, 0), 3, QNodeId::createId())
+ << Sphere(Vector3D(0, 1, 3), 1, QNodeId::createId())
+ << Sphere(Vector3D(4, 4, 5), 1, QNodeId::createId())
+ << Sphere(Vector3D(2, 2, 11), 5, QNodeId::createId())
+ << Sphere(Vector3D(2, 2, 13), 1, QNodeId::createId())
+ << Sphere(Vector3D(2, 2, 15), 5, QNodeId::createId()));
QTest::newRow("All hits, One sphere intersect") << ray
<< (QVector<QBoundingVolume *> () << volumeAt(0) << volumeAt(3))
@@ -276,11 +276,11 @@ void tst_RayCasting::shouldReturnHits()
void tst_RayCasting::shouldUseProvidedBoudingVolumes()
{
// GIVEN
- QRay3D ray(QVector3D(1, 1, 1), QVector3D(0, 0, 1));
+ QRay3D ray(Vector3D(1, 1, 1), Vector3D(0, 0, 1));
- Sphere sphere1(QVector3D(1, 1, 1), 3);
- Sphere sphere3(QVector3D(0, 1, 3), 1);
- Sphere sphere4(QVector3D(4, 4, 5), 1);
+ Sphere sphere1(Vector3D(1, 1, 1), 3);
+ Sphere sphere3(Vector3D(0, 1, 3), 1);
+ Sphere sphere4(Vector3D(4, 4, 5), 1);
MyBoudingVolumesProvider provider(QVector<QBoundingVolume *>() << &sphere1 << &sphere4 << &sphere3);
QVector<QNodeId> hits(QVector<QNodeId>() << sphere1.id() << sphere3.id());
@@ -325,10 +325,10 @@ void tst_RayCasting::mousePicking()
// Window center on near plane
QRay3D ray = Qt3DRender::Render::PickBoundingVolumeJob::intersectionRay(viewport.center().toPoint(),
- camera.viewMatrix(),
- camera.projectionMatrix(),
+ Matrix4x4(camera.viewMatrix()),
+ Matrix4x4(camera.projectionMatrix()),
viewport.toRect());
- Qt3DRender::Render::Sphere s(QVector3D(0.0f, 0.5f, 0.0f), 1.0f);
+ Qt3DRender::Render::Sphere s(Vector3D(0.0f, 0.5f, 0.0f), 1.0f);
// WHEN
bool intersects = s.intersects(ray, nullptr);
@@ -338,8 +338,8 @@ void tst_RayCasting::mousePicking()
// WHEN
ray = Qt3DRender::Render::PickBoundingVolumeJob::intersectionRay(viewport.topLeft().toPoint(),
- camera.viewMatrix(),
- camera.projectionMatrix(),
+ Matrix4x4(camera.viewMatrix()),
+ Matrix4x4(camera.projectionMatrix()),
viewport.toRect());
intersects = s.intersects(ray, nullptr);
@@ -348,8 +348,8 @@ void tst_RayCasting::mousePicking()
// WHEN
ray = Qt3DRender::Render::PickBoundingVolumeJob::intersectionRay(viewport.topRight().toPoint(),
- camera.viewMatrix(),
- camera.projectionMatrix(),
+ Matrix4x4(camera.viewMatrix()),
+ Matrix4x4(camera.projectionMatrix()),
viewport.toRect());
intersects = s.intersects(ray, nullptr);
@@ -358,8 +358,8 @@ void tst_RayCasting::mousePicking()
// WHEN
ray = Qt3DRender::Render::PickBoundingVolumeJob::intersectionRay(viewport.bottomLeft().toPoint(),
- camera.viewMatrix(),
- camera.projectionMatrix(),
+ Matrix4x4(camera.viewMatrix()),
+ Matrix4x4(camera.projectionMatrix()),
viewport.toRect());
intersects = s.intersects(ray, nullptr);
@@ -368,8 +368,8 @@ void tst_RayCasting::mousePicking()
// WHEN
ray = Qt3DRender::Render::PickBoundingVolumeJob::intersectionRay(viewport.bottomRight().toPoint(),
- camera.viewMatrix(),
- camera.projectionMatrix(),
+ Matrix4x4(camera.viewMatrix()),
+ Matrix4x4(camera.projectionMatrix()),
viewport.toRect());
intersects = s.intersects(ray, nullptr);
diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro
index 9355d8310..7e36f97ab 100644
--- a/tests/auto/render/render.pro
+++ b/tests/auto/render/render.pro
@@ -24,14 +24,12 @@ qtConfig(private_tests) {
attribute \
geometry \
geometryrenderer \
- raycasting \
qcameraselector \
qclearbuffers \
qframegraphnode \
qlayerfilter \
qabstractlight \
qenvironmentlight \
- qray3d \
qrenderpassfilter \
qrenderstate \
qrendertargetselector \
@@ -45,8 +43,6 @@ qtConfig(private_tests) {
objectpicker \
# qboundingvolumedebug \
# boundingvolumedebug \
- trianglesextractor \
- triangleboundingvolume \
ddstextures \
shadercache \
layerfiltering \
@@ -114,6 +110,16 @@ qtConfig(private_tests) {
renderbarrierjob
QT_FOR_CONFIG = 3dcore-private
+ # TO DO: These could be restored to be executed in all cases
+ # when aligned-malloc.pri becomes part of the test framework
+ !qtConfig(qt3d-simd-avx2): {
+ SUBDIRS += \
+ qray3d \
+ raycasting \
+ trianglesextractor \
+ triangleboundingvolume \
+ }
+
qtConfig(qt3d-extras) {
SUBDIRS += \
qmaterial \
diff --git a/tests/auto/render/renderqueue/renderqueue.pro b/tests/auto/render/renderqueue/renderqueue.pro
index 92e675285..945fe4cf4 100644
--- a/tests/auto/render/renderqueue/renderqueue.pro
+++ b/tests/auto/render/renderqueue/renderqueue.pro
@@ -7,3 +7,5 @@ QT += 3dcore 3dcore-private 3drender 3drender-private testlib
CONFIG += testcase
SOURCES += tst_renderqueue.cpp
+
+include(../../core/common/common.pri)
diff --git a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
index 1309249d7..c361a8d92 100644
--- a/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
+++ b/tests/auto/render/renderviewbuilder/tst_renderviewbuilder.cpp
@@ -555,14 +555,14 @@ private Q_SLOTS:
renderViewBuilder.buildJobHierachy();
// THEN
- QCOMPARE(renderViewBuilder.frustumCullingJob()->viewProjection(), QMatrix4x4());
+ QCOMPARE(renderViewBuilder.frustumCullingJob()->viewProjection(), Matrix4x4());
// WHEN
renderViewBuilder.renderViewJob()->run();
renderViewBuilder.syncFrustumCullingJob()->run();
// THEN
- QCOMPARE(renderViewBuilder.frustumCullingJob()->viewProjection(), camera->projectionMatrix() * camera->viewMatrix());
+ QCOMPARE(convertToQMatrix4x4(renderViewBuilder.frustumCullingJob()->viewProjection()), camera->projectionMatrix() * camera->viewMatrix());
}
void checkRemoveEntitiesNotInSubset()
diff --git a/tests/auto/render/renderviews/tst_renderviews.cpp b/tests/auto/render/renderviews/tst_renderviews.cpp
index 2c8486ed0..4ad869219 100644
--- a/tests/auto/render/renderviews/tst_renderviews.cpp
+++ b/tests/auto/render/renderviews/tst_renderviews.cpp
@@ -59,23 +59,6 @@ private Q_SLOTS:
}
- void checkRenderViewDoesNotLeak()
- {
- QSKIP("Allocated Disabled");
- // GIVEN
- Qt3DCore::QFrameAllocator allocator(192, 16, 128);
- RenderView *rv = allocator.allocate<RenderView>();
-
- // THEN
- QVERIFY(!allocator.isEmpty());
-
- // WHEN
- delete rv;
-
- // THEN
- QVERIFY(allocator.isEmpty());
- }
-
void checkRenderViewInitialState()
{
// GIVEN
diff --git a/tests/auto/render/renderviewutils/tst_renderviewutils.cpp b/tests/auto/render/renderviewutils/tst_renderviewutils.cpp
index fa0dce6af..eaa5a4e06 100644
--- a/tests/auto/render/renderviewutils/tst_renderviewutils.cpp
+++ b/tests/auto/render/renderviewutils/tst_renderviewutils.cpp
@@ -711,17 +711,25 @@ void tst_RenderViewUtils::transformedProperties()
QScopedPointer<Qt3DRender::Render::ShaderDataManager> manager(new Qt3DRender::Render::ShaderDataManager());
// WHEN
- const QVector3D position = QVector3D(15.0f, -5.0f, 10.0f);
- QMatrix4x4 worldMatrix;
- QMatrix4x4 viewMatrix;
-
- worldMatrix.translate(-3.0f, 2.0f, 7.5f);
- viewMatrix.translate(9.0f, 6.0f, 12.0f);
+ const Vector3D position = Vector3D(15.0f, -5.0f, 10.0f);
+ const QVector3D positionQt = convertToQVector3D(position);
+ Matrix4x4 worldMatrix;
+ {
+ QMatrix4x4 m;
+ m.translate(-3.0f, 2.0f, 7.5f);
+ worldMatrix = Matrix4x4(m);
+ }
+ Matrix4x4 viewMatrix;
+ {
+ QMatrix4x4 m;
+ m.translate(9.0f, 6.0f, 12.0f);
+ viewMatrix = Matrix4x4(m);
+ }
- shaderData->setProperty("position0", position);
- shaderData->setProperty("position1", position);
- shaderData->setProperty("position2", position);
- shaderData->setProperty("position3", position);
+ shaderData->setProperty("position0", positionQt);
+ shaderData->setProperty("position1", positionQt);
+ shaderData->setProperty("position2", positionQt);
+ shaderData->setProperty("position3", positionQt);
shaderData->setProperty("position1Transformed", Qt3DRender::Render::ShaderData::ModelToEye);
shaderData->setProperty("position2Transformed", Qt3DRender::Render::ShaderData::ModelToWorld);
shaderData->setProperty("position3Transformed", Qt3DRender::Render::ShaderData::ModelToWorldDirection);
@@ -737,16 +745,16 @@ void tst_RenderViewUtils::transformedProperties()
// WHEN
backendShaderData->updateWorldTransform(worldMatrix);
- const QVector3D position1Value = backendShaderData->getTransformedProperty(QStringLiteral("position1"), viewMatrix).value<QVector3D>();
- const QVector3D position2Value = backendShaderData->getTransformedProperty(QStringLiteral("position2"), viewMatrix).value<QVector3D>();
- const QVector3D position3Value = backendShaderData->getTransformedProperty(QStringLiteral("position3"), viewMatrix).value<QVector3D>();
+ const Vector3D position1Value = backendShaderData->getTransformedProperty(QStringLiteral("position1"), viewMatrix).value<Vector3D>();
+ const Vector3D position2Value = backendShaderData->getTransformedProperty(QStringLiteral("position2"), viewMatrix).value<Vector3D>();
+ const Vector3D position3Value = backendShaderData->getTransformedProperty(QStringLiteral("position3"), viewMatrix).value<Vector3D>();
const QVariant position0Value = backendShaderData->getTransformedProperty(QStringLiteral("position0"), viewMatrix);
// THEN
QCOMPARE(position0Value, QVariant());
QCOMPARE(position1Value, viewMatrix * worldMatrix * position);
QCOMPARE(position2Value, worldMatrix * position);
- QCOMPARE(position3Value, (worldMatrix * QVector4D(position, 0.0f)).toVector3D());
+ QCOMPARE(position3Value, Vector3D((worldMatrix * Vector4D(position, 0.0f))));
}
void tst_RenderViewUtils::shouldNotifyDynamicPropertyChanges()
diff --git a/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp b/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
index 2c3f3f7c9..da420e1ac 100644
--- a/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
+++ b/tests/auto/render/segmentvisitor/tst_segmentvisitor.cpp
@@ -49,7 +49,7 @@ public:
}
- virtual void visit(uint andx, const QVector3D &a, uint bndx, const QVector3D &b)
+ virtual void visit(uint andx, const Vector3D &a, uint bndx, const Vector3D &b)
{
m_segments.push_back(TestSegment(andx, a, bndx, b));
}
@@ -69,7 +69,7 @@ public:
return m_segments.size();
}
- bool verifySegment(uint segment, uint andx, uint bndx, QVector3D a, QVector3D b) const
+ bool verifySegment(uint segment, uint andx, uint bndx, Vector3D a, Vector3D b) const
{
if (segment >= uint(m_segments.size()))
return false;
@@ -87,13 +87,13 @@ private:
struct TestSegment
{
uint abcndx[2];
- QVector3D abc[2];
+ Vector3D abc[2];
TestSegment()
{
abcndx[0] = abcndx[1] = uint(-1);
}
- TestSegment(uint andx, const QVector3D &a, uint bndx, const QVector3D &b)
+ TestSegment(uint andx, const Vector3D &a, uint bndx, const Vector3D &b)
{
abcndx[0] = andx;
abcndx[1] = bndx;
@@ -218,9 +218,9 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(3));
- QVERIFY(visitor.verifySegment(0, 0,1, QVector3D(0,0,1), QVector3D(1,0,0)));
- QVERIFY(visitor.verifySegment(1, 2,3, QVector3D(0,1,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifySegment(2, 4,5, QVector3D(1,0,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(0, 0,1, Vector3D(0,0,1), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifySegment(1, 2,3, Vector3D(0,1,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifySegment(2, 4,5, Vector3D(1,0,0), Vector3D(0,1,0)));
}
void testVisitSegmentsIndexed()
@@ -318,11 +318,11 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(5));
- QVERIFY(visitor.verifySegment(0, 0,1, QVector3D(0,0,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifySegment(1, 1,2, QVector3D(1,0,0), QVector3D(1,1,0)));
- QVERIFY(visitor.verifySegment(2, 2,3, QVector3D(1,1,0), QVector3D(0,1,0)));
- QVERIFY(visitor.verifySegment(3, 0,2, QVector3D(0,0,0), QVector3D(1,1,0)));
- QVERIFY(visitor.verifySegment(4, 1,3, QVector3D(1,0,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(0, 0,1, Vector3D(0,0,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifySegment(1, 1,2, Vector3D(1,0,0), Vector3D(1,1,0)));
+ QVERIFY(visitor.verifySegment(2, 2,3, Vector3D(1,1,0), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(3, 0,2, Vector3D(0,0,0), Vector3D(1,1,0)));
+ QVERIFY(visitor.verifySegment(4, 1,3, Vector3D(1,0,0), Vector3D(0,1,0)));
}
void testVisitLineStrip()
@@ -387,9 +387,9 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(3));
- QVERIFY(visitor.verifySegment(0, 0,1, QVector3D(0,0,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifySegment(1, 1,2, QVector3D(1,0,0), QVector3D(1,1,0)));
- QVERIFY(visitor.verifySegment(2, 2,3, QVector3D(1,1,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(0, 0,1, Vector3D(0,0,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifySegment(1, 1,2, Vector3D(1,0,0), Vector3D(1,1,0)));
+ QVERIFY(visitor.verifySegment(2, 2,3, Vector3D(1,1,0), Vector3D(0,1,0)));
}
void testVisitListStripIndexed()
@@ -481,9 +481,9 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(3));
- QVERIFY(visitor.verifySegment(0, 0,1, QVector3D(0,0,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifySegment(1, 1,2, QVector3D(1,0,0), QVector3D(1,1,0)));
- QVERIFY(visitor.verifySegment(2, 2,3, QVector3D(1,1,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(0, 0,1, Vector3D(0,0,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifySegment(1, 1,2, Vector3D(1,0,0), Vector3D(1,1,0)));
+ QVERIFY(visitor.verifySegment(2, 2,3, Vector3D(1,1,0), Vector3D(0,1,0)));
}
void testVisitLineLoop()
@@ -548,10 +548,10 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(4));
- QVERIFY(visitor.verifySegment(0, 0,1, QVector3D(0,0,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifySegment(1, 1,2, QVector3D(1,0,0), QVector3D(1,1,0)));
- QVERIFY(visitor.verifySegment(2, 2,3, QVector3D(1,1,0), QVector3D(0,1,0)));
- QVERIFY(visitor.verifySegment(3, 3,0, QVector3D(0,1,0), QVector3D(0,0,0)));
+ QVERIFY(visitor.verifySegment(0, 0,1, Vector3D(0,0,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifySegment(1, 1,2, Vector3D(1,0,0), Vector3D(1,1,0)));
+ QVERIFY(visitor.verifySegment(2, 2,3, Vector3D(1,1,0), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(3, 3,0, Vector3D(0,1,0), Vector3D(0,0,0)));
}
void testVisitLineLoopIndexed()
@@ -643,10 +643,10 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(4));
- QVERIFY(visitor.verifySegment(0, 0,1, QVector3D(0,0,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifySegment(1, 1,2, QVector3D(1,0,0), QVector3D(1,1,0)));
- QVERIFY(visitor.verifySegment(2, 2,3, QVector3D(1,1,0), QVector3D(0,1,0)));
- QVERIFY(visitor.verifySegment(3, 3,0, QVector3D(0,1,0), QVector3D(0,0,0)));
+ QVERIFY(visitor.verifySegment(0, 0,1, Vector3D(0,0,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifySegment(1, 1,2, Vector3D(1,0,0), Vector3D(1,1,0)));
+ QVERIFY(visitor.verifySegment(2, 2,3, Vector3D(1,1,0), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(3, 3,0, Vector3D(0,1,0), Vector3D(0,0,0)));
}
void testVisitLineAdjacency()
@@ -712,7 +712,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(1));
- QVERIFY(visitor.verifySegment(0, 1, 2, QVector3D(1,0,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(0, 1, 2, Vector3D(1,0,0), Vector3D(0,1,0)));
}
void testVisitLinesAdjacencyIndexed()
@@ -805,7 +805,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(visitor.segmentCount(), uint(1));
- QVERIFY(visitor.verifySegment(0, 1, 2, QVector3D(1,0,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifySegment(0, 1, 2, Vector3D(1,0,0), Vector3D(0,1,0)));
}
};
diff --git a/tests/auto/render/transform/tst_transform.cpp b/tests/auto/render/transform/tst_transform.cpp
index ebb27953d..151baff76 100644
--- a/tests/auto/render/transform/tst_transform.cpp
+++ b/tests/auto/render/transform/tst_transform.cpp
@@ -49,7 +49,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(backendTransform.isEnabled(), false);
QVERIFY(backendTransform.peerId().isNull());
- QCOMPARE(backendTransform.transformMatrix(), QMatrix4x4());
+ QCOMPARE(convertToQMatrix4x4(backendTransform.transformMatrix()), QMatrix4x4());
}
void checkCleanupState()
@@ -71,7 +71,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(backendTransform.isEnabled(), false);
- QCOMPARE(backendTransform.transformMatrix(), QMatrix4x4());
+ QCOMPARE(convertToQMatrix4x4(backendTransform.transformMatrix()), QMatrix4x4());
QCOMPARE(backendTransform.rotation(), QQuaternion());
QCOMPARE(backendTransform.scale(), QVector3D());
QCOMPARE(backendTransform.translation(), QVector3D());
@@ -93,7 +93,7 @@ private Q_SLOTS:
// THEN
QCOMPARE(backendTransform.isEnabled(), true);
QCOMPARE(backendTransform.peerId(), transform.id());
- QCOMPARE(backendTransform.transformMatrix(), transform.matrix());
+ QCOMPARE(convertToQMatrix4x4(backendTransform.transformMatrix()), transform.matrix());
QCOMPARE(backendTransform.rotation(), transform.rotation());
QCOMPARE(backendTransform.scale(), transform.scale3D());
QCOMPARE(backendTransform.translation(), transform.translation());
diff --git a/tests/auto/render/triangleboundingvolume/triangleboundingvolume.pro b/tests/auto/render/triangleboundingvolume/triangleboundingvolume.pro
index e88a997e2..dcbb2c17f 100644
--- a/tests/auto/render/triangleboundingvolume/triangleboundingvolume.pro
+++ b/tests/auto/render/triangleboundingvolume/triangleboundingvolume.pro
@@ -7,3 +7,4 @@ QT += 3dcore 3dcore-private 3drender 3drender-private testlib
CONFIG += testcase
SOURCES += tst_triangleboundingvolume.cpp
+
diff --git a/tests/auto/render/triangleboundingvolume/tst_triangleboundingvolume.cpp b/tests/auto/render/triangleboundingvolume/tst_triangleboundingvolume.cpp
index df375e777..b037c461f 100644
--- a/tests/auto/render/triangleboundingvolume/tst_triangleboundingvolume.cpp
+++ b/tests/auto/render/triangleboundingvolume/tst_triangleboundingvolume.cpp
@@ -47,43 +47,43 @@ private Q_SLOTS:
{
// GIVEN
Qt3DRender::Render::TriangleBoundingVolume volume = Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(),
- QVector3D(),
- QVector3D(),
- QVector3D());
+ Vector3D(),
+ Vector3D(),
+ Vector3D());
// THEN
QCOMPARE(volume.id(), Qt3DCore::QNodeId());
- QCOMPARE(volume.a(), QVector3D());
- QCOMPARE(volume.b(), QVector3D());
- QCOMPARE(volume.c(), QVector3D());
+ QCOMPARE(volume.a(), Vector3D());
+ QCOMPARE(volume.b(), Vector3D());
+ QCOMPARE(volume.c(), Vector3D());
QCOMPARE(volume.type(), Qt3DRender::RayCasting::QBoundingVolume::Triangle);
}
void transformed_data()
{
- QTest::addColumn<QVector3D>("a");
- QTest::addColumn<QVector3D>("b");
- QTest::addColumn<QVector3D>("c");
+ QTest::addColumn<Vector3D>("a");
+ QTest::addColumn<Vector3D>("b");
+ QTest::addColumn<Vector3D>("c");
- QTest::addColumn<QVector3D>("transformedA");
- QTest::addColumn<QVector3D>("transformedB");
- QTest::addColumn<QVector3D>("transformedC");
+ QTest::addColumn<Vector3D>("transformedA");
+ QTest::addColumn<Vector3D>("transformedB");
+ QTest::addColumn<Vector3D>("transformedC");
QTest::newRow("onFarPlane")
- << QVector3D(-1.0, 1.0, 0.0)
- << QVector3D(0.0, -1.0, 0.0)
- << QVector3D(1.0, 1.0, 0.0)
- << QVector3D(-1.0, 1.0, -40.0)
- << QVector3D(0.0, -1.0, -40.0)
- << QVector3D(1.0, 1.0, -40.0);
+ << Vector3D(-1.0, 1.0, 0.0)
+ << Vector3D(0.0, -1.0, 0.0)
+ << Vector3D(1.0, 1.0, 0.0)
+ << Vector3D(-1.0, 1.0, -40.0)
+ << Vector3D(0.0, -1.0, -40.0)
+ << Vector3D(1.0, 1.0, -40.0);
QTest::newRow("onNearPlane")
- << QVector3D(-1.0, 1.0, 40.0)
- << QVector3D(0.0, -1.0, 40.0)
- << QVector3D(1.0, 1.0, 40.0)
- << QVector3D(-1.0, 1.0, 0.0)
- << QVector3D(0.0, -1.0, 0.0)
- << QVector3D(1.0, 1.0, 0.0);
+ << Vector3D(-1.0, 1.0, 40.0)
+ << Vector3D(0.0, -1.0, 40.0)
+ << Vector3D(1.0, 1.0, 40.0)
+ << Vector3D(-1.0, 1.0, 0.0)
+ << Vector3D(0.0, -1.0, 0.0)
+ << Vector3D(1.0, 1.0, 0.0);
}
@@ -91,12 +91,12 @@ private Q_SLOTS:
void transformed()
{
// GIVEN
- QFETCH(QVector3D, a);
- QFETCH(QVector3D, b);
- QFETCH(QVector3D, c);
- QFETCH(QVector3D, transformedA);
- QFETCH(QVector3D, transformedB);
- QFETCH(QVector3D, transformedC);
+ QFETCH(Vector3D, a);
+ QFETCH(Vector3D, b);
+ QFETCH(Vector3D, c);
+ QFETCH(Vector3D, transformedA);
+ QFETCH(Vector3D, transformedB);
+ QFETCH(Vector3D, transformedC);
Qt3DRender::Render::TriangleBoundingVolume volume(Qt3DCore::QNodeId(),
a,
b,
@@ -111,7 +111,7 @@ private Q_SLOTS:
camera.setUpVector(QVector3D(0.0f, 1.0f, 0.0f));
camera.setViewCenter(QVector3D(0.0f, 0.0f, 0.0f));
- const QMatrix4x4 viewMatrix = camera.viewMatrix();
+ const Matrix4x4 viewMatrix(camera.viewMatrix());
// WHEN
volume.transform(viewMatrix);
@@ -125,61 +125,61 @@ private Q_SLOTS:
void intersects_data()
{
QTest::addColumn<Qt3DRender::RayCasting::QRay3D>("ray");
- QTest::addColumn<QVector3D>("a");
- QTest::addColumn<QVector3D>("b");
- QTest::addColumn<QVector3D>("c");
- QTest::addColumn<QVector3D>("uvw");
+ QTest::addColumn<Vector3D>("a");
+ QTest::addColumn<Vector3D>("b");
+ QTest::addColumn<Vector3D>("c");
+ QTest::addColumn<Vector3D>("uvw");
QTest::addColumn<float>("t");
QTest::addColumn<bool>("isIntersecting");
const float farPlaneDistance = 40.0;
QTest::newRow("halfway_center")
- << Qt3DRender::RayCasting::QRay3D(QVector3D(), QVector3D(0.0, 0.0, 1.0), farPlaneDistance)
- << QVector3D(3.0, 1.5, 20.0)
- << QVector3D(0.0, -1.5, 20.0)
- << QVector3D(-3, 1.5, 20.0)
- << QVector3D(0.25, 0.5, 0.25)
+ << Qt3DRender::RayCasting::QRay3D(Vector3D(), Vector3D(0.0, 0.0, 1.0), farPlaneDistance)
+ << Vector3D(3.0, 1.5, 20.0)
+ << Vector3D(0.0, -1.5, 20.0)
+ << Vector3D(-3, 1.5, 20.0)
+ << Vector3D(0.25, 0.5, 0.25)
<< 0.5f
<< true;
QTest::newRow("miss_halfway_center_too_short")
- << Qt3DRender::RayCasting::QRay3D(QVector3D(), QVector3D(0.0, 0.0, 1.0), farPlaneDistance * 0.25f)
- << QVector3D(3.0, 1.5, 20.0)
- << QVector3D(0.0, -1.5, 20.0)
- << QVector3D(-3, 1.5, 20.0)
- << QVector3D()
+ << Qt3DRender::RayCasting::QRay3D(Vector3D(), Vector3D(0.0, 0.0, 1.0), farPlaneDistance * 0.25f)
+ << Vector3D(3.0, 1.5, 20.0)
+ << Vector3D(0.0, -1.5, 20.0)
+ << Vector3D(-3, 1.5, 20.0)
+ << Vector3D()
<< 0.0f
<< false;
QTest::newRow("far_center")
- << Qt3DRender::RayCasting::QRay3D(QVector3D(), QVector3D(0.0, 0.0, 1.0), farPlaneDistance)
- << QVector3D(3.0, 1.5, 40.0)
- << QVector3D(0.0, -1.5, 40.0)
- << QVector3D(-3, 1.5, 40.0)
- << QVector3D(0.25, 0.5, 0.25)
+ << Qt3DRender::RayCasting::QRay3D(Vector3D(), Vector3D(0.0, 0.0, 1.0), farPlaneDistance)
+ << Vector3D(3.0, 1.5, 40.0)
+ << Vector3D(0.0, -1.5, 40.0)
+ << Vector3D(-3, 1.5, 40.0)
+ << Vector3D(0.25, 0.5, 0.25)
<< 1.0f
<< true;
QTest::newRow("near_center")
- << Qt3DRender::RayCasting::QRay3D(QVector3D(), QVector3D(0.0, 0.0, 1.0), 1.0f)
- << QVector3D(3.0, 1.5, 0.0)
- << QVector3D(0.0, -1.5, 0.0)
- << QVector3D(-3, 1.5, 0.0)
- << QVector3D(0.25, 0.5, 0.25)
+ << Qt3DRender::RayCasting::QRay3D(Vector3D(), Vector3D(0.0, 0.0, 1.0), 1.0f)
+ << Vector3D(3.0, 1.5, 0.0)
+ << Vector3D(0.0, -1.5, 0.0)
+ << Vector3D(-3, 1.5, 0.0)
+ << Vector3D(0.25, 0.5, 0.25)
<< 0.0f
<< true;
QTest::newRow("above_miss_center")
- << Qt3DRender::RayCasting::QRay3D(QVector3D(0.0, 2.0, 0.0), QVector3D(0.0, 2.0, 1.0), 1.0f)
- << QVector3D(3.0, 1.5, 0.0)
- << QVector3D(0.0, -1.5, 0.0)
- << QVector3D(-3, 1.5, 0.0)
- << QVector3D()
+ << Qt3DRender::RayCasting::QRay3D(Vector3D(0.0, 2.0, 0.0), Vector3D(0.0, 2.0, 1.0), 1.0f)
+ << Vector3D(3.0, 1.5, 0.0)
+ << Vector3D(0.0, -1.5, 0.0)
+ << Vector3D(-3, 1.5, 0.0)
+ << Vector3D()
<< 0.0f
<< false;
QTest::newRow("below_miss_center")
- << Qt3DRender::RayCasting::QRay3D(QVector3D(0.0, -2.0, 0.0), QVector3D(0.0, -2.0, 1.0), 1.0f)
- << QVector3D(3.0, 1.5, 0.0)
- << QVector3D(0.0, -1.5, 0.0)
- << QVector3D(-3, 1.5, 0.0)
- << QVector3D()
+ << Qt3DRender::RayCasting::QRay3D(Vector3D(0.0, -2.0, 0.0), Vector3D(0.0, -2.0, 1.0), 1.0f)
+ << Vector3D(3.0, 1.5, 0.0)
+ << Vector3D(0.0, -1.5, 0.0)
+ << Vector3D(-3, 1.5, 0.0)
+ << Vector3D()
<< 0.0f
<< false;
}
@@ -188,15 +188,15 @@ private Q_SLOTS:
{
// GIVEN
QFETCH(Qt3DRender::RayCasting::QRay3D, ray);
- QFETCH(QVector3D, a);
- QFETCH(QVector3D, b);
- QFETCH(QVector3D, c);
- QFETCH(QVector3D, uvw);
+ QFETCH(Vector3D, a);
+ QFETCH(Vector3D, b);
+ QFETCH(Vector3D, c);
+ QFETCH(Vector3D, uvw);
QFETCH(float, t);
QFETCH(bool, isIntersecting);
// WHEN
- QVector3D tmp_uvw;
+ Vector3D tmp_uvw;
float tmp_t;
const bool shouldBeIntersecting = Qt3DRender::Render::intersectsSegmentTriangle(ray,
a, b, c,
diff --git a/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp b/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp
index c6db3f62d..2f6d283be 100644
--- a/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp
+++ b/tests/auto/render/trianglesextractor/tst_trianglesextractor.cpp
@@ -353,10 +353,10 @@ private Q_SLOTS:
QVector<Qt3DRender::Render::TriangleBoundingVolume *> v =
QVector<Qt3DRender::Render::TriangleBoundingVolume *>()
- << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), QVector3D(0, 1, 0), QVector3D(1, 0, -1), QVector3D(-1, 0, -1))
- << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), QVector3D(-1, 0, -1), QVector3D(1, 0, -1), QVector3D(0, 0, 1))
- << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), QVector3D(0, 0, 1), QVector3D(0, 1, 0), QVector3D(-1, 0, -1))
- << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), QVector3D(0, 1, 0), QVector3D(0, 0, 1), QVector3D(1, 0, -1));
+ << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), Vector3D(0, 1, 0), Vector3D(1, 0, -1), Vector3D(-1, 0, -1))
+ << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), Vector3D(-1, 0, -1), Vector3D(1, 0, -1), Vector3D(0, 0, 1))
+ << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), Vector3D(0, 0, 1), Vector3D(0, 1, 0), Vector3D(-1, 0, -1))
+ << new Qt3DRender::Render::TriangleBoundingVolume(Qt3DCore::QNodeId(), Vector3D(0, 1, 0), Vector3D(0, 0, 1), Vector3D(1, 0, -1));
QTest::newRow("indexedMesh") << customIndexedGeometryRenderer() << v;
QTest::newRow("nonIndexedMesh") << customNonIndexedGeometryRenderer() << v;
diff --git a/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp b/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
index 9b6481423..6a9be5e13 100644
--- a/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
+++ b/tests/auto/render/trianglevisitor/tst_trianglevisitor.cpp
@@ -49,7 +49,7 @@ public:
}
- virtual void visit(uint andx, const QVector3D &a, uint bndx, const QVector3D &b, uint cndx, const QVector3D &c)
+ virtual void visit(uint andx, const Vector3D &a, uint bndx, const Vector3D &b, uint cndx, const Vector3D &c)
{
m_triangles.push_back(TestTriangle(andx, a, bndx, b, cndx, c));
}
@@ -69,7 +69,7 @@ public:
return m_triangles.size();
}
- bool verifyTriangle(uint triangle, uint andx, uint bndx, uint cndx, QVector3D a, QVector3D b, QVector3D c) const
+ bool verifyTriangle(uint triangle, uint andx, uint bndx, uint cndx, Vector3D a, Vector3D b, Vector3D c) const
{
if (triangle >= uint(m_triangles.size()))
return false;
@@ -89,13 +89,13 @@ private:
struct TestTriangle
{
uint abcndx[3];
- QVector3D abc[3];
+ Vector3D abc[3];
TestTriangle()
{
abcndx[0] = abcndx[1] = abcndx[2] = uint(-1);
}
- TestTriangle(uint andx, const QVector3D &a, uint bndx, const QVector3D &b, uint cndx, const QVector3D &c)
+ TestTriangle(uint andx, const Vector3D &a, uint bndx, const Vector3D &b, uint cndx, const Vector3D &c)
{
abcndx[0] = andx;
abcndx[1] = bndx;
@@ -220,8 +220,8 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 2);
- QVERIFY(visitor.verifyTriangle(0, 2,1,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 5,4,3, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(0, 2,1,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 5,4,3, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
}
void testVisitTrianglesIndexed()
@@ -331,11 +331,11 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 5);
- QVERIFY(visitor.verifyTriangle(0, 2,1,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 5,4,3, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(2, 0,1,5, QVector3D(0,0,1), QVector3D(1,0,0), QVector3D(0,1,0)));
- QVERIFY(visitor.verifyTriangle(3, 2,3,4, QVector3D(0,1,0), QVector3D(0,0,1), QVector3D(1,0,0)));
- QVERIFY(visitor.verifyTriangle(4, 4,2,0, QVector3D(1,0,0), QVector3D(0,1,0), QVector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(0, 2,1,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 5,4,3, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(2, 0,1,5, Vector3D(0,0,1), Vector3D(1,0,0), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(3, 2,3,4, Vector3D(0,1,0), Vector3D(0,0,1), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifyTriangle(4, 4,2,0, Vector3D(1,0,0), Vector3D(0,1,0), Vector3D(0,0,1)));
}
void testVisitTriangleStrip()
@@ -407,10 +407,10 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 4);
- QVERIFY(visitor.verifyTriangle(0, 2,1,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 3,2,1, QVector3D(0,0,1), QVector3D(0,1,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifyTriangle(2, 4,3,2, QVector3D(1,0,0), QVector3D(0,0,1), QVector3D(0,1,0)));
- QVERIFY(visitor.verifyTriangle(3, 5,4,3, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(0, 2,1,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 3,2,1, Vector3D(0,0,1), Vector3D(0,1,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifyTriangle(2, 4,3,2, Vector3D(1,0,0), Vector3D(0,0,1), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(3, 5,4,3, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
}
void testVisitTriangleStripIndexed()
@@ -517,14 +517,14 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 8);
- QVERIFY(visitor.verifyTriangle(0, 2,1,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 3,2,1, QVector3D(0,0,1), QVector3D(0,1,0), QVector3D(1,0,0)));
- QVERIFY(visitor.verifyTriangle(2, 4,3,2, QVector3D(1,0,0), QVector3D(0,0,1), QVector3D(0,1,0)));
- QVERIFY(visitor.verifyTriangle(3, 5,4,3, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(4, 0,1,5, QVector3D(0,0,1), QVector3D(1,0,0), QVector3D(0,1,0)));
- QVERIFY(visitor.verifyTriangle(5, 4,0,1, QVector3D(1,0,0), QVector3D(0,0,1), QVector3D(1,0,0)));
- QVERIFY(visitor.verifyTriangle(6, 3,4,0, QVector3D(0,0,1), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(7, 2,3,4, QVector3D(0,1,0), QVector3D(0,0,1), QVector3D(1,0,0)));
+ QVERIFY(visitor.verifyTriangle(0, 2,1,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 3,2,1, Vector3D(0,0,1), Vector3D(0,1,0), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifyTriangle(2, 4,3,2, Vector3D(1,0,0), Vector3D(0,0,1), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(3, 5,4,3, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(4, 0,1,5, Vector3D(0,0,1), Vector3D(1,0,0), Vector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(5, 4,0,1, Vector3D(1,0,0), Vector3D(0,0,1), Vector3D(1,0,0)));
+ QVERIFY(visitor.verifyTriangle(6, 3,4,0, Vector3D(0,0,1), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(7, 2,3,4, Vector3D(0,1,0), Vector3D(0,0,1), Vector3D(1,0,0)));
}
void testVisitTriangleFan()
@@ -596,10 +596,10 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 4);
- QVERIFY(visitor.verifyTriangle(0, 2,1,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 3,2,0, QVector3D(0,0,1), QVector3D(0,1,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(2, 4,3,0, QVector3D(1,0,0), QVector3D(0,0,1), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(3, 5,4,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(0, 2,1,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 3,2,0, Vector3D(0,0,1), Vector3D(0,1,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(2, 4,3,0, Vector3D(1,0,0), Vector3D(0,0,1), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(3, 5,4,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
}
void testVisitTriangleFanIndexed()
@@ -700,10 +700,10 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 4);
- QVERIFY(visitor.verifyTriangle(0, 2,1,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 3,2,0, QVector3D(0,0,1), QVector3D(0,1,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(2, 4,3,0, QVector3D(1,0,0), QVector3D(0,0,1), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(3, 5,4,0, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(0, 2,1,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 3,2,0, Vector3D(0,0,1), Vector3D(0,1,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(2, 4,3,0, Vector3D(1,0,0), Vector3D(0,0,1), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(3, 5,4,0, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,0,1)));
}
void testVisitTrianglesAdjacency()
@@ -775,7 +775,7 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 1);
- QVERIFY(visitor.verifyTriangle(0, 4,2,0, QVector3D(1,0,0), QVector3D(0,1,0), QVector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(0, 4,2,0, Vector3D(1,0,0), Vector3D(0,1,0), Vector3D(0,0,1)));
}
void testVisitTrianglesAdjacencyIndexed()
@@ -883,8 +883,8 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 2);
- QVERIFY(visitor.verifyTriangle(0, 4,2,0, QVector3D(1,0,0), QVector3D(0,1,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 3,0,5, QVector3D(0,0,1), QVector3D(0,0,1), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(0, 4,2,0, Vector3D(1,0,0), Vector3D(0,1,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 3,0,5, Vector3D(0,0,1), Vector3D(0,0,1), Vector3D(0,1,0)));
}
void testVisitTriangleStripAdjacency()
@@ -969,8 +969,8 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 2);
- QVERIFY(visitor.verifyTriangle(0, 4,2,0, QVector3D(1,0,0), QVector3D(0,1,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 6,4,2, QVector3D(1,1,1), QVector3D(1,0,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(0, 4,2,0, Vector3D(1,0,0), Vector3D(0,1,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 6,4,2, Vector3D(1,1,1), Vector3D(1,0,0), Vector3D(0,1,0)));
}
void testVisitTriangleStripAdjacencyIndexed()
@@ -1074,8 +1074,8 @@ private Q_SLOTS:
// THEN
QVERIFY(visitor.triangleCount() == 2);
- QVERIFY(visitor.verifyTriangle(0, 4,2,0, QVector3D(1,0,0), QVector3D(0,1,0), QVector3D(0,0,1)));
- QVERIFY(visitor.verifyTriangle(1, 5,4,2, QVector3D(0,1,0), QVector3D(1,0,0), QVector3D(0,1,0)));
+ QVERIFY(visitor.verifyTriangle(0, 4,2,0, Vector3D(1,0,0), Vector3D(0,1,0), Vector3D(0,0,1)));
+ QVERIFY(visitor.verifyTriangle(1, 5,4,2, Vector3D(0,1,0), Vector3D(1,0,0), Vector3D(0,1,0)));
}
};
diff --git a/tests/auto/render/uniform/tst_uniform.cpp b/tests/auto/render/uniform/tst_uniform.cpp
index b8578b294..213646369 100644
--- a/tests/auto/render/uniform/tst_uniform.cpp
+++ b/tests/auto/render/uniform/tst_uniform.cpp
@@ -107,7 +107,7 @@ private Q_SLOTS:
}
{
// GIVEN
- UniformValue v(QVector3D(572.0f, 355.0f, 383.0f));
+ UniformValue v(Vector3D(572.0f, 355.0f, 383.0f));
// THEN
QCOMPARE(v.constData<float>()[0], 572.0f);
QCOMPARE(v.constData<float>()[1], 355.0f);
@@ -116,7 +116,7 @@ private Q_SLOTS:
}
{
// GIVEN
- UniformValue v(QVector4D(355.0f, 383.0f, 1340.0f, 1603.0f));
+ UniformValue v(Vector4D(355.0f, 383.0f, 1340.0f, 1603.0f));
// THEN
QCOMPARE(v.constData<float>()[0], 355.0f);
QCOMPARE(v.constData<float>()[1], 383.0f);
@@ -340,7 +340,7 @@ private Q_SLOTS:
void checkComparison()
{
// GIVEN
- const UniformValue v1(QVector3D(454.0f, 883.0f, 572.0f));
+ const UniformValue v1(Vector3D(454.0f, 883.0f, 572.0f));
UniformValue v2(454.0f);
// THEN
@@ -348,13 +348,13 @@ private Q_SLOTS:
QVERIFY(v1 != v2);
// WHEN
- v2 = UniformValue::fromVariant(QVector3D(454.0f, 883.0f, 572.0f));
+ v2 = UniformValue::fromVariant(QVariant::fromValue(Vector3D(454.0f, 883.0f, 572.0f)));
// THEN
QVERIFY(v1 == v2);
QVERIFY(!(v1 != v2));
// WHEN
- v2 = UniformValue::fromVariant(QVector3D(454.0f, 883.0f, 572.0f));
+ v2 = UniformValue::fromVariant(QVariant::fromValue(Vector3D(454.0f, 883.0f, 572.0f)));
// THEN
QVERIFY(v1 == v2);
QVERIFY(!(v1 != v2));
diff --git a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
index c076aa21e..67ddccd9b 100644
--- a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
+++ b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp
@@ -179,7 +179,8 @@ private Q_SLOTS:
// THEN
// See scene file to find translation
- QCOMPARE(backendShaderData->getTransformedProperty(QLatin1String("eyePosition"), camera->viewMatrix()).value<QVector3D>(), camera->viewMatrix() * (QVector3D(1.0f, 1.0f, 1.0f) + QVector3D(0.0f, 5.0f, 0.0f)));
+ QCOMPARE(backendShaderData->getTransformedProperty(QLatin1String("eyePosition"), Matrix4x4(camera->viewMatrix())).value<Vector3D>(),
+ Matrix4x4(camera->viewMatrix()) * (Vector3D(1.0f, 1.0f, 1.0f) + Vector3D(0.0f, 5.0f, 0.0f)));
}
void checkRunModelToWorld()
@@ -219,7 +220,8 @@ private Q_SLOTS:
// THEN
// See scene file to find translation
- QCOMPARE(backendShaderData->getTransformedProperty(QLatin1String("position"), camera->viewMatrix()).value<QVector3D>(), QVector3D(1.0f, 1.0f, 1.0f) + QVector3D(5.0f, 5.0f, 5.0f));
+ QCOMPARE(backendShaderData->getTransformedProperty(QLatin1String("position"), Matrix4x4(camera->viewMatrix())).value<Vector3D>(),
+ Vector3D(1.0f, 1.0f, 1.0f) + Vector3D(5.0f, 5.0f, 5.0f));
}
};