QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgsframegraph.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsframegraph.h
3 --------------------------------------
4 Date : August 2020
5 Copyright : (C) 2020 by Belgacem Nedjima
6 Email : gb underscore nedjima at esi dot dz
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSFRAMEGRAPH_H
17#define QGSFRAMEGRAPH_H
18
19#include <map>
20
22
23#include <QWindow>
24#include <Qt3DRender/QCamera>
25#include <Qt3DRender/QCameraSelector>
26#include <Qt3DRender/QClearBuffers>
27#include <Qt3DRender/QCullFace>
28#include <Qt3DRender/QDebugOverlay>
29#include <Qt3DRender/QDepthTest>
30#include <Qt3DRender/QFrustumCulling>
31#include <Qt3DRender/QLayer>
32#include <Qt3DRender/QLayerFilter>
33#include <Qt3DRender/QParameter>
34#include <Qt3DRender/QPolygonOffset>
35#include <Qt3DRender/QRenderCapture>
36#include <Qt3DRender/QRenderStateSet>
37#include <Qt3DRender/QRenderSurfaceSelector>
38#include <Qt3DRender/QRenderTarget>
39#include <Qt3DRender/QRenderTargetSelector>
40#include <Qt3DRender/QTexture>
41#include <Qt3DRender/QViewport>
42
45class QgsRectangle;
55
56#define SIP_NO_FILE
57
68class QgsFrameGraph : public Qt3DCore::QEntity
69{
70 Q_OBJECT
71
72 public:
74 QgsFrameGraph( QSurface *surface, QSize s, Qt3DRender::QCamera *mainCamera, Qt3DCore::QEntity *root );
75
77 Qt3DRender::QFrameGraphNode *frameGraphRoot() { return mRenderSurfaceSelector; }
78
80 Qt3DRender::QCamera *mainCamera() { return mMainCamera; }
81
83 QgsPostprocessingEntity *postprocessingEntity() { return mPostprocessingEntity; }
84
86 Qt3DCore::QEntity *rubberBandsRootEntity() { return mRubberBandsRootEntity; }
87
89 Qt3DRender::QRenderCapture *renderCapture();
90
92 Qt3DRender::QRenderCapture *depthRenderCapture();
93
95 void setFrustumCullingEnabled( bool enabled );
96
98 void setClearColor( const QColor &clearColor );
99
101 void setSize( QSize s );
102
107 void setRenderCaptureEnabled( bool enabled );
108
113 void setDebugOverlayEnabled( bool enabled );
114
116 QString dumpFrameGraph() const;
117
119 QString dumpSceneGraph() const;
120
128 void addClipPlanes( int nrClipPlanes );
129
136 void removeClipPlanes();
137
145 bool registerRenderView( std::unique_ptr<QgsAbstractRenderView> renderView, const QString &name, Qt3DRender::QFrameGraphNode *topNode = nullptr );
146
151 void unregisterRenderView( const QString &name );
152
157 void setRenderViewEnabled( const QString &name, bool enable );
158
163 bool isRenderViewEnabled( const QString &name );
164
169 QgsAbstractRenderView *renderView( const QString &name );
170
176
182
188
194
199 void updateShadowSettings( const QgsShadowSettings &shadowSettings, const QList<QgsLightSource *> &lightSources );
200
205 void updateDebugShadowMapSettings( const Qgs3DMapSettings &settings );
206
211 void updateDebugDepthMapSettings( const Qgs3DMapSettings &settings );
212
218
223 void updateEyeDomeSettings( const Qgs3DMapSettings &settings );
224
225 static const QString FORWARD_RENDERVIEW;
226 static const QString SHADOW_RENDERVIEW;
227 static const QString AXIS3D_RENDERVIEW;
228 static const QString DEPTH_RENDERVIEW;
229 static const QString DEBUG_RENDERVIEW;
231 static const QString AMBIENT_OCCLUSION_RENDERVIEW;
232
233 private:
234 Qt3DRender::QRenderSurfaceSelector *mRenderSurfaceSelector = nullptr;
235 Qt3DRender::QViewport *mMainViewPort = nullptr;
236
237 Qt3DRender::QCamera *mMainCamera = nullptr;
238
239 // Post processing pass branch nodes:
240 Qt3DRender::QRenderTargetSelector *mRenderCaptureTargetSelector = nullptr;
241 Qt3DRender::QRenderCapture *mRenderCapture = nullptr;
242 // Post processing pass texture related objects:
243 Qt3DRender::QTexture2D *mRenderCaptureColorTexture = nullptr;
244 Qt3DRender::QTexture2D *mRenderCaptureDepthTexture = nullptr;
245
246 // Rubber bands pass
247 Qt3DRender::QCameraSelector *mRubberBandsCameraSelector = nullptr;
248 Qt3DRender::QLayerFilter *mRubberBandsLayerFilter = nullptr;
249 Qt3DRender::QRenderStateSet *mRubberBandsStateSet = nullptr;
250 Qt3DRender::QRenderTargetSelector *mRubberBandsRenderTargetSelector = nullptr;
251
252 QSize mSize = QSize( 1024, 768 );
253
254 QVector3D mLightDirection = QVector3D( 0.0, -1.0f, 0.0f );
255
256 Qt3DCore::QEntity *mRootEntity = nullptr;
257
258 Qt3DRender::QLayer *mRubberBandsLayer = nullptr;
259
260 QgsPostprocessingEntity *mPostprocessingEntity = nullptr;
261
262 Qt3DCore::QEntity *mRubberBandsRootEntity = nullptr;
263
265 QgsDebugTextureEntity *mShadowTextureDebugging = nullptr;
267 QgsDebugTextureEntity *mDepthTextureDebugging = nullptr;
268
269 void constructShadowRenderPass();
270 void constructForwardRenderPass();
271 void constructDebugTexturePass( Qt3DRender::QFrameGraphNode *topNode = nullptr );
272 Qt3DRender::QFrameGraphNode *constructPostprocessingPass();
273 void constructDepthRenderPass();
274 void constructAmbientOcclusionRenderPass();
275 Qt3DRender::QFrameGraphNode *constructRubberBandsPass();
276
277 Qt3DRender::QFrameGraphNode *constructSubPostPassForProcessing();
278 Qt3DRender::QFrameGraphNode *constructSubPostPassForRenderCapture();
279
280 bool mRenderCaptureEnabled = false;
281
282 // holds renderviews according to their name
283 std::map<QString, std::unique_ptr<QgsAbstractRenderView>> mRenderViewMap;
284
285 Q_DISABLE_COPY( QgsFrameGraph )
286};
287
288#endif // QGSFRAMEGRAPH_H
Definition of the world.
Base class for 3D render view.
Container class that holds different objects related to ambient occlusion rendering.
Contains the configuration of ambient occlusion rendering.
Object that controls camera movement based on user input.
An entity that is responsible for debugging texture.
Container class that holds different objects related to depth rendering.
Definition of a directional light in a 3D map scene.
Container class that holds different objects related to forward rendering.
void updateAmbientOcclusionSettings(const QgsAmbientOcclusionSettings &settings)
Updates settings for ambient occlusion.
void updateEyeDomeSettings(const Qgs3DMapSettings &settings)
Updates settings for eye dome lighting.
bool isRenderViewEnabled(const QString &name)
Returns true if the render view named name is found and enabled.
void setRenderViewEnabled(const QString &name, bool enable)
Enables or disables the render view named name according to enable.
void updateShadowSettings(const QgsShadowSettings &shadowSettings, const QList< QgsLightSource * > &lightSources)
Updates shadow bias, light and texture size according to shadowSettings and lightSources.
void addClipPlanes(int nrClipPlanes)
Setups nrClipPlanes clip planes in the forward pass to enable OpenGL clipping.
void unregisterRenderView(const QString &name)
Unregisters the render view named name, if any.
bool registerRenderView(std::unique_ptr< QgsAbstractRenderView > renderView, const QString &name, Qt3DRender::QFrameGraphNode *topNode=nullptr)
Registers a new the render view renderView with name name.
QString dumpFrameGraph() const
Dumps frame graph as string.
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
QgsAmbientOcclusionRenderView & ambientOcclusionRenderView()
Returns ambient occlusion renderview.
Qt3DRender::QRenderCapture * depthRenderCapture()
Returns the render capture object used to take an image of the depth buffer of the scene.
void updateDebugShadowMapSettings(const Qgs3DMapSettings &settings)
Updates settings for shadows debug map.
QgsAbstractRenderView * renderView(const QString &name)
Returns the render view named name, if any.
void removeClipPlanes()
Disables OpenGL clipping.
static const QString AMBIENT_OCCLUSION_RENDERVIEW
Ambient occlusion render view name.
Qt3DRender::QFrameGraphNode * frameGraphRoot()
Returns the root of the frame graph object.
QgsDepthRenderView & depthRenderView()
Returns depth renderview.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color).
QgsPostprocessingEntity * postprocessingEntity()
Returns the postprocessing entity.
static const QString FORWARD_RENDERVIEW
Qt3DCore::QEntity * rubberBandsRootEntity()
Returns entity for all rubber bands (to show them always on top).
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
static const QString SHADOW_RENDERVIEW
void setDebugOverlayEnabled(bool enabled)
Sets whether debug overlay is enabled.
void updateDebugDepthMapSettings(const Qgs3DMapSettings &settings)
Updates settings for depth debug map.
static const QString AXIS3D_RENDERVIEW
QgsForwardRenderView & forwardRenderView()
Returns forward renderview.
QString dumpSceneGraph() const
Dumps scene graph as string.
QgsShadowRenderView & shadowRenderView()
Returns shadow renderview.
static const QString DEBUG_RENDERVIEW
void setSize(QSize s)
Sets the size of the buffers used for rendering.
static const QString DEPTH_RENDERVIEW
Qt3DRender::QCamera * mainCamera()
Returns the main camera.
QgsFrameGraph(QSurface *surface, QSize s, Qt3DRender::QCamera *mainCamera, Qt3DCore::QEntity *root)
Constructor.
Qt3DRender::QRenderCapture * renderCapture()
Returns the render capture object used to take an image of the scene.
An entity that is responsible for applying post processing effects.
A rectangle specified with double values.
Container class that holds different objects related to shadow rendering.
Contains configuration for rendering shadows.