diff options
-rw-r--r-- | src/render/backend/nodemanagers.cpp | 264 | ||||
-rw-r--r-- | src/render/backend/nodemanagers_p.h | 321 | ||||
-rw-r--r-- | src/render/backend/render-backend.pri | 6 |
3 files changed, 589 insertions, 2 deletions
diff --git a/src/render/backend/nodemanagers.cpp b/src/render/backend/nodemanagers.cpp new file mode 100644 index 000000000..747ddc8b0 --- /dev/null +++ b/src/render/backend/nodemanagers.cpp @@ -0,0 +1,264 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "nodemanagers_p.h" + +#include <Qt3DRender/private/managers_p.h> +#include <Qt3DRender/private/scenemanager_p.h> +#include <Qt3DRender/private/buffermanager_p.h> +#include <Qt3DRender/private/texturedatamanager_p.h> +#include <Qt3DRender/private/geometryrenderermanager_p.h> + +#include <QOpenGLVertexArrayObject> + +QT_BEGIN_NAMESPACE + +namespace Qt3DRender { + +namespace Render { + +NodeManagers::NodeManagers() + : m_cameraManager(new CameraManager()) + , m_renderNodesManager(new EntityManager()) + , m_materialManager(new MaterialManager()) + , m_worldMatrixManager(new MatrixManager()) + , m_vaoManager(new VAOManager()) + , m_shaderManager(new ShaderManager()) + , m_techniqueManager(new TechniqueManager()) + , m_effectManager(new EffectManager()) + , m_renderPassManager(new RenderPassManager()) + , m_textureManager(new TextureManager()) + , m_textureDataManager(new TextureDataManager()) + , m_layerManager(new LayerManager()) + , m_criterionManager(new CriterionManager()) + , m_frameGraphManager(new FrameGraphManager()) + , m_transformManager(new TransformManager()) + , m_renderTargetManager(new RenderTargetManager()) + , m_sceneManager(new SceneManager()) + , m_attachmentManager(new AttachmentManager()) + , m_sortCriterionManager(new SortCriterionManager()) + , m_parameterManager(new ParameterManager()) + , m_shaderDataManager(new ShaderDataManager()) + , m_uboManager(new UBOManager()) + , m_textureImageManager(new TextureImageManager()) + , m_bufferManager(new BufferManager()) + , m_attributeManager(new AttributeManager()) + , m_geometryManager(new GeometryManager()) + , m_geometryRendererManager(new GeometryRendererManager) + , m_objectPickerManager(new ObjectPickerManager()) + , m_boundingVolumeDebugManager(new BoundingVolumeDebugManager()) +{ +} + +template<> +CameraManager *NodeManagers::manager<CameraLens>() const Q_DECL_NOEXCEPT +{ + return m_cameraManager; +} + +template<> +EntityManager *NodeManagers::manager<Entity>() const Q_DECL_NOEXCEPT +{ + return m_renderNodesManager; +} + +template<> +MaterialManager *NodeManagers::manager<Material>() const Q_DECL_NOEXCEPT +{ + return m_materialManager; +} + +template<> +MatrixManager *NodeManagers::manager<QMatrix4x4*>() const Q_DECL_NOEXCEPT +{ + return m_worldMatrixManager; +} + +template<> +VAOManager *NodeManagers::manager<QOpenGLVertexArrayObject*>() const Q_DECL_NOEXCEPT +{ + return m_vaoManager; +} + +template<> +ShaderManager *NodeManagers::manager<Shader>() const Q_DECL_NOEXCEPT +{ + return m_shaderManager; +} + +template<> +TechniqueManager *NodeManagers::manager<Technique>() const Q_DECL_NOEXCEPT +{ + return m_techniqueManager; +} + +template<> +EffectManager *NodeManagers::manager<Effect>() const Q_DECL_NOEXCEPT +{ + return m_effectManager; +} + +template<> +RenderPassManager *NodeManagers::manager<RenderPass>() const Q_DECL_NOEXCEPT +{ + return m_renderPassManager; +} + +template<> +TextureManager *NodeManagers::manager<Texture>() const Q_DECL_NOEXCEPT +{ + return m_textureManager; +} + +template<> +TextureDataManager *NodeManagers::manager<QTexImageData>() const Q_DECL_NOEXCEPT +{ + return m_textureDataManager; +} + +template<> +LayerManager *NodeManagers::manager<Layer>() const Q_DECL_NOEXCEPT +{ + return m_layerManager; +} + +template<> +CriterionManager *NodeManagers::manager<Annotation>() const Q_DECL_NOEXCEPT +{ + return m_criterionManager; +} + +template<> +FrameGraphManager *NodeManagers::manager<FrameGraphNode*>() const Q_DECL_NOEXCEPT +{ + return m_frameGraphManager; +} + +template<> +TransformManager *NodeManagers::manager<Transform>() const Q_DECL_NOEXCEPT +{ + return m_transformManager; +} + +template<> +RenderTargetManager *NodeManagers::manager<RenderTarget>() const Q_DECL_NOEXCEPT +{ + return m_renderTargetManager; +} + +template<> +SceneManager *NodeManagers::manager<Scene>() const Q_DECL_NOEXCEPT +{ + return m_sceneManager; +} + +template<> +AttachmentManager *NodeManagers::manager<RenderAttachment>() const Q_DECL_NOEXCEPT +{ + return m_attachmentManager; +} + +template<> +SortCriterionManager *NodeManagers::manager<SortCriterion>() const Q_DECL_NOEXCEPT +{ + return m_sortCriterionManager; +} + +template<> +ParameterManager *NodeManagers::manager<Parameter>() const Q_DECL_NOEXCEPT +{ + return m_parameterManager; +} + +template<> +ShaderDataManager *NodeManagers::manager<ShaderData>() const Q_DECL_NOEXCEPT +{ + return m_shaderDataManager; +} + +template<> +UBOManager *NodeManagers::manager<UniformBuffer>() const Q_DECL_NOEXCEPT +{ + return m_uboManager; +} + +template<> +TextureImageManager *NodeManagers::manager<TextureImage>() const Q_DECL_NOEXCEPT +{ + return m_textureImageManager; +} + +template<> +BufferManager *NodeManagers::manager<Buffer>() const Q_DECL_NOEXCEPT +{ + return m_bufferManager; +} + +template<> +AttributeManager *NodeManagers::manager<Attribute>() const Q_DECL_NOEXCEPT +{ + return m_attributeManager; +} + +template<> +GeometryManager *NodeManagers::manager<Geometry>() const Q_DECL_NOEXCEPT +{ + return m_geometryManager; +} + +template<> +GeometryRendererManager *NodeManagers::manager<GeometryRenderer>() const Q_DECL_NOEXCEPT +{ + return m_geometryRendererManager; +} + +template<> +ObjectPickerManager *NodeManagers::manager<ObjectPicker>() const Q_DECL_NOEXCEPT +{ + return m_objectPickerManager; +} + +template<> +BoundingVolumeDebugManager *NodeManagers::manager<BoundingVolumeDebug>() const Q_DECL_NOEXCEPT +{ + return m_boundingVolumeDebugManager; +} + +} // Render + +} // Qt3DRender + +QT_END_NAMESPACE diff --git a/src/render/backend/nodemanagers_p.h b/src/render/backend/nodemanagers_p.h new file mode 100644 index 000000000..827ddfe7d --- /dev/null +++ b/src/render/backend/nodemanagers_p.h @@ -0,0 +1,321 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt3D module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** 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 http://www.qt.io/terms-conditions. For further +** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT3DRENDER_RENDER_NODEMANAGERS_H +#define QT3DRENDER_RENDER_NODEMANAGERS_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/private/qresourcemanager_p.h> + +QT_BEGIN_NAMESPACE + +class QMatrix4x4; +class QOpenGLVertexArrayObject; + +namespace Qt3DRender { + +class QTexImageData; + +namespace Render { + +class CameraManager; +class EntityManager; +class BufferManager; +class AttributeManager; +class GeometryManager; +class GeometryRendererManager; +class ObjectPickerManager; +class BoundingVolumeDebugManager; +class MaterialManager; +class MatrixManager; +class VAOManager; +class ShaderManager; +class TechniqueManager; +class EffectManager; +class RenderPassManager; +class RenderTargetManager; +class SceneManager; +class AttachmentManager; +class SortCriterionManager; +class ParameterManager; +class ShaderDataManager; +class UBOManager; +class TextureImageManager; +class CriterionManager; +class FrameGraphManager; +class TransformManager; +class TextureManager; +class TextureDataManager; +class LayerManager; +class LightManager; + +class FrameGraphNode; +class Annotation; +class Entity; +class CameraLens; +class Material; +class Shader; +class Technique; +class Effect; +class RenderPass; +class Texture; +class Layer; +class Annotation; +class FrameGraphNode; +class Transform; +class Scene; +class RenderAttachment; +class RenderTarget; +class ShaderData; +class SortCriterion; +class Parameter; +class UniformBuffer; +class TextureImage; +class Buffer; +class Attribute; +class Geometry; +class GeometryRenderer; +class ObjectPicker; +class BoundingVolumeDebug; + +class Q_AUTOTEST_EXPORT NodeManagers +{ +public: + NodeManagers(); + + template<class Backend, typename Manager> + Manager *manager() const Q_DECL_NOEXCEPT + { + return Q_NULLPTR; + } + + template<class Backend, typename Manager, typename Key> + Backend *lookupResource(const Key &id) const + { + Manager *mgr = manager<Backend, Manager>(); + if (mgr != Q_NULLPTR) + return mgr->lookupResource(id); + return Q_NULLPTR; + } + + template<class Backend, typename Manager, typename Handle, typename Key> + Handle lookupHandle(const Key &id) const + { + Manager *mgr = manager<Backend, Manager>(); + if (mgr != Q_NULLPTR) + return mgr->lookupHandle(id); + return Handle(); + } + + template<class Backend, typename Manager, typename Handle> + Backend *data(Handle handle) + { + Manager *mgr = manager<Backend, Manager>(); + if (mgr != Q_NULLPTR) + return mgr->data(handle); + return Q_NULLPTR; + } + + + inline CameraManager *cameraManager() const Q_DECL_NOEXCEPT { return m_cameraManager; } + inline EntityManager *renderNodesManager() const Q_DECL_NOEXCEPT { return m_renderNodesManager; } + inline MaterialManager *materialManager() const Q_DECL_NOEXCEPT { return m_materialManager; } + inline MatrixManager *worldMatrixManager() const Q_DECL_NOEXCEPT { return m_worldMatrixManager; } + inline VAOManager *vaoManager() const Q_DECL_NOEXCEPT { return m_vaoManager; } + inline ShaderManager *shaderManager() const Q_DECL_NOEXCEPT { return m_shaderManager; } + inline TechniqueManager *techniqueManager() const Q_DECL_NOEXCEPT { return m_techniqueManager; } + inline EffectManager *effectManager() const Q_DECL_NOEXCEPT { return m_effectManager; } + inline RenderPassManager *renderPassManager() const Q_DECL_NOEXCEPT { return m_renderPassManager; } + inline TextureManager *textureManager() const Q_DECL_NOEXCEPT { return m_textureManager; } + inline TextureDataManager *textureDataManager() const Q_DECL_NOEXCEPT { return m_textureDataManager; } + inline LayerManager *layerManager() const Q_DECL_NOEXCEPT { return m_layerManager; } + inline CriterionManager *criterionManager() const Q_DECL_NOEXCEPT { return m_criterionManager; } + inline FrameGraphManager *frameGraphManager() const Q_DECL_NOEXCEPT { return m_frameGraphManager; } + inline TransformManager *transformManager() const Q_DECL_NOEXCEPT { return m_transformManager; } + inline RenderTargetManager *renderTargetManager() const Q_DECL_NOEXCEPT { return m_renderTargetManager; } + inline SceneManager *sceneManager() const Q_DECL_NOEXCEPT { return m_sceneManager; } + inline AttachmentManager *attachmentManager() const Q_DECL_NOEXCEPT { return m_attachmentManager; } + inline SortCriterionManager *sortCriterionManager() const Q_DECL_NOEXCEPT { return m_sortCriterionManager; } + inline ParameterManager *parameterManager() const Q_DECL_NOEXCEPT { return m_parameterManager; } + inline ShaderDataManager *shaderDataManager() const Q_DECL_NOEXCEPT { return m_shaderDataManager; } + inline UBOManager *uboManager() const Q_DECL_NOEXCEPT { return m_uboManager; } + inline TextureImageManager *textureImageManager() const Q_DECL_NOEXCEPT { return m_textureImageManager; } + inline BufferManager *bufferManager() const Q_DECL_NOEXCEPT { return m_bufferManager; } + inline AttributeManager *attributeManager() const Q_DECL_NOEXCEPT { return m_attributeManager; } + inline GeometryManager *geometryManager() const Q_DECL_NOEXCEPT { return m_geometryManager; } + inline GeometryRendererManager *geometryRendererManager() const Q_DECL_NOEXCEPT { return m_geometryRendererManager; } + inline ObjectPickerManager *objectPickerManager() const Q_DECL_NOEXCEPT { return m_objectPickerManager; } + inline BoundingVolumeDebugManager *boundingVolumeDebugManager() const Q_DECL_NOEXCEPT { return m_boundingVolumeDebugManager; } + +private: + CameraManager *m_cameraManager; + EntityManager *m_renderNodesManager; + MaterialManager *m_materialManager; + MatrixManager *m_worldMatrixManager; + VAOManager *m_vaoManager; + ShaderManager *m_shaderManager; + TechniqueManager *m_techniqueManager; + EffectManager *m_effectManager; + RenderPassManager *m_renderPassManager; + TextureManager *m_textureManager; + TextureDataManager *m_textureDataManager; + LayerManager *m_layerManager; + CriterionManager *m_criterionManager; + FrameGraphManager *m_frameGraphManager; + TransformManager *m_transformManager; + RenderTargetManager *m_renderTargetManager; + SceneManager *m_sceneManager; + AttachmentManager *m_attachmentManager; + SortCriterionManager *m_sortCriterionManager; + ParameterManager *m_parameterManager; + ShaderDataManager *m_shaderDataManager; + UBOManager *m_uboManager; + TextureImageManager *m_textureImageManager; + BufferManager *m_bufferManager; + AttributeManager *m_attributeManager; + GeometryManager *m_geometryManager; + GeometryRendererManager *m_geometryRendererManager; + ObjectPickerManager *m_objectPickerManager; + BoundingVolumeDebugManager *m_boundingVolumeDebugManager; +}; + +// Specializations + +template<> +CameraManager *NodeManagers::manager<CameraLens>() const Q_DECL_NOEXCEPT; + +template<> +EntityManager *NodeManagers::manager<Entity>() const Q_DECL_NOEXCEPT; + +template<> +MaterialManager *NodeManagers::manager<Material>() const Q_DECL_NOEXCEPT; + +template<> +MatrixManager *NodeManagers::manager<QMatrix4x4*>() const Q_DECL_NOEXCEPT; + +template<> +VAOManager *NodeManagers::manager<QOpenGLVertexArrayObject*>() const Q_DECL_NOEXCEPT; + +template<> +ShaderManager *NodeManagers::manager<Shader>() const Q_DECL_NOEXCEPT; + +template<> +TechniqueManager *NodeManagers::manager<Technique>() const Q_DECL_NOEXCEPT; + +template<> +EffectManager *NodeManagers::manager<Effect>() const Q_DECL_NOEXCEPT; + +template<> +RenderPassManager *NodeManagers::manager<RenderPass>() const Q_DECL_NOEXCEPT; + +template<> +TextureManager *NodeManagers::manager<Texture>() const Q_DECL_NOEXCEPT; + +template<> +TextureDataManager *NodeManagers::manager<QTexImageData>() const Q_DECL_NOEXCEPT; + +template<> +LayerManager *NodeManagers::manager<Layer>() const Q_DECL_NOEXCEPT; + +template<> +CriterionManager *NodeManagers::manager<Annotation>() const Q_DECL_NOEXCEPT; + +template<> +FrameGraphManager *NodeManagers::manager<FrameGraphNode*>() const Q_DECL_NOEXCEPT; + +template<> +TransformManager *NodeManagers::manager<Transform>() const Q_DECL_NOEXCEPT; + +template<> +RenderTargetManager *NodeManagers::manager<RenderTarget>() const Q_DECL_NOEXCEPT; + +template<> +SceneManager *NodeManagers::manager<Scene>() const Q_DECL_NOEXCEPT; + +template<> +AttachmentManager *NodeManagers::manager<RenderAttachment>() const Q_DECL_NOEXCEPT; + +template<> +SortCriterionManager *NodeManagers::manager<SortCriterion>() const Q_DECL_NOEXCEPT; + +template<> +ParameterManager *NodeManagers::manager<Parameter>() const Q_DECL_NOEXCEPT; + +template<> +ShaderDataManager *NodeManagers::manager<ShaderData>() const Q_DECL_NOEXCEPT; + +template<> +UBOManager *NodeManagers::manager<UniformBuffer>() const Q_DECL_NOEXCEPT; + +template<> +TextureImageManager *NodeManagers::manager<TextureImage>() const Q_DECL_NOEXCEPT; + +template<> +BufferManager *NodeManagers::manager<Buffer>() const Q_DECL_NOEXCEPT; + +template<> +AttributeManager *NodeManagers::manager<Attribute>() const Q_DECL_NOEXCEPT; + +template<> +GeometryManager *NodeManagers::manager<Geometry>() const Q_DECL_NOEXCEPT; + +template<> +GeometryRendererManager *NodeManagers::manager<GeometryRenderer>() const Q_DECL_NOEXCEPT; + +template<> +ObjectPickerManager *NodeManagers::manager<ObjectPicker>() const Q_DECL_NOEXCEPT; + +template<> +BoundingVolumeDebugManager *NodeManagers::manager<BoundingVolumeDebug>() const Q_DECL_NOEXCEPT; + +} // Render + +} // Qt3DRender + +QT_END_NAMESPACE + + +#endif // NODEMANAGERS_H diff --git a/src/render/backend/render-backend.pri b/src/render/backend/render-backend.pri index 7f656cf66..96444f861 100644 --- a/src/render/backend/render-backend.pri +++ b/src/render/backend/render-backend.pri @@ -22,7 +22,8 @@ HEADERS += \ $$PWD/layer_p.h \ $$PWD/nodefunctor_p.h \ $$PWD/transform_p.h \ - $$PWD/boundingvolumedebug_p.h + $$PWD/boundingvolumedebug_p.h \ + $$PWD/nodemanagers_p.h SOURCES += \ $$PWD/renderthread.cpp \ @@ -41,4 +42,5 @@ SOURCES += \ $$PWD/entity.cpp \ $$PWD/layer.cpp \ $$PWD/transform.cpp \ - $$PWD/boundingvolumedebug.cpp + $$PWD/boundingvolumedebug.cpp \ + $$PWD/nodemanagers.cpp |