summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/render/backend/nodemanagers.cpp264
-rw-r--r--src/render/backend/nodemanagers_p.h321
-rw-r--r--src/render/backend/render-backend.pri6
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