16 #ifndef QGSSHADOWRENDERINGFRAMEGRAPH_H
17 #define QGSSHADOWRENDERINGFRAMEGRAPH_H
20 #include <Qt3DRender/QCamera>
21 #include <Qt3DRender/QRenderSurfaceSelector>
22 #include <Qt3DRender/QViewport>
23 #include <Qt3DRender/QCameraSelector>
24 #include <Qt3DRender/QLayerFilter>
25 #include <Qt3DRender/QLayer>
26 #include <Qt3DRender/QRenderTargetSelector>
27 #include <Qt3DRender/QRenderTarget>
28 #include <Qt3DRender/QTexture>
29 #include <Qt3DRender/QClearBuffers>
30 #include <Qt3DRender/QParameter>
31 #include <Qt3DRender/QFrustumCulling>
32 #include <Qt3DRender/QRenderStateSet>
33 #include <Qt3DRender/QDepthTest>
34 #include <Qt3DRender/QCullFace>
35 #include <Qt3DRender/QPolygonOffset>
36 #include <Qt3DRender/QRenderCapture>
37 #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
38 #include <Qt3DRender/QDebugOverlay>
66 Qt3DRender::QFrameGraphNode *
frameGraphRoot() {
return mRenderSurfaceSelector; }
91 Qt3DRender::QCamera *
mainCamera() {
return mMainCamera; }
129 QgsPreviewQuad *
addTexturePreviewOverlay( Qt3DRender::QTexture2D *texture,
const QPointF ¢erNDC,
const QSizeF &size, QVector<Qt3DRender::QParameter *> additionalShaderParameters = QVector<Qt3DRender::QParameter *>() );
160 Qt3DRender::QRenderSurfaceSelector *mRenderSurfaceSelector =
nullptr;
161 Qt3DRender::QViewport *mMainViewPort =
nullptr;
162 bool mFrustumCullingEnabled =
true;
164 Qt3DRender::QCamera *mMainCamera =
nullptr;
165 Qt3DRender::QCamera *mLightCamera =
nullptr;
168 Qt3DRender::QCameraSelector *mMainCameraSelector =
nullptr;
169 Qt3DRender::QLayerFilter *mForwardRenderLayerFilter =
nullptr;
170 Qt3DRender::QRenderTargetSelector *mForwardRenderTargetSelector =
nullptr;
171 Qt3DRender::QClearBuffers *mForwardClearBuffers =
nullptr;
172 Qt3DRender::QFrustumCulling *mFrustumCulling =
nullptr;
174 Qt3DRender::QTexture2D *mForwardColorTexture =
nullptr;
175 Qt3DRender::QTexture2D *mForwardDepthTexture =
nullptr;
177 #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
178 Qt3DRender::QDebugOverlay *mDebugOverlay =
nullptr;
182 Qt3DRender::QCameraSelector *mLightCameraSelectorShadowPass =
nullptr;
183 Qt3DRender::QLayerFilter *mShadowSceneEntitiesFilter =
nullptr;
184 Qt3DRender::QRenderTargetSelector *mShadowRenderTargetSelector =
nullptr;
185 Qt3DRender::QClearBuffers *mShadowClearBuffers =
nullptr;
186 Qt3DRender::QRenderStateSet *mShadowRenderStateSet =
nullptr;
188 Qt3DRender::QTexture2D *mShadowMapTexture =
nullptr;
194 Qt3DRender::QCameraSelector *mDepthRenderCameraSelector =
nullptr;
195 Qt3DRender::QRenderStateSet *mDepthRenderStateSet =
nullptr;;
196 Qt3DRender::QLayerFilter *mDepthRenderLayerFilter =
nullptr;
197 Qt3DRender::QRenderTargetSelector *mDepthRenderCaptureTargetSelector =
nullptr;
198 Qt3DRender::QRenderCapture *mDepthRenderCapture =
nullptr;
200 Qt3DRender::QTexture2D *mDepthRenderCaptureDepthTexture =
nullptr;
201 Qt3DRender::QTexture2D *mDepthRenderCaptureColorTexture =
nullptr;
204 Qt3DRender::QCameraSelector *mPostProcessingCameraSelector =
nullptr;
205 Qt3DRender::QLayerFilter *mPostprocessPassLayerFilter =
nullptr;
206 Qt3DRender::QClearBuffers *mPostprocessClearBuffers =
nullptr;
207 Qt3DRender::QRenderTargetSelector *mRenderCaptureTargetSelector =
nullptr;
208 Qt3DRender::QRenderCapture *mRenderCapture =
nullptr;
210 Qt3DRender::QTexture2D *mRenderCaptureColorTexture =
nullptr;
211 Qt3DRender::QTexture2D *mRenderCaptureDepthTexture =
nullptr;
214 Qt3DRender::QLayerFilter *mPreviewLayerFilter =
nullptr;
215 Qt3DRender::QRenderStateSet *mPreviewRenderStateSet =
nullptr;
216 Qt3DRender::QDepthTest *mPreviewDepthTest =
nullptr;
217 Qt3DRender::QCullFace *mPreviewCullFace =
nullptr;
219 bool mShadowRenderingEnabled =
false;
220 float mShadowBias = 0.00001f;
221 int mShadowMapResolution = 2048;
223 QSize mSize = QSize( 1024, 768 );
225 bool mEyeDomeLightingEnabled =
false;
226 double mEyeDomeLightingStrength = 1000.0;
227 int mEyeDomeLightingDistance = 1;
232 QEntity *mDepthRenderQuad =
nullptr;
234 QVector3D mLightDirection = QVector3D( 0.0, -1.0f, 0.0f );
236 Qt3DCore::QEntity *mRootEntity =
nullptr;
238 Qt3DRender::QLayer *mPostprocessPassLayer =
nullptr;
239 Qt3DRender::QLayer *mPreviewLayer =
nullptr;
240 Qt3DRender::QLayer *mForwardRenderLayer =
nullptr;
241 Qt3DRender::QLayer *mCastShadowsLayer =
nullptr;
242 Qt3DRender::QLayer *mDepthRenderPassLayer =
nullptr;
243 Qt3DRender::QLayer *mTransparentObjectsPassLayer =
nullptr;
247 QVector<QgsPreviewQuad *> mPreviewQuads;
249 Qt3DRender::QFrameGraphNode *constructShadowRenderPass();
250 Qt3DRender::QFrameGraphNode *constructForwardRenderPass();
251 Qt3DRender::QFrameGraphNode *constructTexturesPreviewPass();
252 Qt3DRender::QFrameGraphNode *constructPostprocessingPass();
253 Qt3DRender::QFrameGraphNode *constructDepthRenderPass();
255 Qt3DCore::QEntity *constructDepthRenderQuad();
257 bool mRenderCaptureEnabled =
true;
A rectangle specified with double values.
Qt3DRender::QTexture2D * forwardRenderDepthTexture()
Returns the depth texture of the forward rendering pass.
int shadowMapResolution() const
Returns the shadow map resolution.
void setupDepthMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the depth map debugging view port.
bool renderCaptureEnabled() const
Returns whether it will be possible to render to an image.
Qt3DRender::QLayer * transparentObjectLayer()
Returns a layer object used to indicate that the object is transparent.
QgsShadowRenderingFrameGraph(QSurface *surface, QSize s, Qt3DRender::QCamera *mainCamera, Qt3DCore::QEntity *root)
Constructor.
Qt3DRender::QTexture2D * shadowMapTexture()
Returns the shadow map (a depth texture for the shadow rendering pass)
Qt3DRender::QTexture2D * forwardRenderColorTexture()
Returns the color texture of the forward rendering pass.
void setupShadowMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the shadow map debugging view port.
void setShadowBias(float shadowBias)
Sets the shadow bias value.
void setShadowMapResolution(int resolution)
Sets the resolution of the shadow map.
void setSize(QSize s)
Sets the size of the buffers used for rendering.
Qt3DRender::QLayer * castShadowsLayer()
Returns a layer object used to indicate that an entity will cast shadows.
void setupEyeDomeLighting(bool enabled, double strength, int distance)
Sets eye dome lighting shading related settings.
QgsPreviewQuad * addTexturePreviewOverlay(Qt3DRender::QTexture2D *texture, const QPointF ¢erNDC, const QSizeF &size, QVector< Qt3DRender::QParameter * > additionalShaderParameters=QVector< Qt3DRender::QParameter * >())
Adds an preview entity that shows a texture in real time for debugging purposes.
Qt3DRender::QRenderCapture * renderCapture()
Returns the render capture object used to take an image of the scene.
Qt3DRender::QCamera * lightCamera()
Returns the light camera.
bool shadowRenderingEnabled() const
Returns whether shadow rendering is enabled.
Qt3DRender::QLayer * forwardRenderLayer()
Returns a layer object used to indicate that an entity will be rendered during the forward rendering ...
void setDebugOverlayEnabled(bool enabled)
Sets whether debug overlay is enabled.
bool frustumCullingEnabled() const
Returns whether frustum culling is enabled.
Qt3DRender::QCamera * mainCamera()
Returns the main camera.
Qt3DRender::QRenderCapture * depthRenderCapture()
Returns the render capture object used to take an image of the depth buffer of the scene.
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
Qt3DCore::QEntity * rootEntity()
Returns the root entity of the entities related to the frame graph (like the post processing entity a...
QgsPostprocessingEntity * postprocessingEntity()
Returns the postprocessing entity.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
Qt3DRender::QLayer * previewLayer()
Returns a layer object used to indicate that an entity is to be rendered during the preview textures ...
Qt3DRender::QLayer * postprocessingPassLayer()
Returns a layer object used to indicate that an entity is to be rendered during the post processing r...
Qt3DRender::QFrameGraphNode * frameGraphRoot()
Returns the root of the frame graph object.
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
void setupDirectionalLight(const QgsDirectionalLightSettings &light, float maximumShadowRenderingDistance)
Sets shadow rendering to use a directional light.
float shadowBias() const
Returns the shadow bias value.
void setShadowRenderingEnabled(bool enabled)
Sets whether the shadow rendering is enabled.