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>
70 Qt3DRender::QFrameGraphNode *
frameGraphRoot() {
return mRenderSurfaceSelector; }
195 QgsPreviewQuad *
addTexturePreviewOverlay( Qt3DRender::QTexture2D *texture,
const QPointF ¢erNDC,
const QSizeF &size, QVector<Qt3DRender::QParameter *> additionalShaderParameters = QVector<Qt3DRender::QParameter *>() );
226 Qt3DRender::QRenderSurfaceSelector *mRenderSurfaceSelector =
nullptr;
227 Qt3DRender::QViewport *mMainViewPort =
nullptr;
228 bool mFrustumCullingEnabled =
true;
230 Qt3DRender::QCamera *mMainCamera =
nullptr;
231 Qt3DRender::QCamera *mLightCamera =
nullptr;
234 Qt3DRender::QCameraSelector *mMainCameraSelector =
nullptr;
235 Qt3DRender::QLayerFilter *mForwardRenderLayerFilter =
nullptr;
236 Qt3DRender::QRenderTargetSelector *mForwardRenderTargetSelector =
nullptr;
237 Qt3DRender::QClearBuffers *mForwardClearBuffers =
nullptr;
238 Qt3DRender::QFrustumCulling *mFrustumCulling =
nullptr;
240 Qt3DRender::QTexture2D *mForwardColorTexture =
nullptr;
241 Qt3DRender::QTexture2D *mForwardDepthTexture =
nullptr;
243#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
244 Qt3DRender::QDebugOverlay *mDebugOverlay =
nullptr;
248 Qt3DRender::QCameraSelector *mLightCameraSelectorShadowPass =
nullptr;
249 Qt3DRender::QLayerFilter *mShadowSceneEntitiesFilter =
nullptr;
250 Qt3DRender::QRenderTargetSelector *mShadowRenderTargetSelector =
nullptr;
251 Qt3DRender::QClearBuffers *mShadowClearBuffers =
nullptr;
252 Qt3DRender::QRenderStateSet *mShadowRenderStateSet =
nullptr;
254 Qt3DRender::QTexture2D *mShadowMapTexture =
nullptr;
260 Qt3DRender::QCameraSelector *mDepthRenderCameraSelector =
nullptr;
261 Qt3DRender::QRenderStateSet *mDepthRenderStateSet =
nullptr;;
262 Qt3DRender::QLayerFilter *mDepthRenderLayerFilter =
nullptr;
263 Qt3DRender::QRenderTargetSelector *mDepthRenderCaptureTargetSelector =
nullptr;
264 Qt3DRender::QRenderCapture *mDepthRenderCapture =
nullptr;
266 Qt3DRender::QTexture2D *mDepthRenderCaptureDepthTexture =
nullptr;
267 Qt3DRender::QTexture2D *mDepthRenderCaptureColorTexture =
nullptr;
270 Qt3DRender::QCameraSelector *mPostProcessingCameraSelector =
nullptr;
271 Qt3DRender::QLayerFilter *mPostprocessPassLayerFilter =
nullptr;
272 Qt3DRender::QClearBuffers *mPostprocessClearBuffers =
nullptr;
273 Qt3DRender::QRenderTargetSelector *mRenderCaptureTargetSelector =
nullptr;
274 Qt3DRender::QRenderCapture *mRenderCapture =
nullptr;
276 Qt3DRender::QTexture2D *mRenderCaptureColorTexture =
nullptr;
277 Qt3DRender::QTexture2D *mRenderCaptureDepthTexture =
nullptr;
280 Qt3DRender::QCameraSelector *mAmbientOcclusionRenderCameraSelector =
nullptr;
281 Qt3DRender::QRenderStateSet *mAmbientOcclusionRenderStateSet =
nullptr;;
282 Qt3DRender::QLayerFilter *mAmbientOcclusionRenderLayerFilter =
nullptr;
283 Qt3DRender::QRenderTargetSelector *mAmbientOcclusionRenderCaptureTargetSelector =
nullptr;
285 Qt3DRender::QTexture2D *mAmbientOcclusionRenderTexture =
nullptr;
288 Qt3DRender::QCameraSelector *mAmbientOcclusionBlurCameraSelector =
nullptr;
289 Qt3DRender::QRenderStateSet *mAmbientOcclusionBlurStateSet =
nullptr;;
290 Qt3DRender::QLayerFilter *mAmbientOcclusionBlurLayerFilter =
nullptr;
291 Qt3DRender::QRenderTargetSelector *mAmbientOcclusionBlurRenderCaptureTargetSelector =
nullptr;
293 Qt3DRender::QTexture2D *mAmbientOcclusionBlurTexture =
nullptr;
296 Qt3DRender::QCameraSelector *mRubberBandsCameraSelector =
nullptr;
297 Qt3DRender::QLayerFilter *mRubberBandsLayerFilter =
nullptr;
298 Qt3DRender::QRenderStateSet *mRubberBandsStateSet =
nullptr;
299 Qt3DRender::QRenderTargetSelector *mRubberBandsRenderTargetSelector =
nullptr;
302 Qt3DRender::QLayerFilter *mPreviewLayerFilter =
nullptr;
303 Qt3DRender::QRenderStateSet *mPreviewRenderStateSet =
nullptr;
304 Qt3DRender::QDepthTest *mPreviewDepthTest =
nullptr;
305 Qt3DRender::QCullFace *mPreviewCullFace =
nullptr;
307 bool mShadowRenderingEnabled =
false;
308 float mShadowBias = 0.00001f;
309 int mShadowMapResolution = 2048;
312 bool mAmbientOcclusionEnabled =
false;
313 float mAmbientOcclusionIntensity = 0.5f;
314 float mAmbientOcclusionRadius = 25.f;
315 float mAmbientOcclusionThreshold = 0.5f;
317 QSize mSize = QSize( 1024, 768 );
319 bool mEyeDomeLightingEnabled =
false;
320 double mEyeDomeLightingStrength = 1000.0;
321 int mEyeDomeLightingDistance = 1;
326 QEntity *mDepthRenderQuad =
nullptr;
328 QVector3D mLightDirection = QVector3D( 0.0, -1.0f, 0.0f );
330 Qt3DCore::QEntity *mRootEntity =
nullptr;
332 Qt3DRender::QLayer *mPreviewLayer =
nullptr;
333 Qt3DRender::QLayer *mForwardRenderLayer =
nullptr;
334 Qt3DRender::QLayer *mCastShadowsLayer =
nullptr;
335 Qt3DRender::QLayer *mDepthRenderPassLayer =
nullptr;
336 Qt3DRender::QLayer *mTransparentObjectsPassLayer =
nullptr;
337 Qt3DRender::QLayer *mRubberBandsLayer =
nullptr;
343 Qt3DCore::QEntity *mRubberBandsRootEntity =
nullptr;
345 QVector<QgsPreviewQuad *> mPreviewQuads;
347 Qt3DRender::QFrameGraphNode *constructShadowRenderPass();
348 Qt3DRender::QFrameGraphNode *constructForwardRenderPass();
349 Qt3DRender::QFrameGraphNode *constructTexturesPreviewPass();
350 Qt3DRender::QFrameGraphNode *constructPostprocessingPass();
351 Qt3DRender::QFrameGraphNode *constructDepthRenderPass();
352 Qt3DRender::QFrameGraphNode *constructAmbientOcclusionRenderPass();
353 Qt3DRender::QFrameGraphNode *constructAmbientOcclusionBlurPass();
354 Qt3DRender::QFrameGraphNode *constructRubberBandsPass();
356 Qt3DCore::QEntity *constructDepthRenderQuad();
358 bool mRenderCaptureEnabled =
true;
A rectangle specified with double values.
Qt3DRender::QTexture2D * ambientOcclusionFactorMap()
Returns ambient occlusion factor values texture.
int shadowMapResolution() const
Returns the shadow map resolution.
void setupDepthMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the depth map debugging view port.
Qt3DRender::QLayer * transparentObjectLayer()
Returns a layer object used to indicate that the object is transparent.
bool renderCaptureEnabled() const
Returns whether it will be possible to render to an image.
Qt3DRender::QTexture2D * shadowMapTexture()
Returns the shadow map (a depth texture for the shadow rendering pass)
void setAmbientOcclusionThreshold(float threshold)
Sets the ambient occlusion threshold.
QgsShadowRenderingFrameGraph(QSurface *surface, QSize s, Qt3DRender::QCamera *mainCamera, Qt3DCore::QEntity *root)
Constructor.
void setupShadowMapDebugging(bool enabled, Qt::Corner corner, double size)
Sets the shadow map debugging view port.
Qt3DRender::QRenderCapture * renderCapture()
Returns the render capture object used to take an image of the scene.
void setShadowBias(float shadowBias)
Sets the shadow bias value.
Qt3DRender::QLayer * castShadowsLayer()
Returns a layer object used to indicate that an entity will cast shadows.
void setAmbientOcclusionIntensity(float intensity)
Sets the ambient occlusion intensity.
void setShadowMapResolution(int resolution)
Sets the resolution of the shadow map.
void setSize(QSize s)
Sets the size of the buffers used for rendering.
QgsPostprocessingEntity * postprocessingEntity()
Returns the postprocessing entity.
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::QFrameGraphNode * frameGraphRoot()
Returns the root of the frame graph object.
float ambientOcclusionRadius() const
Returns the ambient occlusion radius.
float ambientOcclusionIntensity() const
Returns the ambient occlusion intensity.
bool shadowRenderingEnabled() const
Returns whether shadow rendering is enabled.
Qt3DRender::QCamera * lightCamera()
Returns the light camera.
Qt3DRender::QTexture2D * forwardRenderColorTexture()
Returns the color texture of the forward rendering pass.
bool ambientOcclusionEnabled() const
Returns whether Screen Space Ambient Occlusion is enabled.
Qt3DRender::QRenderCapture * depthRenderCapture()
Returns the render capture object used to take an image of the depth buffer of the scene.
void setAmbientOcclusionRadius(float radius)
Sets the ambient occlusion radius.
Qt3DRender::QLayer * previewLayer()
Returns a layer object used to indicate that an entity is to be rendered during the preview textures ...
void setDebugOverlayEnabled(bool enabled)
Sets whether debug overlay is enabled.
bool frustumCullingEnabled() const
Returns whether frustum culling is enabled.
void setAmbientOcclusionEnabled(bool enabled)
Sets whether Screen Space Ambient Occlusion will be enabled.
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
Qt3DRender::QLayer * forwardRenderLayer()
Returns a layer object used to indicate that an entity will be rendered during the forward rendering ...
Qt3DRender::QTexture2D * forwardRenderDepthTexture()
Returns the depth texture of the forward rendering pass.
Qt3DCore::QEntity * rootEntity()
Returns the root entity of the entities related to the frame graph (like the post processing entity a...
Qt3DCore::QEntity * rubberBandsRootEntity()
Returns entity for all rubber bands (to show them always on top)
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
float ambientOcclusionThreshold() const
Returns the ambient occlusion threshold.
void setupDirectionalLight(const QgsDirectionalLightSettings &light, float maximumShadowRenderingDistance)
Sets shadow rendering to use a directional light.
float shadowBias() const
Returns the shadow bias value.
Qt3DRender::QCamera * mainCamera()
Returns the main camera.
Qt3DRender::QTexture2D * blurredAmbientOcclusionFactorMap()
Returns blurred ambient occlusion factor values texture.
void setShadowRenderingEnabled(bool enabled)
Sets whether the shadow rendering is enabled.