diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2017-03-21 09:03:50 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-03-16 11:20:59 +0000 |
commit | 02dff327fae71d6efdda091f8ae0a4483e72e849 (patch) | |
tree | ebd0f7ed4b00e338d87203b15c979436b916a06d /src/render/backend | |
parent | f72228046be1aaa707ab45c03dbd07b77f5acc6a (diff) |
Renderer: instantiate, initialize and shutdown CommandThread
Change-Id: I89a3ee4b6d72565c1be91244c1bde39f1dd7101b
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Reviewed-by: Svenn-Arne Dragly <svenn-arne.dragly@qt.io>
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend')
-rw-r--r-- | src/render/backend/abstractrenderer_p.h | 6 | ||||
-rw-r--r-- | src/render/backend/renderer.cpp | 12 | ||||
-rw-r--r-- | src/render/backend/renderer_p.h | 7 |
3 files changed, 25 insertions, 0 deletions
diff --git a/src/render/backend/abstractrenderer_p.h b/src/render/backend/abstractrenderer_p.h index 54f37ea21..182c4ea36 100644 --- a/src/render/backend/abstractrenderer_p.h +++ b/src/render/backend/abstractrenderer_p.h @@ -83,6 +83,7 @@ class FrameGraphNode; class RenderSettings; class BackendNode; class OffscreenSurfaceHelper; +class Shader; class QT3DRENDERSHARED_PRIVATE_EXPORT AbstractRenderer { @@ -170,6 +171,11 @@ public: virtual void setOffscreenSurfaceHelper(OffscreenSurfaceHelper *helper) = 0; virtual QSurfaceFormat format() = 0; virtual QOpenGLContext *shareContext() const = 0; + + + // These commands are executed in a dedicated command thread + // More will be added later + virtual void loadShader(Shader *shader) const = 0; }; Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractRenderer::BackendNodeDirtySet) diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index bdc024308..68b6dd1fd 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -89,6 +89,7 @@ #include <Qt3DRender/private/buffercapture_p.h> #include <Qt3DRender/private/offscreensurfacehelper_p.h> #include <Qt3DRender/private/renderviewbuilder_p.h> +#include <Qt3DRender/private/commandthread_p.h> #include <Qt3DRender/qcameralens.h> #include <Qt3DCore/private/qeventfilterservice_p.h> @@ -158,6 +159,7 @@ Renderer::Renderer(QRenderAspect::RenderType type) , m_graphicsContext(nullptr) , m_renderQueue(new RenderQueue()) , m_renderThread(type == QRenderAspect::Threaded ? new RenderThread(this) : nullptr) + , m_commandThread(new CommandThread(this)) , m_vsyncFrameAdvanceService(new VSyncFrameAdvanceService(m_renderThread != nullptr)) , m_waitForInitializationToBeCompleted(0) , m_pickEventFilter(new PickEventFilter()) @@ -317,6 +319,11 @@ QOpenGLContext *Renderer::shareContext() const : nullptr); } +void Renderer::loadShader(Shader *shader) const +{ + Q_UNUSED(shader); +} + void Renderer::setOpenGLContext(QOpenGLContext *context) { m_glContext = context; @@ -372,6 +379,9 @@ void Renderer::initialize() // Note: we don't have a surface at this point // The context will be made current later on (at render time) m_graphicsContext->setOpenGLContext(ctx); + + // Initialize command thread + m_commandThread->initialize(ctx); } // Store the format used by the context and queue up creating an @@ -405,6 +415,8 @@ void Renderer::shutdown() qDeleteAll(m_renderQueue->nextFrameQueue()); m_renderQueue->reset(); + m_commandThread->shutdown(); + if (!m_renderThread) { releaseGraphicsResources(); } else { diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h index af4d5c9de..d79bf6136 100644 --- a/src/render/backend/renderer_p.h +++ b/src/render/backend/renderer_p.h @@ -137,6 +137,7 @@ class RenderView; class Effect; class RenderPass; class RenderThread; +class CommandThread; class RenderStateSet; class VSyncFrameAdvanceService; class PickEventFilter; @@ -221,6 +222,11 @@ public: RenderSettings *settings() const override; QOpenGLContext *shareContext() const override; + + // Executed in secondary GL thread + void loadShader(Shader *shader) const override; + + void updateGLResources(); void updateTexture(Texture *texture); void cleanupTexture(const Texture *texture); @@ -301,6 +307,7 @@ private: RenderQueue *m_renderQueue; QScopedPointer<RenderThread> m_renderThread; + QScopedPointer<CommandThread> m_commandThread; QScopedPointer<VSyncFrameAdvanceService> m_vsyncFrameAdvanceService; QSemaphore m_submitRenderViewsSemaphore; |