diff options
16 files changed, 0 insertions, 748 deletions
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp index deb77ee4b..e8e8eb84d 100644 --- a/src/plugins/renderers/opengl/renderer/renderer.cpp +++ b/src/plugins/renderers/opengl/renderer/renderer.cpp @@ -261,7 +261,6 @@ Renderer::Renderer(QRenderAspect::RenderType type) , m_sendBufferCaptureJob(Render::SendBufferCaptureJobPtr::create()) , m_updateSkinningPaletteJob(Render::UpdateSkinningPaletteJobPtr::create()) , m_updateLevelOfDetailJob(Render::UpdateLevelOfDetailJobPtr::create()) - , m_updateMeshTriangleListJob(Render::UpdateMeshTriangleListJobPtr::create()) , m_filterCompatibleTechniqueJob(FilterCompatibleTechniqueJobPtr::create()) , m_updateEntityLayersJob(Render::UpdateEntityLayersJobPtr::create()) , m_lightGathererJob(Render::LightGathererPtr::create()) @@ -308,11 +307,6 @@ Renderer::Renderer(QRenderAspect::RenderType type) // Ensures all skeletons are loaded before we try to update them m_updateSkinningPaletteJob->addDependency(m_syncLoadingJobs); - // All world stuff depends on the RenderEntity's localBoundingVolume - m_updateLevelOfDetailJob->addDependency(m_updateMeshTriangleListJob); - m_pickBoundingVolumeJob->addDependency(m_updateMeshTriangleListJob); - m_rayCastingJob->addDependency(m_updateMeshTriangleListJob); - m_introspectShaderJob->addDependency(m_filterCompatibleTechniqueJob); m_cacheLightsJob->addDependency(m_lightGathererJob); @@ -393,7 +387,6 @@ void Renderer::setNodeManagers(NodeManagers *managers) m_updateWorldBoundingVolumeJob->setManager(m_nodesManager->renderNodesManager()); m_updateLevelOfDetailJob->setManagers(m_nodesManager); m_updateSkinningPaletteJob->setManagers(m_nodesManager); - m_updateMeshTriangleListJob->setManagers(m_nodesManager); m_filterCompatibleTechniqueJob->setManager(m_nodesManager->techniqueManager()); m_updateEntityLayersJob->setManager(m_nodesManager); m_updateTreeEnabledJob->setManagers(m_nodesManager); @@ -1946,7 +1939,6 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs() if (dirtyBitsForFrame & AbstractRenderer::GeometryDirty || dirtyBitsForFrame & AbstractRenderer::BuffersDirty) { renderBinJobs.push_back(m_calculateBoundingVolumeJob); - renderBinJobs.push_back(m_updateMeshTriangleListJob); } if (dirtyBitsForFrame & AbstractRenderer::GeometryDirty || diff --git a/src/plugins/renderers/opengl/renderer/renderer_p.h b/src/plugins/renderers/opengl/renderer/renderer_p.h index 8ab56bd01..e1bcce693 100644 --- a/src/plugins/renderers/opengl/renderer/renderer_p.h +++ b/src/plugins/renderers/opengl/renderer/renderer_p.h @@ -71,7 +71,6 @@ #include <Qt3DRender/private/platformsurfacefilter_p.h> #include <Qt3DRender/private/sendbuffercapturejob_p.h> #include <Qt3DRender/private/genericlambdajob_p.h> -#include <Qt3DRender/private/updatemeshtrianglelistjob_p.h> #include <Qt3DRender/private/updateskinningpalettejob_p.h> #include <Qt3DRender/private/updateentitylayersjob_p.h> #include <Qt3DRender/private/shaderbuilder_p.h> @@ -241,7 +240,6 @@ public: inline UpdateWorldTransformJobPtr updateWorldTransformJob() const { return m_worldTransformJob; } inline UpdateWorldBoundingVolumeJobPtr updateWorldBoundingVolumeJob() const { return m_updateWorldBoundingVolumeJob; } inline UpdateLevelOfDetailJobPtr updateLevelOfDetailJob() const { return m_updateLevelOfDetailJob; } - inline UpdateMeshTriangleListJobPtr updateMeshTriangleListJob() const { return m_updateMeshTriangleListJob; } inline FilterCompatibleTechniqueJobPtr filterCompatibleTechniqueJob() const { return m_filterCompatibleTechniqueJob; } inline SynchronizerJobPtr syncLoadingJobs() const { return m_syncLoadingJobs; } inline UpdateSkinningPaletteJobPtr updateSkinningPaletteJob() const { return m_updateSkinningPaletteJob; } @@ -398,7 +396,6 @@ private: SendBufferCaptureJobPtr m_sendBufferCaptureJob; UpdateSkinningPaletteJobPtr m_updateSkinningPaletteJob; UpdateLevelOfDetailJobPtr m_updateLevelOfDetailJob; - UpdateMeshTriangleListJobPtr m_updateMeshTriangleListJob; FilterCompatibleTechniqueJobPtr m_filterCompatibleTechniqueJob; UpdateEntityLayersJobPtr m_updateEntityLayersJob; LightGathererPtr m_lightGathererJob; diff --git a/src/render/geometry/geometryrenderermanager.cpp b/src/render/geometry/geometryrenderermanager.cpp index be5cc2487..e51c7caef 100644 --- a/src/render/geometry/geometryrenderermanager.cpp +++ b/src/render/geometry/geometryrenderermanager.cpp @@ -65,24 +65,6 @@ QVector<Qt3DCore::QNodeId> GeometryRendererManager::dirtyGeometryRenderers() return vector; } -void GeometryRendererManager::requestTriangleDataRefreshForGeometryRenderer(const Qt3DCore::QNodeId geometryRenderer) -{ - if (!m_geometryRenderersRequiringTriangleRefresh.contains(geometryRenderer)) - m_geometryRenderersRequiringTriangleRefresh.push_back(geometryRenderer); -} - -bool GeometryRendererManager::isGeometryRendererScheduledForTriangleDataRefresh(const Qt3DCore::QNodeId geometryRenderer) -{ - return m_geometryRenderersRequiringTriangleRefresh.contains(geometryRenderer); -} - -QVector<Qt3DCore::QNodeId> GeometryRendererManager::geometryRenderersRequiringTriangleDataRefresh() -{ - QVector<Qt3DCore::QNodeId> vector(m_geometryRenderersRequiringTriangleRefresh); - m_geometryRenderersRequiringTriangleRefresh.clear(); - return vector; -} - } // namespace Render } // namespace Qt3DRender diff --git a/src/render/geometry/geometryrenderermanager_p.h b/src/render/geometry/geometryrenderermanager_p.h index 7b7b629bd..182e0e718 100644 --- a/src/render/geometry/geometryrenderermanager_p.h +++ b/src/render/geometry/geometryrenderermanager_p.h @@ -73,11 +73,6 @@ public: void addDirtyGeometryRenderer(Qt3DCore::QNodeId bufferId); QVector<Qt3DCore::QNodeId> dirtyGeometryRenderers(); - void requestTriangleDataRefreshForGeometryRenderer(const Qt3DCore::QNodeId geometryRenderer); - bool isGeometryRendererScheduledForTriangleDataRefresh(const Qt3DCore::QNodeId geometryRenderer); - QVector<Qt3DCore::QNodeId> geometryRenderersRequiringTriangleDataRefresh(); - - private: QVector<Qt3DCore::QNodeId> m_dirtyGeometryRenderers; QVector<Qt3DCore::QNodeId> m_geometryRenderersRequiringTriangleRefresh; diff --git a/src/render/jobs/jobs.pri b/src/render/jobs/jobs.pri index 97ad32557..8435ebc0b 100644 --- a/src/render/jobs/jobs.pri +++ b/src/render/jobs/jobs.pri @@ -18,7 +18,6 @@ HEADERS += \ $$PWD/updateworldboundingvolumejob_p.h \ $$PWD/updateshaderdatatransformjob_p.h \ $$PWD/updatelevelofdetailjob_p.h \ - $$PWD/updatemeshtrianglelistjob_p.h \ $$PWD/pickboundingvolumeutils_p.h \ $$PWD/updatetreeenabledjob_p.h \ $$PWD/sendbuffercapturejob_p.h \ @@ -43,7 +42,6 @@ SOURCES += \ $$PWD/expandboundingvolumejob.cpp \ $$PWD/updateworldboundingvolumejob.cpp \ $$PWD/updateshaderdatatransformjob.cpp \ - $$PWD/updatemeshtrianglelistjob.cpp \ $$PWD/updatelevelofdetailjob.cpp \ $$PWD/pickboundingvolumeutils.cpp \ $$PWD/updatetreeenabledjob.cpp \ diff --git a/src/render/jobs/updatemeshtrianglelistjob.cpp b/src/render/jobs/updatemeshtrianglelistjob.cpp deleted file mode 100644 index 4837dcad6..000000000 --- a/src/render/jobs/updatemeshtrianglelistjob.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 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$ -** -****************************************************************************/ - -#include "updatemeshtrianglelistjob_p.h" -#include <Qt3DRender/private/job_common_p.h> -#include <Qt3DRender/private/nodemanagers_p.h> -#include <Qt3DRender/private/light_p.h> -#include <Qt3DRender/private/sphere_p.h> -#include <Qt3DRender/private/attribute_p.h> -#include <Qt3DRender/private/geometryrenderer_p.h> -#include <Qt3DRender/private/geometry_p.h> -#include <Qt3DRender/private/attribute_p.h> -#include <Qt3DRender/private/buffer_p.h> -#include <Qt3DRender/private/managers_p.h> -#include <Qt3DRender/private/buffermanager_p.h> -#include <Qt3DRender/private/geometryrenderermanager_p.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -UpdateMeshTriangleListJob::UpdateMeshTriangleListJob() - : m_manager(nullptr) -{ - SET_JOB_RUN_STAT_TYPE(this, JobTypes::UpdateMeshTriangleList, 0) -} - -UpdateMeshTriangleListJob::~UpdateMeshTriangleListJob() -{ -} - -void UpdateMeshTriangleListJob::setManagers(NodeManagers *manager) -{ - m_manager = manager; -} - -void UpdateMeshTriangleListJob::run() -{ - GeometryRendererManager *geomRenderermanager = m_manager->geometryRendererManager(); - GeometryManager *geomManager = m_manager->geometryManager(); - BufferManager *bufferManager = m_manager->bufferManager(); - AttributeManager *attributeManager = m_manager->attributeManager(); - - const QVector<HGeometryRenderer> handles = geomRenderermanager->activeHandles(); - - for (const HGeometryRenderer &handle : handles) { - // Look if for the GeometryRender/Geometry the attributes and or buffers are dirty - // in which case we need to recompute the triangle list - const GeometryRenderer *geomRenderer = geomRenderermanager->data(handle); - if (geomRenderer != nullptr) { - const Geometry *geom = geomManager->lookupResource(geomRenderer->geometryId()); - if (geom != nullptr) { - const Qt3DCore::QNodeId geomRendererId = geomRenderer->peerId(); - if (!geomRenderermanager->isGeometryRendererScheduledForTriangleDataRefresh(geomRendererId)) { - // Check if the attributes or buffers are dirty - bool dirty = geomRenderer->isDirty(); - const auto attrIds = geom->attributes(); - for (const Qt3DCore::QNodeId attrId : attrIds) { - const Attribute *attr = attributeManager->lookupResource(attrId); - if (attr != nullptr) { - dirty |= attr->isDirty(); - if (!dirty) { - const Buffer *buffer = bufferManager->lookupResource(attr->bufferId()); - if (buffer != nullptr) - dirty = buffer->isDirty(); - } - if (dirty) - break; - } - } - if (dirty) - m_manager->geometryRendererManager()->requestTriangleDataRefreshForGeometryRenderer(geomRendererId); - } - } - } - } -} - -NodeManagers *UpdateMeshTriangleListJob::managers() const -{ - return m_manager; -} - -} // Render - -} // Qt3DRender - -QT_END_NAMESPACE diff --git a/src/render/jobs/updatemeshtrianglelistjob_p.h b/src/render/jobs/updatemeshtrianglelistjob_p.h deleted file mode 100644 index 048f8f01a..000000000 --- a/src/render/jobs/updatemeshtrianglelistjob_p.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 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_UPDATEMESHTRIANGLELISTJOB_H -#define QT3DRENDER_RENDER_UPDATEMESHTRIANGLELISTJOB_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 <Qt3DCore/qaspectjob.h> -#include <Qt3DRender/private/qt3drender_global_p.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -class NodeManagers; - -class Q_3DRENDERSHARED_PRIVATE_EXPORT UpdateMeshTriangleListJob : public Qt3DCore::QAspectJob -{ -public: - UpdateMeshTriangleListJob(); - ~UpdateMeshTriangleListJob(); - - void setManagers(NodeManagers *manager); - void run() final; - - NodeManagers *managers() const; - -private: - NodeManagers *m_manager; -}; - -typedef QSharedPointer<UpdateMeshTriangleListJob> UpdateMeshTriangleListJobPtr; - -} // Render - -} // Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_RENDER_UPDATEMESHTRIANGLELISTJOB_H diff --git a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp index 2e3b498a6..7a05addcd 100644 --- a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp +++ b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp @@ -48,7 +48,6 @@ #include <Qt3DRender/qrenderaspect.h> #include <Qt3DRender/private/qrenderaspect_p.h> #include <Qt3DRender/private/pickboundingvolumejob_p.h> -#include <Qt3DRender/private/updatemeshtrianglelistjob_p.h> #include <Qt3DRender/private/updateworldboundingvolumejob_p.h> #include <Qt3DRender/private/updateworldtransformjob_p.h> #include <Qt3DRender/private/expandboundingvolumejob_p.h> @@ -166,10 +165,6 @@ void runRequiredJobs(Qt3DRender::TestAspect *test) expandBVolume.setRoot(test->sceneRoot()); expandBVolume.setManagers(test->nodeManagers()); expandBVolume.run(); - - Qt3DRender::Render::UpdateMeshTriangleListJob updateTriangleList; - updateTriangleList.setManagers(test->nodeManagers()); - updateTriangleList.run(); } } // anonymous diff --git a/tests/auto/render/opengl/renderer/tst_renderer.cpp b/tests/auto/render/opengl/renderer/tst_renderer.cpp index c602e7cf8..d0f1d5c17 100644 --- a/tests/auto/render/opengl/renderer/tst_renderer.cpp +++ b/tests/auto/render/opengl/renderer/tst_renderer.cpp @@ -161,7 +161,6 @@ private Q_SLOTS: 1 + // UpdateShaderDataTransform 1 + // ExpandBoundingVolumeJob 1 + // CalculateBoundingVolumeJob - 1 + // UpdateMeshTriangleListJob 1 + // updateSkinningPaletteJob 1 + // SyncLoadingJobs 1 + // updateLevelOfDetailJob @@ -289,7 +288,6 @@ private Q_SLOTS: 1 + // cleanupJob 1 + // VAOGatherer 1 + // CalculateBoundingVolumeJob - 1 + // UpdateMeshTriangleListJob 1 + // updateSkinningPaletteJob 1 + // SyncLoadingJobs 1 + // ExpandBoundingVolumeJob @@ -313,7 +311,6 @@ private Q_SLOTS: 1 + // updateSkinningPaletteJob 1 + // SyncLoadingJobs 1 + // CalculateBoundingVolumeJob - 1 + // UpdateMeshTriangleListJob 1 + // BufferGathererJob singleRenderViewJobCount); diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp index ea809cf50..cd984cfac 100644 --- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp +++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp @@ -54,7 +54,6 @@ #include <Qt3DRender/private/qrenderaspect_p.h> #include <Qt3DRender/private/pickboundingvolumejob_p.h> #include <Qt3DRender/private/pickboundingvolumeutils_p.h> -#include <Qt3DRender/private/updatemeshtrianglelistjob_p.h> #include <Qt3DRender/private/updateworldboundingvolumejob_p.h> #include <Qt3DRender/private/updateworldtransformjob_p.h> #include <Qt3DRender/private/expandboundingvolumejob_p.h> @@ -193,10 +192,6 @@ void runRequiredJobs(Qt3DRender::TestAspect *test) expandBVolume.setRoot(test->sceneRoot()); expandBVolume.setManagers(test->nodeManagers()); expandBVolume.run(); - - Qt3DRender::Render::UpdateMeshTriangleListJob updateTriangleList; - updateTriangleList.setManagers(test->nodeManagers()); - updateTriangleList.run(); } void initializePickBoundingVolumeJob(Qt3DRender::Render::PickBoundingVolumeJob *job, Qt3DRender::TestAspect *test) diff --git a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp index 2908842eb..61774b1bb 100644 --- a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp +++ b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp @@ -50,7 +50,6 @@ #include <Qt3DRender/private/qrenderaspect_p.h> #include <Qt3DRender/private/raycastingjob_p.h> #include <Qt3DRender/private/pickboundingvolumeutils_p.h> -#include <Qt3DRender/private/updatemeshtrianglelistjob_p.h> #include <Qt3DRender/private/updateworldboundingvolumejob_p.h> #include <Qt3DRender/private/updateworldtransformjob_p.h> #include <Qt3DRender/private/expandboundingvolumejob_p.h> @@ -189,10 +188,6 @@ void runRequiredJobs(Qt3DRender::TestAspect *test) expandBVolume.setRoot(test->sceneRoot()); expandBVolume.setManagers(test->nodeManagers()); expandBVolume.run(); - - Qt3DRender::Render::UpdateMeshTriangleListJob updateTriangleList; - updateTriangleList.setManagers(test->nodeManagers()); - updateTriangleList.run(); } void initializeJob(Qt3DRender::Render::RayCastingJob *job, Qt3DRender::TestAspect *test) diff --git a/tests/auto/render/render.pro b/tests/auto/render/render.pro index d819cf543..9592b9f6c 100644 --- a/tests/auto/render/render.pro +++ b/tests/auto/render/render.pro @@ -134,7 +134,6 @@ qtConfig(qt3d-opengl-renderer):qtConfig(private_tests) { boundingsphere \ pickboundingvolumejob \ gltfplugins \ - updatemeshtrianglelistjob \ updateshaderdatatransformjob } diff --git a/tests/auto/render/updatemeshtrianglelistjob/test_scene.qml b/tests/auto/render/updatemeshtrianglelistjob/test_scene.qml deleted file mode 100644 index 35292967c..000000000 --- a/tests/auto/render/updatemeshtrianglelistjob/test_scene.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 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:BSD$ -** 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. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import Qt3D.Core 2.0 -import Qt3D.Render 2.0 -import Qt3D.Extras 2.0 -import QtQuick.Window 2.0 - -Entity { - id: sceneRoot - - Window { - id: win - width: 800 - height: 800 - visible: true - } - - Camera { - id: camera - projectionType: CameraLens.PerspectiveProjection - fieldOfView: 45 - nearPlane : 0.1 - farPlane : 1000.0 - position: Qt.vector3d( 0.0, 0.0, -40.0 ) - upVector: Qt.vector3d( 0.0, 1.0, 0.0 ) - viewCenter: Qt.vector3d( 0.0, 0.0, 0.0 ) - } - - components: [ - RenderSettings { - Viewport { - normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0) - - RenderSurfaceSelector { - - surface: win - - ClearBuffers { - buffers : ClearBuffers.ColorDepthBuffer - NoDraw {} - } - - CameraSelector { - camera: camera - } - } - } - } - ] - - Entity { - components: GeometryRenderer { id: cubeMesh; view: CuboidMesh { } } - } -} diff --git a/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp b/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp deleted file mode 100644 index a0af5cea5..000000000 --- a/tests/auto/render/updatemeshtrianglelistjob/tst_updatemeshtrianglelistjob.cpp +++ /dev/null @@ -1,354 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 Paul Lemire <paul.lemire350@gmail.com> -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt3D module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** 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-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include <QtTest/QTest> -#include <Qt3DRender/private/updatemeshtrianglelistjob_p.h> -#include <Qt3DRender/private/nodemanagers_p.h> -#include <Qt3DRender/private/managers_p.h> -#include <Qt3DRender/private/geometryrenderermanager_p.h> -#include <Qt3DRender/private/buffermanager_p.h> -#include <Qt3DRender/private/loadgeometryjob_p.h> -#include <Qt3DRender/qrenderaspect.h> -#include <Qt3DRender/private/qrenderaspect_p.h> -#include <Qt3DCore/private/qnodevisitor_p.h> -#include "qmlscenereader.h" - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { // Needs to be in that namespace to be friend with QRenderAspect - -QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root) -{ - using namespace Qt3DCore; - - QVector<QNode *> nodes; - Qt3DCore::QNodeVisitor visitor; - visitor.traverse(root, [&nodes](QNode *node) { - nodes.append(node); - - // Store the metaobject of the node in the QNode so that we have it available - // to us during destruction in the QNode destructor. This allows us to send - // the QNodeId and the metaobject as typeinfo to the backend aspects so they - // in turn can find the correct QBackendNodeMapper object to handle the destruction - // of the corresponding backend nodes. - QNodePrivate *d = QNodePrivate::get(node); - d->m_typeInfo = const_cast<QMetaObject*>(QNodePrivate::findStaticMetaObject(node->metaObject())); - - // Mark this node as having been handled for creation so that it is picked up - d->m_hasBackendNode = true; - }); - - return nodes; -} - -QVector<Qt3DCore::NodeTreeChange> nodeTreeChangesForNodes(const QVector<Qt3DCore::QNode *> nodes) -{ - QVector<Qt3DCore::NodeTreeChange> nodeTreeChanges; - nodeTreeChanges.reserve(nodes.size()); - - for (Qt3DCore::QNode *n : nodes) { - nodeTreeChanges.push_back({ - n->id(), - Qt3DCore::QNodePrivate::get(n)->m_typeInfo, - Qt3DCore::NodeTreeChange::Added, - n - }); - } - - return nodeTreeChanges; -} - -class TestAspect : public Qt3DRender::QRenderAspect -{ -public: - TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) - , m_sceneRoot(nullptr) - { - Qt3DRender::QRenderAspect::onRegistered(); - - const QVector<Qt3DCore::QNode *> nodes = getNodesForCreation(root); - d_func()->setRootAndCreateNodes(qobject_cast<Qt3DCore::QEntity *>(root), nodeTreeChangesForNodes(nodes)); - - Qt3DRender::Render::Entity *rootEntity = nodeManagers()->lookupResource<Qt3DRender::Render::Entity, Render::EntityManager>(rootEntityId()); - Q_ASSERT(rootEntity); - m_sceneRoot = rootEntity; - } - - ~TestAspect() - { - QRenderAspect::onUnregistered(); - } - - void onRegistered() { Qt3DRender::QRenderAspect::onRegistered(); } - void onUnregistered() { Qt3DRender::QRenderAspect::onUnregistered(); } - - Qt3DRender::Render::NodeManagers *nodeManagers() const { return d_func()->m_renderer->nodeManagers(); } - Qt3DRender::Render::FrameGraphNode *frameGraphRoot() const { return d_func()->m_renderer->frameGraphRoot(); } - Qt3DRender::Render::RenderSettings *renderSettings() const { return d_func()->m_renderer->settings(); } - Qt3DRender::Render::Entity *sceneRoot() const { return m_sceneRoot; } - -private: - Qt3DRender::Render::Entity *m_sceneRoot; -}; - -} // Qt3DRender - -QT_END_NAMESPACE - -namespace { - -void runRequiredJobs(Qt3DRender::TestAspect *aspect) -{ - Qt3DRender::Render::GeometryRendererManager *geomRendererManager = aspect->nodeManagers()->geometryRendererManager(); - const QVector<Qt3DCore::QNodeId> dirtyGeometryRenderers = geomRendererManager->dirtyGeometryRenderers(); - QVector<Qt3DCore::QAspectJobPtr> dirtyGeometryRendererJobs; - dirtyGeometryRendererJobs.reserve(dirtyGeometryRenderers.size()); - - // Load Geometry - for (const Qt3DCore::QNodeId geoRendererId : dirtyGeometryRenderers) { - Qt3DRender::Render::HGeometryRenderer geometryRendererHandle = geomRendererManager->lookupHandle(geoRendererId); - if (!geometryRendererHandle.isNull()) { - auto job = Qt3DRender::Render::LoadGeometryJobPtr::create(geometryRendererHandle); - job->setNodeManagers(aspect->nodeManagers()); - dirtyGeometryRendererJobs.push_back(job); - } - } -} - -struct NodeCollection -{ - explicit NodeCollection(Qt3DRender::TestAspect *aspect, QObject *frontendRoot) - : geometryRenderers(frontendRoot->findChildren<Qt3DRender::QGeometryRenderer *>()) - , attributes(frontendRoot->findChildren<Qt3DCore::QAttribute *>()) - , buffers(frontendRoot->findChildren<Qt3DCore::QBuffer *>()) - { - // THEN - QCOMPARE(aspect->nodeManagers()->geometryManager()->activeHandles().size(), geometryRenderers.size()); - QCOMPARE(aspect->nodeManagers()->attributeManager()->activeHandles().size(), attributes.size()); - QCOMPARE(aspect->nodeManagers()->bufferManager()->activeHandles().size(), buffers.size()); - - for (const Qt3DRender::QGeometryRenderer *g : qAsConst(geometryRenderers)) { - Qt3DRender::Render::GeometryRenderer *backend = aspect->nodeManagers()->geometryRendererManager()->lookupResource(g->id()); - QVERIFY(backend != nullptr); - backendGeometryRenderer.push_back(backend); - } - - for (const Qt3DCore::QAttribute *a : qAsConst(attributes)) { - Qt3DRender::Render::Attribute *backend = aspect->nodeManagers()->attributeManager()->lookupResource(a->id()); - QVERIFY(backend != nullptr); - backendAttributes.push_back(backend); - } - - for (const Qt3DCore::QBuffer *b : qAsConst(buffers)) { - Qt3DRender::Render::Buffer *backend = aspect->nodeManagers()->bufferManager()->lookupResource(b->id()); - QVERIFY(backend != nullptr); - backendBuffers.push_back(backend); - } - } - - QList<Qt3DRender::QGeometryRenderer *> geometryRenderers; - QList<Qt3DCore::QAttribute *> attributes; - QList<Qt3DCore::QBuffer *> buffers; - - QVector<Qt3DRender::Render::GeometryRenderer *> backendGeometryRenderer; - QVector<Qt3DRender::Render::Attribute *> backendAttributes; - QVector<Qt3DRender::Render::Buffer *> backendBuffers; -}; - - -} // anonymous - -class tst_UpdateMeshTriangleListJob : public QObject -{ - Q_OBJECT - -private Q_SLOTS: - - void checkInitialState() - { - // GIVEN - Qt3DRender::Render::UpdateMeshTriangleListJob backendUpdateMeshTriangleListJob; - - // THEN - QVERIFY(backendUpdateMeshTriangleListJob.managers() == nullptr); - } - - void checkInitialize() - { - // GIVEN - Qt3DRender::Render::UpdateMeshTriangleListJob updateMeshTriangleListJob; - Qt3DRender::Render::NodeManagers managers; - - // WHEN - updateMeshTriangleListJob.setManagers(&managers); - - // THEN - QVERIFY(updateMeshTriangleListJob.managers() == &managers); - } - - void checkRunNoDirtyGeometryRenderNoDirtyAttributesNoDirtyBuffers() - { - // GIVEN - QmlSceneReader sceneReader(QUrl("qrc:/test_scene.qml")); - QScopedPointer<Qt3DCore::QNode> root(qobject_cast<Qt3DCore::QNode *>(sceneReader.root())); - QVERIFY(root); - QScopedPointer<Qt3DRender::TestAspect> test(new Qt3DRender::TestAspect(root.data())); - - // Run required jobs to load geometries and meshes - runRequiredJobs(test.data()); - - // WHEN - const NodeCollection collection(test.data(), root.data()); - - // THEN - QCOMPARE(collection.geometryRenderers.size(), 1); - QCOMPARE(collection.attributes.size(), 5); - QCOMPARE(collection.buffers.size(), 2); - - // WHEN - for (Qt3DRender::Render::GeometryRenderer *g : collection.backendGeometryRenderer) - g->unsetDirty(); - for (Qt3DRender::Render::Attribute *a : collection.backendAttributes) - a->unsetDirty(); - for (Qt3DRender::Render::Buffer *b : collection.backendBuffers) - b->unsetDirty(); - - Qt3DRender::Render::UpdateMeshTriangleListJob backendUpdateMeshTriangleListJob; - backendUpdateMeshTriangleListJob.setManagers(test->nodeManagers()); - - backendUpdateMeshTriangleListJob.run(); - - // THEN - QCOMPARE(test->nodeManagers()->geometryRendererManager()->geometryRenderersRequiringTriangleDataRefresh().size(), 0); - } - - void checkRunDirtyGeometryRenderNoDirtyAttributesNoDirtyBuffers() - { - // GIVEN - QmlSceneReader sceneReader(QUrl("qrc:/test_scene.qml")); - QScopedPointer<Qt3DCore::QNode> root(qobject_cast<Qt3DCore::QNode *>(sceneReader.root())); - QVERIFY(root); - QScopedPointer<Qt3DRender::TestAspect> test(new Qt3DRender::TestAspect(root.data())); - - // Run required jobs to load geometries and meshes - runRequiredJobs(test.data()); - - // WHEN - const NodeCollection collection(test.data(), root.data()); - - // THEN - QCOMPARE(collection.geometryRenderers.size(), 1); - QCOMPARE(collection.attributes.size(), 5); - QCOMPARE(collection.buffers.size(), 2); - - // WHEN - for (Qt3DRender::Render::Attribute *a : collection.backendAttributes) - a->unsetDirty(); - for (Qt3DRender::Render::Buffer *b : collection.backendBuffers) - b->unsetDirty(); - - Qt3DRender::Render::UpdateMeshTriangleListJob backendUpdateMeshTriangleListJob; - backendUpdateMeshTriangleListJob.setManagers(test->nodeManagers()); - - backendUpdateMeshTriangleListJob.run(); - - // THEN - QCOMPARE(test->nodeManagers()->geometryRendererManager()->geometryRenderersRequiringTriangleDataRefresh().size(), 1); - } - - void checkRunDirtyGeometryRenderDirtyAttributesNoDirtyBuffers() - { - // GIVEN - QmlSceneReader sceneReader(QUrl("qrc:/test_scene.qml")); - QScopedPointer<Qt3DCore::QNode> root(qobject_cast<Qt3DCore::QNode *>(sceneReader.root())); - QVERIFY(root); - QScopedPointer<Qt3DRender::TestAspect> test(new Qt3DRender::TestAspect(root.data())); - - // Run required jobs to load geometries and meshes - runRequiredJobs(test.data()); - - // WHEN - const NodeCollection collection(test.data(), root.data()); - - // THEN - QCOMPARE(collection.geometryRenderers.size(), 1); - QCOMPARE(collection.attributes.size(), 5); - QCOMPARE(collection.buffers.size(), 2); - - // WHEN - for (Qt3DRender::Render::Buffer *b : collection.backendBuffers) - b->unsetDirty(); - - Qt3DRender::Render::UpdateMeshTriangleListJob backendUpdateMeshTriangleListJob; - backendUpdateMeshTriangleListJob.setManagers(test->nodeManagers()); - - backendUpdateMeshTriangleListJob.run(); - - // THEN - QCOMPARE(test->nodeManagers()->geometryRendererManager()->geometryRenderersRequiringTriangleDataRefresh().size(), 1); - } - - void checkRunDirtyGeometryRenderDirtyAttributesDirtyBuffers() - { - // GIVEN - QmlSceneReader sceneReader(QUrl("qrc:/test_scene.qml")); - QScopedPointer<Qt3DCore::QNode> root(qobject_cast<Qt3DCore::QNode *>(sceneReader.root())); - QVERIFY(root); - QScopedPointer<Qt3DRender::TestAspect> test(new Qt3DRender::TestAspect(root.data())); - - // Run required jobs to load geometries and meshes - runRequiredJobs(test.data()); - - // WHEN - const NodeCollection collection(test.data(), root.data()); - - // THEN - QCOMPARE(collection.geometryRenderers.size(), 1); - QCOMPARE(collection.attributes.size(), 5); - QCOMPARE(collection.buffers.size(), 2); - - // WHEN - for (Qt3DRender::Render::Buffer *b : collection.backendBuffers) - b->unsetDirty(); - - Qt3DRender::Render::UpdateMeshTriangleListJob backendUpdateMeshTriangleListJob; - backendUpdateMeshTriangleListJob.setManagers(test->nodeManagers()); - - backendUpdateMeshTriangleListJob.run(); - - // THEN - QCOMPARE(test->nodeManagers()->geometryRendererManager()->geometryRenderersRequiringTriangleDataRefresh().size(), 1); - } - -}; - -QTEST_MAIN(tst_UpdateMeshTriangleListJob) - -#include "tst_updatemeshtrianglelistjob.moc" diff --git a/tests/auto/render/updatemeshtrianglelistjob/updatemeshtrianglelistjob.pro b/tests/auto/render/updatemeshtrianglelistjob/updatemeshtrianglelistjob.pro deleted file mode 100644 index 499f78c72..000000000 --- a/tests/auto/render/updatemeshtrianglelistjob/updatemeshtrianglelistjob.pro +++ /dev/null @@ -1,18 +0,0 @@ -TEMPLATE = app - -TARGET = tst_updatemeshtrianglelistjob - -QT += 3dcore 3dcore-private 3drender 3drender-private testlib - -CONFIG += testcase - -SOURCES += tst_updatemeshtrianglelistjob.cpp - -include(../../core/common/common.pri) -include(../commons/commons.pri) -include(../qmlscenereader/qmlscenereader.pri) -# Extra dependencies to build test scenes needed by the tests -QT += quick 3dquick 3dquick-private 3dextras 3dquickextras - -RESOURCES += \ - updatemeshtrianglelistjob.qrc diff --git a/tests/auto/render/updatemeshtrianglelistjob/updatemeshtrianglelistjob.qrc b/tests/auto/render/updatemeshtrianglelistjob/updatemeshtrianglelistjob.qrc deleted file mode 100644 index 6a6a0433e..000000000 --- a/tests/auto/render/updatemeshtrianglelistjob/updatemeshtrianglelistjob.qrc +++ /dev/null @@ -1,5 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>test_scene.qml</file> - </qresource> -</RCC> |