diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2020-07-06 13:59:31 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2020-07-07 17:57:48 +0200 |
commit | cbe4f6720b965b88bdc5b9e47c76d40215ed7e24 (patch) | |
tree | a25a0d8513d3116a4b7139ce20c454614c903495 /src/plugins/renderers | |
parent | ee6b0094a1b8f750b0be19fd6372ff85261750b0 (diff) |
Move and adapt RendererCache to share amongst renderer plugins
Change-Id: I4e6e48abdd79b59fe98a916c7f2da6ba92e8ff82
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/plugins/renderers')
20 files changed, 34 insertions, 429 deletions
diff --git a/src/plugins/renderers/opengl/CMakeLists.txt b/src/plugins/renderers/opengl/CMakeLists.txt index 90374481b..e0c9412a4 100644 --- a/src/plugins/renderers/opengl/CMakeLists.txt +++ b/src/plugins/renderers/opengl/CMakeLists.txt @@ -29,7 +29,6 @@ set(openGLRendererSources graphicshelpers/graphicscontext.cpp graphicshelpers/gr renderer/openglvertexarrayobject.cpp renderer/openglvertexarrayobject_p.h renderer/rendercommand.cpp renderer/rendercommand_p.h renderer/renderer.cpp renderer/renderer_p.h - renderer/renderercache_p.h renderer/renderview.cpp renderer/renderview_p.h renderer/renderviewbuilder.cpp renderer/renderviewbuilder_p.h renderer/shaderparameterpack.cpp renderer/shaderparameterpack_p.h diff --git a/src/plugins/renderers/opengl/jobs/renderviewcommandbuilderjob_p.h b/src/plugins/renderers/opengl/jobs/renderviewcommandbuilderjob_p.h index c9f19c798..8645f7827 100644 --- a/src/plugins/renderers/opengl/jobs/renderviewcommandbuilderjob_p.h +++ b/src/plugins/renderers/opengl/jobs/renderviewcommandbuilderjob_p.h @@ -53,6 +53,7 @@ #include <Qt3DCore/qaspectjob.h> #include <Qt3DRender/private/handle_types_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <rendercommand_p.h> QT_BEGIN_NAMESPACE @@ -65,6 +66,7 @@ namespace OpenGL { class RenderView; class RenderViewCommandBuilderJobPrivate; +using EntityRenderCommandData = Render::EntityRenderCommandData<RenderCommand>; class Q_AUTOTEST_EXPORT RenderViewCommandBuilderJob : public Qt3DCore::QAspectJob { diff --git a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h index 1ebeb0249..5032b3146 100644 --- a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h +++ b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h @@ -53,6 +53,7 @@ #include <Qt3DCore/qaspectjob.h> #include <Qt3DRender/private/handle_types_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <rendercommand_p.h> QT_BEGIN_NAMESPACE @@ -66,6 +67,7 @@ namespace OpenGL { class RenderView; class Renderer; class RenderViewCommandUpdaterJobPrivate; +using EntityRenderCommandDataSubView = Render::EntityRenderCommandDataSubView<RenderCommand>; class Q_AUTOTEST_EXPORT RenderViewCommandUpdaterJob : public Qt3DCore::QAspectJob { diff --git a/src/plugins/renderers/opengl/renderer/rendercommand_p.h b/src/plugins/renderers/opengl/renderer/rendercommand_p.h index 3a0d7c25d..710430073 100644 --- a/src/plugins/renderers/opengl/renderer/rendercommand_p.h +++ b/src/plugins/renderers/opengl/renderer/rendercommand_p.h @@ -145,90 +145,6 @@ Q_AUTOTEST_EXPORT bool operator==(const RenderCommand &a, const RenderCommand &b inline bool operator!=(const RenderCommand &lhs, const RenderCommand &rhs) noexcept { return !operator==(lhs, rhs); } -struct EntityRenderCommandData -{ - std::vector<const Entity *> entities; - std::vector<RenderCommand> commands; - std::vector<RenderPassParameterData> passesData; - - void reserve(size_t size) - { - entities.reserve(size); - commands.reserve(size); - passesData.reserve(size); - } - - inline size_t size() const { return entities.size(); } - - inline void push_back(const Entity *e, const RenderCommand &c, const RenderPassParameterData &p) - { - entities.push_back(e); - commands.push_back(c); - passesData.push_back(p); - } - - inline void push_back(const Entity *e, RenderCommand &&c, RenderPassParameterData &&p) - { - entities.push_back(e); - commands.push_back(std::move(c)); - passesData.push_back(std::move(p)); - } - - EntityRenderCommandData &operator+=(EntityRenderCommandData &&t) - { - Qt3DCore::moveAtEnd(entities, std::move(t.entities)); - Qt3DCore::moveAtEnd(commands, std::move(t.commands)); - Qt3DCore::moveAtEnd(passesData, std::move(t.passesData)); - return *this; - } - -}; - -struct EntityRenderCommandDataView -{ - EntityRenderCommandData data; - std::vector<size_t> indices; - - size_t size() const noexcept { return indices.size(); } - - template<typename F> - void forEachCommand(F func) - { - for (size_t idx : indices) - func(data.commands[idx]); - } -}; -using EntityRenderCommandDataViewPtr = QSharedPointer<EntityRenderCommandDataView>; - -struct EntityRenderCommandDataSubView -{ - EntityRenderCommandDataViewPtr view; - size_t offset; - size_t count; - - template<typename F> - void forEach(F func) - { - for (size_t i = 0, m = size_t(count); i < m; ++i) { - const size_t idx = view->indices[offset + i]; - func(view->data.entities[idx], - view->data.passesData[idx], - view->data.commands[idx]); - } - } - - template<typename F> - void forEach(F func) const - { - for (size_t i = 0, m = size_t(count); i < m; ++i) { - const size_t idx = view->indices[offset + i]; - func(view->data.entities[idx], - view->data.passesData[idx], - view->data.commands[idx]); - } - } -}; - } // namespace OpenGL } // namespace Render diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp index 51681d16e..2368e396d 100644 --- a/src/plugins/renderers/opengl/renderer/renderer.cpp +++ b/src/plugins/renderers/opengl/renderer/renderer.cpp @@ -137,6 +137,8 @@ namespace Qt3DRender { namespace Render { namespace OpenGL { +using RendererCache = Render::RendererCache<RenderCommand>; + namespace { class CachingLightGatherer : public LightGatherer { diff --git a/src/plugins/renderers/opengl/renderer/renderer.pri b/src/plugins/renderers/opengl/renderer/renderer.pri index 867e93fd3..5d0296523 100644 --- a/src/plugins/renderers/opengl/renderer/renderer.pri +++ b/src/plugins/renderers/opengl/renderer/renderer.pri @@ -15,7 +15,6 @@ SOURCES += \ HEADERS += \ $$PWD/gllights_p.h \ $$PWD/openglvertexarrayobject_p.h \ - $$PWD/renderercache_p.h \ $$PWD/rendercommand_p.h \ $$PWD/renderer_p.h \ $$PWD/renderview_p.h \ diff --git a/src/plugins/renderers/opengl/renderer/renderer_p.h b/src/plugins/renderers/opengl/renderer/renderer_p.h index 571ffaa8f..847609066 100644 --- a/src/plugins/renderers/opengl/renderer/renderer_p.h +++ b/src/plugins/renderers/opengl/renderer/renderer_p.h @@ -69,13 +69,12 @@ #include <Qt3DRender/private/filterentitybycomponentjob_p.h> #include <Qt3DRender/private/filtercompatibletechniquejob_p.h> #include <Qt3DRender/private/renderqueue_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <shaderparameterpack_p.h> #include <renderviewinitializerjob_p.h> -#include <renderercache_p.h> #include <logging_p.h> #include <gl_handle_types_p.h> #include <glfence_p.h> -#include <renderercache_p.h> #include <QHash> #include <QMatrix4x4> @@ -291,7 +290,7 @@ public: ViewSubmissionResultData submitRenderViews(const std::vector<RenderView *> &renderViews); - RendererCache *cache() { return &m_cache; } + RendererCache<RenderCommand> *cache() { return &m_cache; } void setScreen(QScreen *scr) override; QScreen *screen() const override; @@ -407,7 +406,7 @@ private: #endif QMetaObject::Connection m_contextConnection; - RendererCache m_cache; + RendererCache<RenderCommand> m_cache; bool m_shouldSwapBuffers; std::vector<FrameGraphNode *> m_frameGraphLeaves; diff --git a/src/plugins/renderers/opengl/renderer/renderercache_p.h b/src/plugins/renderers/opengl/renderer/renderercache_p.h deleted file mode 100644 index 57af93b6a..000000000 --- a/src/plugins/renderers/opengl/renderer/renderercache_p.h +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** 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_OPENGL_RENDERERCACHE_P_H -#define QT3DRENDER_RENDER_OPENGL_RENDERERCACHE_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 <Qt3DRender/QFrameGraphNode> - -#include <Qt3DRender/private/entity_p.h> -#include <Qt3DRender/private/renderviewjobutils_p.h> -#include <Qt3DRender/private/lightsource_p.h> -#include <rendercommand_p.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -namespace OpenGL { - -struct RendererCache -{ - struct LeafNodeData - { - Matrix4x4 viewProjectionMatrix; - // Set by the FilterLayerJob - // Contains all Entities that satisfy the layer filtering for the RV - std::vector<Entity *> filterEntitiesByLayer; - - // Set by the MaterialParameterGatherJob - MaterialParameterGathererData materialParameterGatherer; - - // Set by the SyncRenderViewPreCommandUpdateJob - // Contains caches of different filtering stages that can - // be cached across frame - std::vector<Entity *> layeredFilteredRenderables; // Changes rarely - std::vector<Entity *> filteredAndCulledRenderables; // Changes if camera is modified - std::vector<LightSource> layeredFilteredLightSources; - - // Cache of RenderCommands - EntityRenderCommandDataViewPtr filteredRenderCommandDataViews; - }; - - // Variabled below are shared amongst all RV - - // Set by CachingRenderableEntityFilterJob - std::vector<Entity *> renderableEntities; - - // Set by CachingComputableEntityFilterJob - std::vector<Entity *> computeEntities; - - // Set by CachingLightGathererJob - std::vector<LightSource> gatheredLights; - - EnvironmentLight* environmentLight; - - // Per RV cache - // Leaves inserted by SyncRenderViewPostInitialization - QHash<FrameGraphNode *, LeafNodeData> leafNodeCache; - - QMutex *mutex() { return &m_mutex; } - -private: - QMutex m_mutex; -}; - -} // namespace OpenGL - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_RENDER_OPENGL_RENDERERCACHE_P_H diff --git a/src/plugins/renderers/opengl/renderer/renderview_p.h b/src/plugins/renderers/opengl/renderer/renderview_p.h index ad8c868a4..ef3f5ed0e 100644 --- a/src/plugins/renderers/opengl/renderer/renderview_p.h +++ b/src/plugins/renderers/opengl/renderer/renderview_p.h @@ -65,6 +65,7 @@ #include <Qt3DRender/private/qrendercapture_p.h> #include <Qt3DRender/private/qblitframebuffer_p.h> #include <Qt3DRender/private/waitfence_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <Qt3DCore/private/aligned_malloc_p.h> @@ -98,6 +99,11 @@ class RenderCommand; typedef QPair<ShaderUniform, QVariant> ActivePropertyContent; typedef QPair<QString, ActivePropertyContent > ActiveProperty; +using EntityRenderCommandData = Render::EntityRenderCommandData<RenderCommand>; +using EntityRenderCommandDataView = Render::EntityRenderCommandDataView<RenderCommand>; +using EntityRenderCommandDataViewPtr = Render::EntityRenderCommandDataViewPtr<RenderCommand>; +using EntityRenderCommandDataSubView = Render::EntityRenderCommandDataSubView<RenderCommand>; + struct Q_AUTOTEST_EXPORT ClearBufferInfo { int drawBufferIndex = 0; diff --git a/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp b/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp index da9745a91..2fd0c0359 100644 --- a/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp +++ b/src/plugins/renderers/opengl/renderer/renderviewbuilder.cpp @@ -49,6 +49,8 @@ namespace Qt3DRender { namespace Render { namespace OpenGL { +using RendererCache = Render::RendererCache<RenderCommand>; + namespace { int findIdealNumberOfWorkers(int elementCount, int packetSize = 100, int maxJobCount = 1) diff --git a/src/plugins/renderers/rhi/CMakeLists.txt b/src/plugins/renderers/rhi/CMakeLists.txt index add0977be..1ac326870 100644 --- a/src/plugins/renderers/rhi/CMakeLists.txt +++ b/src/plugins/renderers/rhi/CMakeLists.txt @@ -20,7 +20,6 @@ qt_internal_add_plugin(RhiRendererPlugin renderer/logging.cpp renderer/logging_p.h renderer/rendercommand.cpp renderer/rendercommand_p.h renderer/renderer.cpp renderer/renderer_p.h - renderer/renderercache_p.h renderer/renderview.cpp renderer/renderview_p.h renderer/renderviewbuilder.cpp renderer/renderviewbuilder_p.h renderer/rhigraphicspipeline.cpp renderer/rhigraphicspipeline_p.h diff --git a/src/plugins/renderers/rhi/jobs/renderviewcommandbuilderjob_p.h b/src/plugins/renderers/rhi/jobs/renderviewcommandbuilderjob_p.h index 4b1a66f15..21139d964 100644 --- a/src/plugins/renderers/rhi/jobs/renderviewcommandbuilderjob_p.h +++ b/src/plugins/renderers/rhi/jobs/renderviewcommandbuilderjob_p.h @@ -53,6 +53,7 @@ #include <Qt3DCore/qaspectjob.h> #include <Qt3DRender/private/handle_types_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <rendercommand_p.h> QT_BEGIN_NAMESPACE @@ -65,6 +66,7 @@ namespace Rhi { class RenderView; class RenderViewCommandBuilderJobPrivate; +using EntityRenderCommandData = Render::EntityRenderCommandData<RenderCommand>; class Q_AUTOTEST_EXPORT RenderViewCommandBuilderJob : public Qt3DCore::QAspectJob { diff --git a/src/plugins/renderers/rhi/jobs/renderviewcommandupdaterjob_p.h b/src/plugins/renderers/rhi/jobs/renderviewcommandupdaterjob_p.h index bb9b87c63..82c5bed03 100644 --- a/src/plugins/renderers/rhi/jobs/renderviewcommandupdaterjob_p.h +++ b/src/plugins/renderers/rhi/jobs/renderviewcommandupdaterjob_p.h @@ -54,6 +54,7 @@ #include <Qt3DCore/qaspectjob.h> #include <Qt3DRender/private/handle_types_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <rendercommand_p.h> QT_BEGIN_NAMESPACE @@ -68,6 +69,8 @@ class RenderView; class Renderer; class RenderViewCommandUpdaterJobPrivate; +using EntityRenderCommandDataSubView = Render::EntityRenderCommandDataSubView<RenderCommand>; + class Q_AUTOTEST_EXPORT RenderViewCommandUpdaterJob : public Qt3DCore::QAspectJob { public: diff --git a/src/plugins/renderers/rhi/renderer/rendercommand_p.h b/src/plugins/renderers/rhi/renderer/rendercommand_p.h index 8db57fe57..07a13e583 100644 --- a/src/plugins/renderers/rhi/renderer/rendercommand_p.h +++ b/src/plugins/renderers/rhi/renderer/rendercommand_p.h @@ -171,93 +171,6 @@ inline bool operator!=(const RenderCommand &lhs, const RenderCommand &rhs) noexc return !operator==(lhs, rhs); } -struct EntityRenderCommandData -{ - std::vector<const Entity *> entities; - std::vector<RenderCommand> commands; - std::vector<RenderPassParameterData> passesData; - - void reserve(size_t size) - { - entities.reserve(size); - commands.reserve(size); - passesData.reserve(size); - } - - inline size_t size() const { return entities.size(); } - - inline void push_back(const Entity *e, const RenderCommand &c, const RenderPassParameterData &p) - { - entities.push_back(e); - commands.push_back(c); - passesData.push_back(p); - } - - inline void push_back(const Entity *e, RenderCommand &&c, RenderPassParameterData &&p) - { - entities.push_back(e); - commands.push_back(std::move(c)); - passesData.push_back(std::move(p)); - } - - EntityRenderCommandData &operator+=(EntityRenderCommandData &&t) - { - Qt3DCore::moveAtEnd(entities, std::move(t.entities)); - Qt3DCore::moveAtEnd(commands, std::move(t.commands)); - Qt3DCore::moveAtEnd(passesData, std::move(t.passesData)); - return *this; - } - -}; - - -using EntityRenderCommandDataPtr = QSharedPointer<EntityRenderCommandData>; - -struct EntityRenderCommandDataView -{ - EntityRenderCommandData data; - std::vector<size_t> indices; - - size_t size() const noexcept { return indices.size(); } - - template<typename F> - void forEachCommand(F func) - { - for (size_t idx : indices) - func(data.commands[idx]); - } -}; -using EntityRenderCommandDataViewPtr = QSharedPointer<EntityRenderCommandDataView>; - -struct EntityRenderCommandDataSubView -{ - EntityRenderCommandDataViewPtr view; - size_t offset; - size_t count; - - template<typename F> - void forEach(F func) - { - for (size_t i = 0, m = size_t(count); i < m; ++i) { - const size_t idx = view->indices[offset + i]; - func(view->data.entities[idx], - view->data.passesData[idx], - view->data.commands[idx]); - } - } - - template<typename F> - void forEach(F func) const - { - for (size_t i = 0, m = size_t(count); i < m; ++i) { - const size_t idx = view->indices[offset + i]; - func(view->data.entities[idx], - view->data.passesData[idx], - view->data.commands[idx]); - } - } -}; - } // namespace Rhi } // namespace Render diff --git a/src/plugins/renderers/rhi/renderer/renderer.cpp b/src/plugins/renderers/rhi/renderer/renderer.cpp index 42902afeb..ad8386dfc 100644 --- a/src/plugins/renderers/rhi/renderer/renderer.cpp +++ b/src/plugins/renderers/rhi/renderer/renderer.cpp @@ -135,6 +135,8 @@ namespace Qt3DRender { namespace Render { namespace Rhi { +using RendererCache = Render::RendererCache<RenderCommand>; + namespace { class CachingLightGatherer : public LightGatherer diff --git a/src/plugins/renderers/rhi/renderer/renderer.pri b/src/plugins/renderers/rhi/renderer/renderer.pri index 567226066..537251a02 100644 --- a/src/plugins/renderers/rhi/renderer/renderer.pri +++ b/src/plugins/renderers/rhi/renderer/renderer.pri @@ -12,7 +12,6 @@ SOURCES += \ $$PWD/commandexecuter.cpp HEADERS += \ - $$PWD/renderercache_p.h \ $$PWD/rendercommand_p.h \ $$PWD/renderer_p.h \ $$PWD/renderview_p.h \ diff --git a/src/plugins/renderers/rhi/renderer/renderer_p.h b/src/plugins/renderers/rhi/renderer/renderer_p.h index 2c462395e..1f2ffb938 100644 --- a/src/plugins/renderers/rhi/renderer/renderer_p.h +++ b/src/plugins/renderers/rhi/renderer/renderer_p.h @@ -70,15 +70,14 @@ #include <Qt3DRender/private/filterentitybycomponentjob_p.h> #include <Qt3DRender/private/filtercompatibletechniquejob_p.h> #include <Qt3DRender/private/renderqueue_p.h> +#include <Qt3DRender/private/renderercache_p.h> #include <QtGui/private/qrhi_p.h> #include <shaderparameterpack_p.h> #include <renderviewinitializerjob_p.h> -#include <renderercache_p.h> #include <logging_p.h> #include <rhihandle_types_p.h> -#include <renderercache_p.h> #include <renderview_p.h> #include <QHash> @@ -295,7 +294,7 @@ public: ViewSubmissionResultData submitRenderViews(const std::vector<RHIPassInfo> &rhiPassesInfo); - RendererCache *cache() { return &m_cache; } + RendererCache<RenderCommand> *cache() { return &m_cache; } void setScreen(QScreen *scr) override; QScreen *screen() const override; @@ -398,7 +397,7 @@ private: #endif QMetaObject::Connection m_contextConnection; - RendererCache m_cache; + RendererCache<RenderCommand> m_cache; bool m_shouldSwapBuffers; std::vector<FrameGraphNode *> m_frameGraphLeaves; diff --git a/src/plugins/renderers/rhi/renderer/renderercache_p.h b/src/plugins/renderers/rhi/renderer/renderercache_p.h deleted file mode 100644 index 4735bcdfb..000000000 --- a/src/plugins/renderers/rhi/renderer/renderercache_p.h +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** 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_RHI_RENDERERCACHE_P_H -#define QT3DRENDER_RENDER_RHI_RENDERERCACHE_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 <Qt3DRender/QFrameGraphNode> - -#include <Qt3DRender/private/entity_p.h> -#include <Qt3DRender/private/renderviewjobutils_p.h> -#include <Qt3DRender/private/lightsource_p.h> -#include <rendercommand_p.h> - -QT_BEGIN_NAMESPACE - -namespace Qt3DRender { - -namespace Render { - -namespace Rhi { - -struct RendererCache -{ - struct LeafNodeData - { - Matrix4x4 viewProjectionMatrix; - // Set by the FilterLayerJob - // Contains all Entities that satisfy the layer filtering for the RV - std::vector<Entity *> filterEntitiesByLayer; - - // Set by the MaterialParameterGatherJob - MaterialParameterGathererData materialParameterGatherer; - - // Set by the SyncRenderViewPreCommandUpdateJob - // Contains caches of different filtering stages that can - // be cached across frame - std::vector<Entity *> layeredFilteredRenderables; // Changes rarely - std::vector<Entity *> filteredAndCulledRenderables; // Changes if camera is modified - std::vector<LightSource> layeredFilteredLightSources; - - // Cache of RenderCommands - EntityRenderCommandDataViewPtr filteredRenderCommandDataViews; - }; - - // Variabled below are shared amongst all RV - - // Set by CachingRenderableEntityFilterJob - std::vector<Entity *> renderableEntities; - - // Set by CachingComputableEntityFilterJob - std::vector<Entity *> computeEntities; - - // Set by CachingLightGathererJob - std::vector<LightSource> gatheredLights; - - EnvironmentLight *environmentLight; - - // Per RV cache - // Leaves inserted by SyncRenderViewPostInitialization - QHash<FrameGraphNode *, LeafNodeData> leafNodeCache; - - QMutex *mutex() { return &m_mutex; } - -private: - QMutex m_mutex; -}; - -} // namespace Rhi - -} // namespace Render - -} // namespace Qt3DRender - -QT_END_NAMESPACE - -#endif // QT3DRENDER_RENDER_RHI_RENDERERCACHE_P_H diff --git a/src/plugins/renderers/rhi/renderer/renderview_p.h b/src/plugins/renderers/rhi/renderer/renderview_p.h index d5d83f718..12f1b29ae 100644 --- a/src/plugins/renderers/rhi/renderer/renderview_p.h +++ b/src/plugins/renderers/rhi/renderer/renderview_p.h @@ -101,6 +101,11 @@ class RenderCommand; typedef QPair<ShaderUniform, QVariant> ActivePropertyContent; typedef QPair<QString, ActivePropertyContent> ActiveProperty; +using EntityRenderCommandData = Render::EntityRenderCommandData<RenderCommand>; +using EntityRenderCommandDataView = Render::EntityRenderCommandDataView<RenderCommand>; +using EntityRenderCommandDataViewPtr = Render::EntityRenderCommandDataViewPtr<RenderCommand>; +using EntityRenderCommandDataSubView = Render::EntityRenderCommandDataSubView<RenderCommand>; + struct Q_AUTOTEST_EXPORT ClearBufferInfo { int drawBufferIndex = 0; diff --git a/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp b/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp index 0f141e2f9..84d3e91f1 100644 --- a/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp +++ b/src/plugins/renderers/rhi/renderer/renderviewbuilder.cpp @@ -49,6 +49,8 @@ namespace Qt3DRender { namespace Render { namespace Rhi { +using RendererCache = Render::RendererCache<RenderCommand>; + namespace { int findIdealNumberOfWorkers(int elementCount, int packetSize = 100, int maxJobCount = 1) |