/**************************************************************************** ** ** Copyright (C) 2016 Paul Lemire ** 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 #include #include #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Qt3DRender { class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); QRenderAspect::onRegistered(); QVector nodes; Qt3DCore::QNodeVisitor v; v.traverse(root, [&nodes](Qt3DCore::QNode *node) { Qt3DCore::QNodePrivate *d = Qt3DCore::QNodePrivate::get(node); d->m_typeInfo = const_cast(Qt3DCore::QNodePrivate::findStaticMetaObject(node->metaObject())); d->m_hasBackendNode = true; nodes.push_back({ node->id(), Qt3DCore::QNodePrivate::get(node)->m_typeInfo, Qt3DCore::NodeTreeChange::Added, node }); }); for (const auto &node: nodes) d_func()->createBackendNode(node); const auto handles = nodeManagers()->techniqueManager()->activeHandles(); for (const auto handle: handles) { Render::Technique *technique = nodeManagers()->techniqueManager()->data(handle); technique->setCompatibleWithRenderer(true); } } ~TestAspect() { QRenderAspect::onUnregistered(); } Qt3DRender::Render::NodeManagers *nodeManagers() const { return d_func()->m_renderer->nodeManagers(); } Render::MaterialParameterGathererJobPtr materialGathererJob() const { Render::MaterialParameterGathererJobPtr job = Render::MaterialParameterGathererJobPtr::create(); job->setNodeManagers(nodeManagers()); return job; } void onRegistered() { QRenderAspect::onRegistered(); } void onUnregistered() { QRenderAspect::onUnregistered(); } private: QScopedPointer m_jobManager; }; } // namespace Qt3DRender QT_END_NAMESPACE namespace { Qt3DCore::QEntity *buildTestScene(int entityCount) { Qt3DCore::QEntity *root = new Qt3DCore::QEntity(); for (int i = 0; i < entityCount; ++i) { Qt3DCore::QEntity *entity = new Qt3DCore::QEntity(root); Qt3DExtras::QPhongMaterial *material = new Qt3DExtras::QPhongMaterial(); entity->addComponent(material); } return root; } } // anonymous class tst_BenchMaterialParameterGathering : public QObject { Q_OBJECT private Q_SLOTS: void parameterGathering() { // GIVEN QScopedPointer aspect(new Qt3DRender::TestAspect(buildTestScene(2000))); // WHEN Qt3DRender::Render::MaterialParameterGathererJobPtr gatheringJob = aspect->materialGathererJob(); gatheringJob->setHandles(aspect->nodeManagers()->materialManager()->activeHandles()); QBENCHMARK { gatheringJob->run(); } QVERIFY(!gatheringJob->materialToPassAndParameter().empty()); } }; QTEST_MAIN(tst_BenchMaterialParameterGathering) #include "tst_bench_materialparametergathering.moc"