diff options
author | Mike Krus <mike.krus@kdab.com> | 2020-06-19 17:45:57 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2020-06-19 20:20:50 +0100 |
commit | 2b749055c763005c42616b83d2b9050cde5fdf32 (patch) | |
tree | a02a1dbba9482594f31e96cac83cb603a8bcf69b | |
parent | eebbdb87b255545c83038aa4ff422e7ef34c3f6e (diff) |
Remove the OpenGL Render Thread
We're trading a bit of performance at submission (since we could start
preparing the next frame while submitting the current one) for convenience
and ease of maintenance.
Besides, this allows to remove a thread and in cases Qt3D was used with
Scene3D, which is likely the majority of cases, the RenderThread was not
used anyway.
To control whether the QRenderAspect should submit on its own or not,
a new Submission type enum with values Automatic/Manual was added.
This allows the QRenderAspect to automatically perform command submission
when Qt3D is used on its own. For other cases when Qt3D is integrated
into a 3rd party engine or with Scene3D, the Manual mode is used
to let the QRenderAspect render only when it is told to do so.
Change-Id: Idc270b5a07bcb9ea9e61674a69c6b8cf6ccd8182
Reviewed-by: Mike Krus <mike.krus@kdab.com>
33 files changed, 84 insertions, 283 deletions
diff --git a/src/plugins/renderers/opengl/main.cpp b/src/plugins/renderers/opengl/main.cpp index a6cd9faf7..7f97ead1d 100644 --- a/src/plugins/renderers/opengl/main.cpp +++ b/src/plugins/renderers/opengl/main.cpp @@ -47,10 +47,10 @@ class OpenGLRendererPlugin : public Qt3DRender::Render::QRendererPlugin Q_OBJECT Q_PLUGIN_METADATA(IID QRendererPluginFactoryInterface_iid FILE "openglrenderer.json") - Qt3DRender::Render::AbstractRenderer *create(const QString &key, Qt3DRender::QRenderAspect::RenderType renderMode) override + Qt3DRender::Render::AbstractRenderer *create(const QString &key) override { Q_UNUSED(key) - return new Qt3DRender::Render::OpenGL::Renderer(renderMode); + return new Qt3DRender::Render::OpenGL::Renderer(); } }; diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp index 5c6a16769..e32e8d8ad 100644 --- a/src/plugins/renderers/opengl/renderer/renderer.cpp +++ b/src/plugins/renderers/opengl/renderer/renderer.cpp @@ -62,7 +62,6 @@ #include <Qt3DRender/private/shader_p.h> #include <Qt3DRender/private/buffer_p.h> #include <Qt3DRender/private/technique_p.h> -#include <Qt3DRender/private/renderthread_p.h> #include <Qt3DRender/private/scenemanager_p.h> #include <Qt3DRender/private/techniquefilternode_p.h> #include <Qt3DRender/private/viewportnode_p.h> @@ -227,7 +226,7 @@ private: a short while after. */ -Renderer::Renderer(QRenderAspect::RenderType type) +Renderer::Renderer() : m_services(nullptr) , m_aspect(nullptr) , m_nodesManager(nullptr) @@ -235,8 +234,7 @@ Renderer::Renderer(QRenderAspect::RenderType type) , m_defaultRenderStateSet(nullptr) , m_submissionContext(nullptr) , m_renderQueue(new RenderQueue()) - , m_renderThread(type == QRenderAspect::Threaded ? new RenderThread(this) : nullptr) - , m_vsyncFrameAdvanceService(new VSyncFrameAdvanceService(m_renderThread != nullptr)) + , m_vsyncFrameAdvanceService(new VSyncFrameAdvanceService(false)) , m_waitForInitializationToBeCompleted(0) , m_hasBeenInitializedMutex() , m_exposed(0) @@ -269,8 +267,6 @@ Renderer::Renderer(QRenderAspect::RenderType type) // Set renderer as running - it will wait in the context of the // RenderThread for RenderViews to be submitted m_running.fetchAndStoreOrdered(1); - if (m_renderThread) - m_renderThread->waitForStart(); m_introspectShaderJob->addDependency(m_filterCompatibleTechniqueJob); @@ -285,8 +281,6 @@ Renderer::Renderer(QRenderAspect::RenderType type) Renderer::~Renderer() { Q_ASSERT(m_running.fetchAndStoreOrdered(0) == 0); - if (m_renderThread) - Q_ASSERT(m_renderThread->isFinished()); delete m_renderQueue; delete m_defaultRenderStateSet; @@ -543,15 +537,7 @@ void Renderer::shutdown() m_renderQueue->reset(); lockRenderQueue.unlock(); - if (!m_renderThread) { - releaseGraphicsResources(); - } else { - // Wake up the render thread in case it is waiting for some renderviews - // to be ready. The isReadyToSubmit() function checks for a shutdown - // having been requested. - m_submitRenderViewsSemaphore.release(1); - m_renderThread->wait(); - } + releaseGraphicsResources(); // Destroy internal managers // This needs to be done before the nodeManager is destroy @@ -856,7 +842,7 @@ void Renderer::enqueueRenderView(RenderView *renderView, int submitOrder) const bool isQueueComplete = m_renderQueue->queueRenderView(renderView, submitOrder); locker.unlock(); // We're done protecting the queue at this point if (isQueueComplete) { - if (m_renderThread && m_running.loadRelaxed()) + if (m_running.loadRelaxed()) Q_ASSERT(m_submitRenderViewsSemaphore.available() == 0); m_submitRenderViewsSemaphore.release(1); } @@ -864,16 +850,9 @@ void Renderer::enqueueRenderView(RenderView *renderView, int submitOrder) bool Renderer::canRender() const { - // Make sure that we've not been told to terminate - if (m_renderThread && !m_running.loadRelaxed()) { - qCDebug(Rendering) << "RenderThread termination requested whilst waiting"; - return false; - } - // TO DO: Check if all surfaces have been destroyed... // It may be better if the last window to be closed trigger a call to shutdown // Rather than having checks for the surface everywhere - return true; } diff --git a/src/plugins/renderers/opengl/renderer/renderer_p.h b/src/plugins/renderers/opengl/renderer/renderer_p.h index cd3f03956..b8b38b944 100644 --- a/src/plugins/renderers/opengl/renderer/renderer_p.h +++ b/src/plugins/renderers/opengl/renderer/renderer_p.h @@ -136,7 +136,6 @@ class Shader; class Entity; class Effect; class RenderPass; -class RenderThread; class RenderStateSet; class VSyncFrameAdvanceService; class NodeManagers; @@ -169,7 +168,7 @@ class GLResourceManagers; class Q_AUTOTEST_EXPORT Renderer : public AbstractRenderer { public: - explicit Renderer(QRenderAspect::RenderType type); + explicit Renderer(); ~Renderer(); void dumpInfo() const override; @@ -326,7 +325,6 @@ private: QSurfaceFormat m_format; RenderQueue *m_renderQueue; - QScopedPointer<RenderThread> m_renderThread; QScopedPointer<VSyncFrameAdvanceService> m_vsyncFrameAdvanceService; QSemaphore m_submitRenderViewsSemaphore; diff --git a/src/quick3d/imports/scene3d/scene3ditem.cpp b/src/quick3d/imports/scene3d/scene3ditem.cpp index 133c3378e..1c31d199f 100644 --- a/src/quick3d/imports/scene3d/scene3ditem.cpp +++ b/src/quick3d/imports/scene3d/scene3ditem.cpp @@ -714,7 +714,7 @@ QSGNode *Scene3DItem::updatePaintNode(QSGNode *node, QQuickItem::UpdatePaintNode } // If the render aspect wasn't created yet, do so now if (m_renderAspect == nullptr) { - m_renderAspect = new QRenderAspect(QRenderAspect::Synchronous); + m_renderAspect = new QRenderAspect(QRenderAspect::Manual); auto *rw = QQuickRenderControl::renderWindowFor(window()); static_cast<Qt3DRender::QRenderAspectPrivate *>(Qt3DRender::QRenderAspectPrivate::get(m_renderAspect))->m_screen = (rw ? rw->screen() : window()->screen()); diff --git a/src/render/CMakeLists.txt b/src/render/CMakeLists.txt index a6c1b260b..d841099e8 100644 --- a/src/render/CMakeLists.txt +++ b/src/render/CMakeLists.txt @@ -34,7 +34,6 @@ qt_add_module(3DRender backend/rendersettings.cpp backend/rendersettings_p.h backend/rendertarget.cpp backend/rendertarget_p.h backend/rendertargetoutput.cpp backend/rendertargetoutput_p.h - backend/renderthread.cpp backend/renderthread_p.h backend/resourceaccessor.cpp backend/resourceaccessor_p.h backend/segmentsvisitor.cpp backend/segmentsvisitor_p.h backend/stringtoint.cpp backend/stringtoint_p.h diff --git a/src/render/backend/render-backend.pri b/src/render/backend/render-backend.pri index 7b5f3f068..3f75e2115 100644 --- a/src/render/backend/render-backend.pri +++ b/src/render/backend/render-backend.pri @@ -1,7 +1,6 @@ INCLUDEPATH += $$PWD HEADERS += \ - $$PWD/renderthread_p.h \ $$PWD/parameterpack_p.h \ $$PWD/rendertarget_p.h \ $$PWD/attachmentpack_p.h \ @@ -38,7 +37,6 @@ HEADERS += \ $$PWD/apishadermanager_p.h SOURCES += \ - $$PWD/renderthread.cpp \ $$PWD/parameterpack.cpp \ $$PWD/rendertarget.cpp \ $$PWD/managers.cpp \ diff --git a/src/render/backend/renderthread.cpp b/src/render/backend/renderthread.cpp deleted file mode 100644 index 05abf7210..000000000 --- a/src/render/backend/renderthread.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 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 "renderthread_p.h" -#include <Qt3DRender/private/abstractrenderer_p.h> -#include <Qt3DRender/private/renderlogging_p.h> -#include <QEventLoop> -#include <QTime> -#include <QMutexLocker> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -RenderThread::RenderThread(AbstractRenderer *renderer) - : QThread(), - m_renderer(renderer), - m_semaphore(0) -{ -} - -RenderThread::~RenderThread() -{ -} - -// Called by Renderer in the context of the Aspect Thread -void RenderThread::waitForStart( Priority priority ) -{ - qCDebug(Render::Backend) << "Starting Render thread and then going to sleep until it is ready for us..."; - start( priority ); - m_semaphore.acquire(); - qCDebug(Render::Backend) << "Render thread is now ready & calling thread is now awake again"; -} - -// RenderThread context -void RenderThread::run() -{ - // return control to the aspect thread that created us. - m_semaphore.release(); - - // This call to Renderer::initialize() waits for a surface to be set on the - // renderer in the context of the Aspect Thread - m_renderer->initialize(); - - // Enter the main OpenGL submission loop. - m_renderer->render(); - - // Clean up any OpenGL resources - m_renderer->releaseGraphicsResources(); - - qCDebug(Render::Backend) << "Exiting RenderThread"; -} - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE diff --git a/src/render/backend/renderthread_p.h b/src/render/backend/renderthread_p.h deleted file mode 100644 index cdbb4f8c5..000000000 --- a/src/render/backend/renderthread_p.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 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_RENDERTHREAD_H -#define QT3DRENDER_RENDER_RENDERTHREAD_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 <QThread> -#include <Qt3DRender/private/qt3drender_global_p.h> -#include <QtCore/QSemaphore> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -class AbstractRenderer; - -class Q_3DRENDERSHARED_PRIVATE_EXPORT RenderThread : public QThread -{ - Q_OBJECT -public: - explicit RenderThread(AbstractRenderer *renderer); - ~RenderThread(); - - void waitForStart( Priority priority = InheritPriority ); - - Render::AbstractRenderer* renderer() const { return m_renderer; } - -protected: - void run() override; - -private: - AbstractRenderer* m_renderer; - QSemaphore m_semaphore; -}; - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_RENDER_RENDERTHREAD_H diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index 6d2f8757a..d22edafa7 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -287,13 +287,12 @@ namespace Qt3DRender { Renderer and QRenderPlugin. */ /*! \internal */ -QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::RenderType type) +QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::SubmissionType submissionType) : QAbstractAspectPrivate() , m_nodeManagers(nullptr) , m_renderer(nullptr) , m_initialized(false) - , m_renderAfterJobs(false) - , m_renderType(type) + , m_renderAfterJobs(submissionType == QRenderAspect::Automatic || qEnvironmentVariableIsSet("QT3D_FORCE_SYNCHRONOUS_RENDER")) , m_offscreenHelper(nullptr) , m_updateTreeEnabledJob(Render::UpdateTreeEnabledJobPtr::create()) , m_worldTransformJob(Render::UpdateWorldTransformJobPtr::create()) @@ -307,13 +306,10 @@ QRenderAspectPrivate::QRenderAspectPrivate(QRenderAspect::RenderType type) , m_pickBoundingVolumeJob(Render::PickBoundingVolumeJobPtr::create()) , m_rayCastingJob(Render::RayCastingJobPtr::create()) , m_pickEventFilter(new Render::PickEventFilter()) + , m_submissionType(submissionType) { m_instances.append(this); loadSceneParsers(); - if (m_renderType == QRenderAspect::Threaded && !QOpenGLContext::supportsThreadedOpenGL()) { - m_renderType = QRenderAspect::Synchronous; - m_renderAfterJobs = true; - } m_updateWorldBoundingVolumeJob->addDependency(m_worldTransformJob); m_updateWorldBoundingVolumeJob->addDependency(m_calculateBoundingVolumeJob); @@ -586,21 +582,41 @@ void QRenderAspectPrivate::registerBackendType(const QMetaObject &obj, } /*! + * \enum QRenderAspect::SubmissionType + * + * \value Automatic + * The QRenderAspect takes care of submitting rendering commands to the + * GPU. + * \value Manual + * The user will take care of telling the QRenderAspect when is the + * appropriate time to submit the rendering commands to the GPU. + */ + +/*! * The constructor creates a new QRenderAspect::QRenderAspect instance with the - * specified \a parent. + * specified \a parent. This constructor will set the submission type to + * Automatic. * \param parent */ QRenderAspect::QRenderAspect(QObject *parent) - : QRenderAspect(Threaded, parent) {} + : QRenderAspect(QRenderAspect::Automatic, parent) +{ +} /*! * The constructor creates a new QRenderAspect::QRenderAspect instance with the - * specified \a type and \a parent. - * \param type + * specified \a parent. The \a submissionType specifies whether the + * RenderAspect is in charge of performing the rendering submission or if the + * user will take care of it. * \param parent */ -QRenderAspect::QRenderAspect(QRenderAspect::RenderType type, QObject *parent) - : QRenderAspect(*new QRenderAspectPrivate(type), parent) {} +QRenderAspect::QRenderAspect(QRenderAspect::SubmissionType submissionType, + QObject *parent) + : Qt3DCore::QAbstractAspect(*new QRenderAspectPrivate(submissionType), + parent) +{ + +} /*! \internal */ QRenderAspect::QRenderAspect(QRenderAspectPrivate &dd, QObject *parent) @@ -930,7 +946,7 @@ Render::AbstractRenderer *QRenderAspectPrivate::loadRendererPlugin() for (const QString &key : keys) { if (key != targetKey) continue; - Render::AbstractRenderer *renderer = Render::QRendererPluginFactory::create(key, m_renderType); + Render::AbstractRenderer *renderer = Render::QRendererPluginFactory::create(key); if (renderer) return renderer; } diff --git a/src/render/frontend/qrenderaspect.h b/src/render/frontend/qrenderaspect.h index 0a090997c..f16f6f07f 100644 --- a/src/render/frontend/qrenderaspect.h +++ b/src/render/frontend/qrenderaspect.h @@ -69,13 +69,13 @@ class Q_3DRENDERSHARED_EXPORT QRenderAspect : public Qt3DCore::QAbstractAspect { Q_OBJECT public: - enum RenderType { - Synchronous, - Threaded + enum SubmissionType { + Automatic = 0, + Manual }; explicit QRenderAspect(QObject *parent = nullptr); - explicit QRenderAspect(RenderType type, QObject *parent = nullptr); + explicit QRenderAspect(SubmissionType submissionType, QObject *parent = nullptr); ~QRenderAspect(); protected: diff --git a/src/render/frontend/qrenderaspect_p.h b/src/render/frontend/qrenderaspect_p.h index d18ccfc24..f3c96455a 100644 --- a/src/render/frontend/qrenderaspect_p.h +++ b/src/render/frontend/qrenderaspect_p.h @@ -95,7 +95,7 @@ typedef QSharedPointer<UpdateLevelOfDetailJob> UpdateLevelOfDetailJobPtr; class Q_3DRENDERSHARED_PRIVATE_EXPORT QRenderAspectPrivate : public Qt3DCore::QAbstractAspectPrivate { public: - QRenderAspectPrivate(QRenderAspect::RenderType type); + QRenderAspectPrivate(QRenderAspect::SubmissionType submissionType); ~QRenderAspectPrivate(); Q_DECLARE_PUBLIC(QRenderAspect) @@ -126,11 +126,10 @@ public: Render::AbstractRenderer *m_renderer; bool m_initialized; - bool m_renderAfterJobs; + const bool m_renderAfterJobs; QList<QSceneImporter *> m_sceneImporter; QVector<QString> m_loadedPlugins; QVector<Render::QRenderPlugin *> m_renderPlugins; - QRenderAspect::RenderType m_renderType; Render::OffscreenSurfaceHelper *m_offscreenHelper; QScreen *m_screen = nullptr; @@ -147,6 +146,7 @@ public: Render::RayCastingJobPtr m_rayCastingJob; QScopedPointer<Render::PickEventFilter> m_pickEventFilter; + QRenderAspect::SubmissionType m_submissionType; static QMutex m_pluginLock; static QVector<QString> m_pluginConfig; diff --git a/src/render/qrendererplugin.cpp b/src/render/qrendererplugin.cpp index eb54a0ead..a9ce2c744 100644 --- a/src/render/qrendererplugin.cpp +++ b/src/render/qrendererplugin.cpp @@ -54,10 +54,9 @@ QRendererPlugin::~QRendererPlugin() { } -AbstractRenderer *QRendererPlugin::create(const QString &key, QRenderAspect::RenderType renderMode) +AbstractRenderer *QRendererPlugin::create(const QString &key) { Q_UNUSED(key) - Q_UNUSED(renderMode) return nullptr; } diff --git a/src/render/qrendererplugin_p.h b/src/render/qrendererplugin_p.h index d4daeeda2..abf8bb221 100644 --- a/src/render/qrendererplugin_p.h +++ b/src/render/qrendererplugin_p.h @@ -74,7 +74,7 @@ public: explicit QRendererPlugin(QObject *parent = nullptr); ~QRendererPlugin(); - virtual AbstractRenderer *create(const QString &key, QRenderAspect::RenderType renderMode); + virtual AbstractRenderer *create(const QString &key); }; } // Render diff --git a/src/render/qrendererpluginfactory.cpp b/src/render/qrendererpluginfactory.cpp index 3cd41daed..1c0fd2b33 100644 --- a/src/render/qrendererpluginfactory.cpp +++ b/src/render/qrendererpluginfactory.cpp @@ -80,19 +80,19 @@ QStringList QRendererPluginFactory::keys(const QString &pluginPath) return list; } -AbstractRenderer *QRendererPluginFactory::create(const QString &name, QRenderAspect::RenderType renderMode, const QString &pluginPath) +AbstractRenderer *QRendererPluginFactory::create(const QString &name, const QString &pluginPath) { if (!pluginPath.isEmpty()) { #if QT_CONFIG(library) QCoreApplication::addLibraryPath(pluginPath); - if (AbstractRenderer *ret = qLoadPlugin<AbstractRenderer, QRendererPlugin>(directLoader(), name, renderMode)) + if (AbstractRenderer *ret = qLoadPlugin<AbstractRenderer, QRendererPlugin>(directLoader(), name)) return ret; #else qWarning() << QObject::tr("Cannot load QRendererPlugin plugin from %1. " "Library loading is disabled.").arg(pluginPath); #endif } - return qLoadPlugin<AbstractRenderer, QRendererPlugin>(loader(), name, renderMode); + return qLoadPlugin<AbstractRenderer, QRendererPlugin>(loader(), name); } } // Render diff --git a/src/render/qrendererpluginfactory_p.h b/src/render/qrendererpluginfactory_p.h index f73cc8929..2088a8c8e 100644 --- a/src/render/qrendererpluginfactory_p.h +++ b/src/render/qrendererpluginfactory_p.h @@ -67,7 +67,7 @@ class Q_3DRENDERSHARED_PRIVATE_EXPORT QRendererPluginFactory { public: static QStringList keys(const QString &pluginPath = QString()); - static AbstractRenderer *create(const QString &name, QRenderAspect::RenderType renderMode, const QString &pluginPath = QString()); + static AbstractRenderer *create(const QString &name, const QString &pluginPath = QString()); }; } // Render diff --git a/tests/auto/render/aspect/tst_aspect.cpp b/tests/auto/render/aspect/tst_aspect.cpp index 9bd5df698..1e1f2f08e 100644 --- a/tests/auto/render/aspect/tst_aspect.cpp +++ b/tests/auto/render/aspect/tst_aspect.cpp @@ -87,7 +87,6 @@ private Q_SLOTS: Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity(); QScopedPointer<TestRendererAspect> aspect(new TestRendererAspect(rootEntity)); auto daspect = Qt3DRender::QRenderAspectPrivate::get(aspect.data()); - daspect->m_renderAfterJobs = true; aspect->onEngineStartup(); // replace with empty renderer diff --git a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp index 6fbdee807..62a7272a5 100644 --- a/tests/auto/render/boundingsphere/tst_boundingsphere.cpp +++ b/tests/auto/render/boundingsphere/tst_boundingsphere.cpp @@ -108,7 +108,7 @@ class TestAspect : public Qt3DRender::QRenderAspect, public Qt3DCore::QAbstractF { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_sceneRoot(nullptr) { QRenderAspect::onRegistered(); diff --git a/tests/auto/render/commons/testaspect.cpp b/tests/auto/render/commons/testaspect.cpp index 086d79bb6..a2d6a8950 100644 --- a/tests/auto/render/commons/testaspect.cpp +++ b/tests/auto/render/commons/testaspect.cpp @@ -68,7 +68,7 @@ QVector<Qt3DCore::QNode *> getNodesForCreation(Qt3DCore::QNode *root) } TestAspect::TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); diff --git a/tests/auto/render/opengl/computecommand/tst_computecommand.cpp b/tests/auto/render/opengl/computecommand/tst_computecommand.cpp index 4f4f7a1fb..0b1ff3881 100644 --- a/tests/auto/render/opengl/computecommand/tst_computecommand.cpp +++ b/tests/auto/render/opengl/computecommand/tst_computecommand.cpp @@ -46,7 +46,7 @@ class tst_Renderer : public Qt3DRender::Render::OpenGL::Renderer { public: tst_Renderer() - : Qt3DRender::Render::OpenGL::Renderer(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::Render::OpenGL::Renderer() {} ~tst_Renderer() { diff --git a/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp b/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp index 304e56172..6fc95092a 100644 --- a/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp +++ b/tests/auto/render/opengl/filtercompatibletechniquejob/tst_filtercompatibletechniquejob.cpp @@ -52,7 +52,7 @@ class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_jobManager(new Qt3DCore::QAspectJobManager()) , m_window(new QWindow()) , m_contextCreationSuccessful(false) @@ -206,7 +206,7 @@ private Q_SLOTS: // WHEN Qt3DRender::Render::TechniqueManager techniqueManager; - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; backendFilterCompatibleTechniqueJob.setManager(&techniqueManager); backendFilterCompatibleTechniqueJob.setRenderer(&renderer); diff --git a/tests/auto/render/opengl/materialparametergathererjob/tst_materialparametergathererjob.cpp b/tests/auto/render/opengl/materialparametergathererjob/tst_materialparametergathererjob.cpp index efd2c6603..bbc5d15e3 100644 --- a/tests/auto/render/opengl/materialparametergathererjob/tst_materialparametergathererjob.cpp +++ b/tests/auto/render/opengl/materialparametergathererjob/tst_materialparametergathererjob.cpp @@ -62,7 +62,7 @@ class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); diff --git a/tests/auto/render/opengl/renderer/tst_renderer.cpp b/tests/auto/render/opengl/renderer/tst_renderer.cpp index 93a788921..65187518e 100644 --- a/tests/auto/render/opengl/renderer/tst_renderer.cpp +++ b/tests/auto/render/opengl/renderer/tst_renderer.cpp @@ -54,7 +54,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; Qt3DRender::Render::OffscreenSurfaceHelper offscreenHelper(&renderer); Qt3DRender::Render::RenderSettings settings; // owned by FG manager diff --git a/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp b/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp index 8e929e5da..f29af93c5 100644 --- a/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp +++ b/tests/auto/render/opengl/renderviewbuilder/tst_renderviewbuilder.cpp @@ -63,7 +63,7 @@ class TestAspect : public QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : QRenderAspect() , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); diff --git a/tests/auto/render/opengl/renderviews/tst_renderviews.cpp b/tests/auto/render/opengl/renderviews/tst_renderviews.cpp index bc6f14858..0ec076bd9 100644 --- a/tests/auto/render/opengl/renderviews/tst_renderviews.cpp +++ b/tests/auto/render/opengl/renderviews/tst_renderviews.cpp @@ -138,7 +138,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; RenderView renderView; renderer.setNodeManagers(&nodeManagers); @@ -164,7 +164,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; RenderView renderView; std::vector<RenderCommand> rawCommands; @@ -211,7 +211,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; RenderView renderView; std::vector<RenderCommand> rawCommands; @@ -312,7 +312,7 @@ private Q_SLOTS: QFETCH(QVector<ShaderParameterPack>, expectedMinimizedParameters); Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; renderer.setNodeManagers(&nodeManagers); GLShaderManager *shaderManager = renderer.glResourceManagers()->glShaderManager(); @@ -364,7 +364,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; RenderView renderView; std::vector<RenderCommand> rawCommands; @@ -411,7 +411,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; RenderView renderView; std::vector<RenderCommand> rawCommands; @@ -459,7 +459,7 @@ private Q_SLOTS: { // GIVEN Qt3DRender::Render::NodeManagers nodeManagers; - Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Renderer renderer; RenderView renderView; std::vector<RenderCommand> rawCommands; diff --git a/tests/auto/render/opengl/textures/tst_textures.cpp b/tests/auto/render/opengl/textures/tst_textures.cpp index c9504cbbf..f0ca09aa7 100644 --- a/tests/auto/render/opengl/textures/tst_textures.cpp +++ b/tests/auto/render/opengl/textures/tst_textures.cpp @@ -222,7 +222,7 @@ private Q_SLOTS: { QSKIP("Texture Sharing is now disabled"); QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; renderer.setNodeManagers(mgrs.data()); // GIVEN @@ -250,7 +250,7 @@ private Q_SLOTS: void shouldCreateDifferentGLTexturess() { QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; renderer.setNodeManagers(mgrs.data()); // GIVEN @@ -306,7 +306,7 @@ private Q_SLOTS: void shouldCreateDifferentGLTexturesWhenUsingSharedTextureIds() { QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; renderer.setNodeManagers(mgrs.data()); Qt3DRender::Render::OpenGL::GLResourceManagers *glMgrs = renderer.glResourceManagers(); @@ -379,7 +379,7 @@ private Q_SLOTS: void generatorsShouldCreateSameData() { QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; renderer.setNodeManagers(mgrs.data()); // GIVEN @@ -438,7 +438,7 @@ private Q_SLOTS: void checkTextureImageCleanupState() { // GIVEN - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; TestTextureImage img(1); img.setLayer(2); img.setMipLevel(3); @@ -462,7 +462,7 @@ private Q_SLOTS: void checkTextureImageInitializeFromPeer() { // GIVEN - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; TestTextureImage img(1); { @@ -594,7 +594,7 @@ private Q_SLOTS: void checkTextureImageProperlyReleaseGenerator() { QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; Qt3DRender::Render::TextureManager *texMgr = mgrs->textureManager(); Qt3DRender::Render::TextureImageManager *texImgMgr = mgrs->textureImageManager(); renderer.setNodeManagers(mgrs.data()); @@ -634,7 +634,7 @@ private Q_SLOTS: void checkTextureIsMarkedForDeletion() { QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; Qt3DRender::Render::TextureManager *texMgr = mgrs->textureManager(); renderer.setNodeManagers(mgrs.data()); @@ -668,7 +668,7 @@ private Q_SLOTS: void checkTextureDestructionReconstructionWithinSameLoop() { QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; Qt3DRender::Render::TextureManager *texMgr = mgrs->textureManager(); renderer.setNodeManagers(mgrs.data()); @@ -707,7 +707,7 @@ private Q_SLOTS: { // GIVEN QScopedPointer<Qt3DRender::Render::NodeManagers> mgrs(new Qt3DRender::Render::NodeManagers()); - Qt3DRender::Render::OpenGL::Renderer renderer(Qt3DRender::QRenderAspect::Synchronous); + Qt3DRender::Render::OpenGL::Renderer renderer; Qt3DRender::Render::TextureManager *texMgr = mgrs->textureManager(); Qt3DRender::Render::TextureImageManager *texImgMgr = mgrs->textureImageManager(); renderer.setNodeManagers(mgrs.data()); diff --git a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp index c655a1409..172cfa7bc 100644 --- a/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp +++ b/tests/auto/render/pickboundingvolumejob/tst_pickboundingvolumejob.cpp @@ -118,7 +118,7 @@ class TestAspect : public Qt3DRender::QRenderAspect, public Qt3DCore::QAbstractF { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_sceneRoot(nullptr) { m_engine = new Qt3DCore::QAspectEngine(this); diff --git a/tests/auto/render/qcamera/tst_qcamera.cpp b/tests/auto/render/qcamera/tst_qcamera.cpp index ee217d38c..1e8e7cd9b 100644 --- a/tests/auto/render/qcamera/tst_qcamera.cpp +++ b/tests/auto/render/qcamera/tst_qcamera.cpp @@ -99,7 +99,7 @@ class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Manual) , m_sceneRoot(nullptr) { QRenderAspect::onRegistered(); diff --git a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp index 93b4e6f78..247b4a82e 100644 --- a/tests/auto/render/raycastingjob/tst_raycastingjob.cpp +++ b/tests/auto/render/raycastingjob/tst_raycastingjob.cpp @@ -110,7 +110,7 @@ class TestAspect : public Qt3DRender::QRenderAspect, public Qt3DCore::QAbstractF { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_sceneRoot(nullptr) { m_engine = new Qt3DCore::QAspectEngine(this); diff --git a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp index e59543154..e12c74073 100644 --- a/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp +++ b/tests/auto/render/updateshaderdatatransformjob/tst_updateshaderdatatransformjob.cpp @@ -89,7 +89,7 @@ class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect() , m_sceneRoot(nullptr) { Qt3DRender::QRenderAspect::onRegistered(); diff --git a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp index 268b8b2ca..1e0747ce4 100644 --- a/tests/benchmarks/render/jobs/tst_bench_jobs.cpp +++ b/tests/benchmarks/render/jobs/tst_bench_jobs.cpp @@ -63,7 +63,7 @@ namespace Qt3DRender { Q_OBJECT public: QRenderAspectTester(bool withWindow = false) - : Qt3DRender::QRenderAspect(QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect(QRenderAspect::Manual) , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); diff --git a/tests/benchmarks/render/layerfiltering/tst_bench_layerfiltering.cpp b/tests/benchmarks/render/layerfiltering/tst_bench_layerfiltering.cpp index 5523457be..a3b4213b5 100644 --- a/tests/benchmarks/render/layerfiltering/tst_bench_layerfiltering.cpp +++ b/tests/benchmarks/render/layerfiltering/tst_bench_layerfiltering.cpp @@ -49,7 +49,7 @@ class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Manual) , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); diff --git a/tests/benchmarks/render/materialparametergathering/tst_bench_materialparametergathering.cpp b/tests/benchmarks/render/materialparametergathering/tst_bench_materialparametergathering.cpp index 340bfdda4..47336c0b6 100644 --- a/tests/benchmarks/render/materialparametergathering/tst_bench_materialparametergathering.cpp +++ b/tests/benchmarks/render/materialparametergathering/tst_bench_materialparametergathering.cpp @@ -50,7 +50,7 @@ class TestAspect : public Qt3DRender::QRenderAspect { public: TestAspect(Qt3DCore::QNode *root) - : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous) + : Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Manual) , m_jobManager(new Qt3DCore::QAspectJobManager()) { Qt3DCore::QAbstractAspectPrivate::get(this)->m_jobManager = m_jobManager.data(); diff --git a/tests/manual/manual-renderloop/main.cpp b/tests/manual/manual-renderloop/main.cpp index a3f108e50..60521d865 100644 --- a/tests/manual/manual-renderloop/main.cpp +++ b/tests/manual/manual-renderloop/main.cpp @@ -68,7 +68,7 @@ class ManualRenderer public: ManualRenderer() : m_aspectEngine(new Qt3DCore::QAspectEngine()) - , m_renderAspect(new Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous)) + , m_renderAspect(new Qt3DRender::QRenderAspect()) { } |