1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2015 Klaralvdalens Datakonsult AB (KDAB). |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the Qt3D module of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:LGPL$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU Lesser General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser |
19 | ** General Public License version 3 as published by the Free Software |
20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the |
21 | ** packaging of this file. Please review the following information to |
22 | ** ensure the GNU Lesser General Public License version 3 requirements |
23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. |
24 | ** |
25 | ** GNU General Public License Usage |
26 | ** Alternatively, this file may be used under the terms of the GNU |
27 | ** General Public License version 2.0 or (at your option) the GNU General |
28 | ** Public license version 3 or any later version approved by the KDE Free |
29 | ** Qt Foundation. The licenses are as published by the Free Software |
30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 |
31 | ** included in the packaging of this file. Please review the following |
32 | ** information to ensure the GNU General Public License requirements will |
33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and |
34 | ** https://www.gnu.org/licenses/gpl-3.0.html. |
35 | ** |
36 | ** $QT_END_LICENSE$ |
37 | ** |
38 | ****************************************************************************/ |
39 | |
40 | #ifndef QT3DRENDER_RENDER_NODEMANAGERS_H |
41 | #define QT3DRENDER_RENDER_NODEMANAGERS_H |
42 | |
43 | // |
44 | // W A R N I N G |
45 | // ------------- |
46 | // |
47 | // This file is not part of the Qt API. It exists for the convenience |
48 | // of other Qt classes. This header file may change from version to |
49 | // version without notice, or even be removed. |
50 | // |
51 | // We mean it. |
52 | // |
53 | |
54 | #include <Qt3DCore/private/qresourcemanager_p.h> |
55 | #include <Qt3DRender/private/qt3drender_global_p.h> |
56 | |
57 | QT_BEGIN_NAMESPACE |
58 | |
59 | class QMatrix4x4; |
60 | |
61 | namespace Qt3DRender { |
62 | |
63 | class QTextureImageData; |
64 | |
65 | namespace Render { |
66 | |
67 | class CameraManager; |
68 | class EntityManager; |
69 | class BufferManager; |
70 | class AttributeManager; |
71 | class GeometryManager; |
72 | class GeometryRendererManager; |
73 | class ObjectPickerManager; |
74 | class RayCasterManager; |
75 | class BoundingVolumeDebugManager; |
76 | class MaterialManager; |
77 | class MatrixManager; |
78 | class VAOManager; |
79 | class ShaderManager; |
80 | class ShaderBuilderManager; |
81 | class TechniqueManager; |
82 | class EffectManager; |
83 | class RenderPassManager; |
84 | class RenderTargetManager; |
85 | class SceneManager; |
86 | class AttachmentManager; |
87 | class ParameterManager; |
88 | class ShaderDataManager; |
89 | class GLBufferManager; |
90 | class GLFenceManager; |
91 | class TextureImageManager; |
92 | class FilterKeyManager; |
93 | class FrameGraphManager; |
94 | class TransformManager; |
95 | class GLTextureManager; |
96 | class TextureManager; |
97 | class TextureDataManager; |
98 | class TextureImageDataManager; |
99 | class LayerManager; |
100 | class LevelOfDetailManager; |
101 | class LightManager; |
102 | class EnvironmentLightManager; |
103 | class ComputeCommandManager; |
104 | class RenderStateManager; |
105 | class ArmatureManager; |
106 | class SkeletonManager; |
107 | class JointManager; |
108 | class ShaderImageManager; |
109 | |
110 | class FrameGraphNode; |
111 | class Entity; |
112 | class CameraLens; |
113 | class Material; |
114 | class Shader; |
115 | class ShaderBuilder; |
116 | class Technique; |
117 | class Effect; |
118 | class RenderPass; |
119 | class Texture; |
120 | class Layer; |
121 | class LevelOfDetail; |
122 | class FilterKey; |
123 | class FrameGraphNode; |
124 | class Transform; |
125 | class Scene; |
126 | class RenderTargetOutput; |
127 | class RenderTarget; |
128 | class ShaderData; |
129 | class Parameter; |
130 | class GLBuffer; |
131 | class TextureImage; |
132 | class Buffer; |
133 | class Attribute; |
134 | class Geometry; |
135 | class GeometryRenderer; |
136 | class ObjectPicker; |
137 | class RayCaster; |
138 | //class BoundingVolumeDebug; |
139 | class Light; |
140 | class EnvironmentLight; |
141 | class ComputeCommand; |
142 | class RenderStateNode; |
143 | class Armature; |
144 | class Skeleton; |
145 | class Joint; |
146 | class OpenGLVertexArrayObject; |
147 | class ShaderImage; |
148 | |
149 | class ResourceAccessor; |
150 | |
151 | class Q_3DRENDERSHARED_PRIVATE_EXPORT NodeManagers |
152 | { |
153 | public: |
154 | NodeManagers(); |
155 | ~NodeManagers(); |
156 | |
157 | template<class Backend, typename Manager> |
158 | Manager *manager() const noexcept |
159 | { |
160 | return nullptr; |
161 | } |
162 | |
163 | template<class Backend, typename Manager, typename Key> |
164 | Backend *lookupResource(const Key &id) const |
165 | { |
166 | Manager *mgr = manager<Backend, Manager>(); |
167 | if (mgr != nullptr) |
168 | return mgr->lookupResource(id); |
169 | return nullptr; |
170 | } |
171 | |
172 | template<class Backend, typename Manager, typename Handle, typename Key> |
173 | Handle lookupHandle(const Key &id) const |
174 | { |
175 | Manager *mgr = manager<Backend, Manager>(); |
176 | if (mgr != nullptr) |
177 | return mgr->lookupHandle(id); |
178 | return Handle(); |
179 | } |
180 | |
181 | template<class Backend, typename Manager, typename Handle> |
182 | Backend *data(Handle handle) |
183 | { |
184 | Manager *mgr = manager<Backend, Manager>(); |
185 | if (mgr != nullptr) |
186 | return mgr->data(handle); |
187 | return nullptr; |
188 | } |
189 | |
190 | |
191 | inline CameraManager *cameraManager() const noexcept { return m_cameraManager; } |
192 | inline EntityManager *renderNodesManager() const noexcept { return m_renderNodesManager; } |
193 | inline MaterialManager *materialManager() const noexcept { return m_materialManager; } |
194 | inline MatrixManager *worldMatrixManager() const noexcept { return m_worldMatrixManager; } |
195 | inline VAOManager *vaoManager() const noexcept { return m_vaoManager; } |
196 | inline ShaderManager *shaderManager() const noexcept { return m_shaderManager; } |
197 | inline ShaderBuilderManager *shaderBuilderManager() const noexcept { return m_shaderBuilderManager; } |
198 | inline TechniqueManager *techniqueManager() const noexcept { return m_techniqueManager; } |
199 | inline EffectManager *effectManager() const noexcept { return m_effectManager; } |
200 | inline RenderPassManager *renderPassManager() const noexcept { return m_renderPassManager; } |
201 | inline GLTextureManager *glTextureManager() const noexcept { return m_glTextureManager; } |
202 | inline TextureManager *textureManager() const noexcept { return m_textureManager; } |
203 | inline LayerManager *layerManager() const noexcept { return m_layerManager; } |
204 | inline LevelOfDetailManager *levelOfDetailManager() const noexcept { return m_levelOfDetailManager; } |
205 | inline FilterKeyManager *filterKeyManager() const noexcept { return m_filterKeyManager; } |
206 | inline FrameGraphManager *frameGraphManager() const noexcept { return m_frameGraphManager; } |
207 | inline TransformManager *transformManager() const noexcept { return m_transformManager; } |
208 | inline RenderTargetManager *renderTargetManager() const noexcept { return m_renderTargetManager; } |
209 | inline SceneManager *sceneManager() const noexcept { return m_sceneManager; } |
210 | inline AttachmentManager *attachmentManager() const noexcept { return m_attachmentManager; } |
211 | inline ParameterManager *parameterManager() const noexcept { return m_parameterManager; } |
212 | inline ShaderDataManager *shaderDataManager() const noexcept { return m_shaderDataManager; } |
213 | inline GLBufferManager *glBufferManager() const noexcept { return m_glBufferManager; } |
214 | inline GLFenceManager *glFenceManager() const noexcept { return m_glFenceManager; } |
215 | inline TextureImageManager *textureImageManager() const noexcept { return m_textureImageManager; } |
216 | inline BufferManager *bufferManager() const noexcept { return m_bufferManager; } |
217 | inline AttributeManager *attributeManager() const noexcept { return m_attributeManager; } |
218 | inline GeometryManager *geometryManager() const noexcept { return m_geometryManager; } |
219 | inline GeometryRendererManager *geometryRendererManager() const noexcept { return m_geometryRendererManager; } |
220 | inline ObjectPickerManager *objectPickerManager() const noexcept { return m_objectPickerManager; } |
221 | inline RayCasterManager *rayCasterManager() const noexcept { return m_rayCasterManager; } |
222 | // inline BoundingVolumeDebugManager *boundingVolumeDebugManager() const noexcept { return m_boundingVolumeDebugManager; } |
223 | inline LightManager *lightManager() const noexcept { return m_lightManager; } |
224 | inline EnvironmentLightManager *environmentLightManager() const noexcept { return m_environmentLightManager; } |
225 | inline ComputeCommandManager *computeJobManager() const noexcept { return m_computeJobManager; } |
226 | inline RenderStateManager *renderStateManager() const noexcept { return m_renderStateManager; } |
227 | inline ArmatureManager *armatureManager() const noexcept { return m_armatureManager; } |
228 | inline SkeletonManager *skeletonManager() const noexcept { return m_skeletonManager; } |
229 | inline JointManager *jointManager() const noexcept { return m_jointManager; } |
230 | inline ShaderImageManager *shaderImageManager() const noexcept { return m_shaderImageManager; } |
231 | |
232 | QSharedPointer<ResourceAccessor> resourceAccessor(); |
233 | |
234 | private: |
235 | CameraManager *m_cameraManager; |
236 | EntityManager *m_renderNodesManager; |
237 | MaterialManager *m_materialManager; |
238 | MatrixManager *m_worldMatrixManager; |
239 | VAOManager *m_vaoManager; |
240 | ShaderManager *m_shaderManager; |
241 | ShaderBuilderManager *m_shaderBuilderManager; |
242 | TechniqueManager *m_techniqueManager; |
243 | EffectManager *m_effectManager; |
244 | RenderPassManager *m_renderPassManager; |
245 | TextureManager *m_textureManager; |
246 | TextureImageManager *m_textureImageManager; |
247 | GLTextureManager *m_glTextureManager; |
248 | LayerManager *m_layerManager; |
249 | LevelOfDetailManager *m_levelOfDetailManager; |
250 | FilterKeyManager *m_filterKeyManager; |
251 | FrameGraphManager *m_frameGraphManager; |
252 | TransformManager *m_transformManager; |
253 | RenderTargetManager *m_renderTargetManager; |
254 | SceneManager *m_sceneManager; |
255 | AttachmentManager *m_attachmentManager; |
256 | ParameterManager *m_parameterManager; |
257 | ShaderDataManager *m_shaderDataManager; |
258 | GLBufferManager *m_glBufferManager; |
259 | GLFenceManager *m_glFenceManager; |
260 | BufferManager *m_bufferManager; |
261 | AttributeManager *m_attributeManager; |
262 | GeometryManager *m_geometryManager; |
263 | GeometryRendererManager *m_geometryRendererManager; |
264 | ObjectPickerManager *m_objectPickerManager; |
265 | RayCasterManager *m_rayCasterManager; |
266 | // BoundingVolumeDebugManager *m_boundingVolumeDebugManager; |
267 | LightManager *m_lightManager; |
268 | EnvironmentLightManager *m_environmentLightManager; |
269 | ComputeCommandManager *m_computeJobManager; |
270 | RenderStateManager *m_renderStateManager; |
271 | ArmatureManager *m_armatureManager; |
272 | SkeletonManager *m_skeletonManager; |
273 | JointManager *m_jointManager; |
274 | ShaderImageManager *m_shaderImageManager; |
275 | |
276 | QSharedPointer<ResourceAccessor> m_resourceAccessor; |
277 | }; |
278 | |
279 | // Specializations |
280 | |
281 | template<> |
282 | Q_3DRENDERSHARED_PRIVATE_EXPORT CameraManager *NodeManagers::manager<CameraLens>() const noexcept; |
283 | |
284 | template<> |
285 | Q_3DRENDERSHARED_PRIVATE_EXPORT EntityManager *NodeManagers::manager<Entity>() const noexcept; |
286 | |
287 | template<> |
288 | Q_3DRENDERSHARED_PRIVATE_EXPORT MaterialManager *NodeManagers::manager<Material>() const noexcept; |
289 | |
290 | template<> |
291 | Q_3DRENDERSHARED_PRIVATE_EXPORT MatrixManager *NodeManagers::manager<QMatrix4x4*>() const noexcept; |
292 | |
293 | template<> |
294 | Q_3DRENDERSHARED_PRIVATE_EXPORT VAOManager *NodeManagers::manager<OpenGLVertexArrayObject>() const noexcept; |
295 | |
296 | template<> |
297 | Q_3DRENDERSHARED_PRIVATE_EXPORT ShaderManager *NodeManagers::manager<Shader>() const noexcept; |
298 | |
299 | template<> |
300 | Q_3DRENDERSHARED_PRIVATE_EXPORT ShaderBuilderManager *NodeManagers::manager<ShaderBuilder>() const noexcept; |
301 | |
302 | template<> |
303 | Q_3DRENDERSHARED_PRIVATE_EXPORT TechniqueManager *NodeManagers::manager<Technique>() const noexcept; |
304 | |
305 | template<> |
306 | Q_3DRENDERSHARED_PRIVATE_EXPORT EffectManager *NodeManagers::manager<Effect>() const noexcept; |
307 | |
308 | template<> |
309 | Q_3DRENDERSHARED_PRIVATE_EXPORT RenderPassManager *NodeManagers::manager<RenderPass>() const noexcept; |
310 | |
311 | template<> |
312 | Q_3DRENDERSHARED_PRIVATE_EXPORT TextureManager *NodeManagers::manager<Texture>() const noexcept; |
313 | |
314 | template<> |
315 | Q_3DRENDERSHARED_PRIVATE_EXPORT LayerManager *NodeManagers::manager<Layer>() const noexcept; |
316 | |
317 | template<> |
318 | Q_3DRENDERSHARED_PRIVATE_EXPORT LevelOfDetailManager *NodeManagers::manager<LevelOfDetail>() const noexcept; |
319 | |
320 | template<> |
321 | Q_3DRENDERSHARED_PRIVATE_EXPORT FilterKeyManager *NodeManagers::manager<FilterKey>() const noexcept; |
322 | |
323 | template<> |
324 | Q_3DRENDERSHARED_PRIVATE_EXPORT FrameGraphManager *NodeManagers::manager<FrameGraphNode*>() const noexcept; |
325 | |
326 | template<> |
327 | Q_3DRENDERSHARED_PRIVATE_EXPORT TransformManager *NodeManagers::manager<Transform>() const noexcept; |
328 | |
329 | template<> |
330 | Q_3DRENDERSHARED_PRIVATE_EXPORT RenderTargetManager *NodeManagers::manager<RenderTarget>() const noexcept; |
331 | |
332 | template<> |
333 | Q_3DRENDERSHARED_PRIVATE_EXPORT SceneManager *NodeManagers::manager<Scene>() const noexcept; |
334 | |
335 | template<> |
336 | Q_3DRENDERSHARED_PRIVATE_EXPORT AttachmentManager *NodeManagers::manager<RenderTargetOutput>() const noexcept; |
337 | |
338 | template<> |
339 | Q_3DRENDERSHARED_PRIVATE_EXPORT ParameterManager *NodeManagers::manager<Parameter>() const noexcept; |
340 | |
341 | template<> |
342 | Q_3DRENDERSHARED_PRIVATE_EXPORT ShaderDataManager *NodeManagers::manager<ShaderData>() const noexcept; |
343 | |
344 | template<> |
345 | Q_3DRENDERSHARED_PRIVATE_EXPORT GLBufferManager *NodeManagers::manager<GLBuffer>() const noexcept; |
346 | |
347 | template<> |
348 | Q_3DRENDERSHARED_PRIVATE_EXPORT TextureImageManager *NodeManagers::manager<TextureImage>() const noexcept; |
349 | |
350 | template<> |
351 | Q_3DRENDERSHARED_PRIVATE_EXPORT BufferManager *NodeManagers::manager<Buffer>() const noexcept; |
352 | |
353 | template<> |
354 | Q_3DRENDERSHARED_PRIVATE_EXPORT AttributeManager *NodeManagers::manager<Attribute>() const noexcept; |
355 | |
356 | template<> |
357 | Q_3DRENDERSHARED_PRIVATE_EXPORT GeometryManager *NodeManagers::manager<Geometry>() const noexcept; |
358 | |
359 | template<> |
360 | Q_3DRENDERSHARED_PRIVATE_EXPORT GeometryRendererManager *NodeManagers::manager<GeometryRenderer>() const noexcept; |
361 | |
362 | template<> |
363 | Q_3DRENDERSHARED_PRIVATE_EXPORT ObjectPickerManager *NodeManagers::manager<ObjectPicker>() const noexcept; |
364 | |
365 | template<> |
366 | Q_3DRENDERSHARED_PRIVATE_EXPORT RayCasterManager *NodeManagers::manager<RayCaster>() const noexcept; |
367 | |
368 | //template<> |
369 | //Q_3DRENDERSHARED_PRIVATE_EXPORT BoundingVolumeDebugManager *NodeManagers::manager<BoundingVolumeDebug>() const noexcept; |
370 | |
371 | template<> |
372 | LightManager *NodeManagers::manager<Light>() const noexcept; |
373 | |
374 | template<> |
375 | EnvironmentLightManager *NodeManagers::manager<EnvironmentLight>() const noexcept; |
376 | |
377 | template<> |
378 | Q_3DRENDERSHARED_PRIVATE_EXPORT ComputeCommandManager *NodeManagers::manager<ComputeCommand>() const noexcept; |
379 | |
380 | template<> |
381 | Q_3DRENDERSHARED_PRIVATE_EXPORT RenderStateManager *NodeManagers::manager<RenderStateNode>() const noexcept; |
382 | |
383 | template<> |
384 | Q_3DRENDERSHARED_PRIVATE_EXPORT ArmatureManager *NodeManagers::manager<Armature>() const noexcept; |
385 | |
386 | template<> |
387 | Q_3DRENDERSHARED_PRIVATE_EXPORT SkeletonManager *NodeManagers::manager<Skeleton>() const noexcept; |
388 | |
389 | template<> |
390 | Q_3DRENDERSHARED_PRIVATE_EXPORT JointManager *NodeManagers::manager<Joint>() const noexcept; |
391 | |
392 | template<> |
393 | Q_3DRENDERSHARED_PRIVATE_EXPORT ShaderImageManager *NodeManagers::manager<ShaderImage>() const noexcept; |
394 | |
395 | } // Render |
396 | |
397 | } // Qt3DRender |
398 | |
399 | QT_END_NAMESPACE |
400 | |
401 | |
402 | #endif // NODEMANAGERS_H |
403 | |