18#include <Qt3DRender/QCamera>
19#include <Qt3DRender/QCameraSelector>
20#include <Qt3DRender/QClearBuffers>
21#include <Qt3DRender/QCullFace>
22#include <Qt3DRender/QDepthTest>
23#include <Qt3DRender/QFrustumCulling>
24#include <Qt3DRender/QLayer>
25#include <Qt3DRender/QLayerFilter>
26#include <Qt3DRender/QParameter>
27#include <Qt3DRender/QPolygonOffset>
28#include <Qt3DRender/QRenderStateSet>
29#include <Qt3DRender/QRenderSurfaceSelector>
30#include <Qt3DRender/QRenderTarget>
31#include <Qt3DRender/QRenderTargetSelector>
32#include <Qt3DRender/QTexture>
33#include <Qt3DRender/QViewport>
34#include <Qt3DRender/qsubtreeenabler.h>
39 mLightCamera =
new Qt3DRender::QCamera;
40 mLightCamera->setObjectName(
mViewName +
"::LightCamera" );
41 mEntityCastingShadowsLayer =
new Qt3DRender::QLayer;
42 mEntityCastingShadowsLayer->setRecursive(
true );
43 mEntityCastingShadowsLayer->setObjectName(
mViewName +
"::Layer" );
52 mLayerFilter->setEnabled( enable );
55Qt3DRender::QRenderTarget *QgsShadowRenderView::buildTextures()
57 mMapTexture =
new Qt3DRender::QTexture2D;
58 mMapTexture->setWidth( mDefaultMapResolution );
59 mMapTexture->setHeight( mDefaultMapResolution );
60 mMapTexture->setFormat( Qt3DRender::QTexture2D::TextureFormat::DepthFormat );
61 mMapTexture->setGenerateMipMaps(
false );
62 mMapTexture->setMagnificationFilter( Qt3DRender::QTexture2D::Linear );
63 mMapTexture->setMinificationFilter( Qt3DRender::QTexture2D::Linear );
64 mMapTexture->wrapMode()->setX( Qt3DRender::QTextureWrapMode::ClampToEdge );
65 mMapTexture->wrapMode()->setY( Qt3DRender::QTextureWrapMode::ClampToEdge );
66 mMapTexture->setObjectName(
mViewName +
"::MapTexture" );
68 Qt3DRender::QRenderTargetOutput *renderTargetOutput =
new Qt3DRender::QRenderTargetOutput;
69 renderTargetOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Depth );
70 renderTargetOutput->setTexture( mMapTexture );
72 Qt3DRender::QRenderTarget *renderTarget =
new Qt3DRender::QRenderTarget;
73 renderTarget->setObjectName(
mViewName +
"::RenderTarget" );
74 renderTarget->addOutput( renderTargetOutput );
79void QgsShadowRenderView::buildRenderPass()
82 Qt3DRender::QCameraSelector *lightCameraSelector =
new Qt3DRender::QCameraSelector(
mRendererEnabler );
83 lightCameraSelector->setObjectName(
mViewName +
"::CameraSelector" );
84 lightCameraSelector->setCamera( mLightCamera );
86 mLayerFilter =
new Qt3DRender::QLayerFilter( lightCameraSelector );
87 mLayerFilter->addLayer( mEntityCastingShadowsLayer );
89 Qt3DRender::QRenderTargetSelector *renderTargetSelector =
new Qt3DRender::QRenderTargetSelector( mLayerFilter );
91 Qt3DRender::QClearBuffers *clearBuffers =
new Qt3DRender::QClearBuffers( renderTargetSelector );
92 clearBuffers->setBuffers( Qt3DRender::QClearBuffers::BufferType::ColorDepthBuffer );
93 clearBuffers->setClearColor( QColor::fromRgbF( 0.0f, 1.0f, 0.0f ) );
95 Qt3DRender::QRenderStateSet *renderStateSet =
new Qt3DRender::QRenderStateSet( clearBuffers );
97 Qt3DRender::QDepthTest *depthTest =
new Qt3DRender::QDepthTest;
98 depthTest->setDepthFunction( Qt3DRender::QDepthTest::Less );
99 renderStateSet->addRenderState( depthTest );
101 Qt3DRender::QCullFace *cullFace =
new Qt3DRender::QCullFace;
102 cullFace->setMode( Qt3DRender::QCullFace::CullingMode::Front );
103 renderStateSet->addRenderState( cullFace );
105 Qt3DRender::QPolygonOffset *polygonOffset =
new Qt3DRender::QPolygonOffset;
106 polygonOffset->setDepthSteps( 4.0 );
107 polygonOffset->setScaleFactor( 1.1 );
108 renderStateSet->addRenderState( polygonOffset );
111 Qt3DRender::QRenderTarget *renderTarget = buildTextures();
113 renderTargetSelector->setTarget( renderTarget );
118 return mEntityCastingShadowsLayer;
124 mMapTexture->setSize( width, height );
Qt3DRender::QSubtreeEnabler * mRendererEnabler
virtual void setEnabled(bool enable)
Enable or disable via enable the render view sub tree.
QgsAbstractRenderView(const QString &viewName)
Constructor for QgsAbstractRenderView with the specified parent object.
Qt3DRender::QLayer * entityCastingShadowsLayer() const
Returns the layer to be used by entities to be included in this renderview.
void setMapSize(int width, int height)
Update shadow depth texture size.
void setEnabled(bool enable) override
Enable or disable via enable the renderview sub tree.
QgsShadowRenderView(const QString &viewName)
Default constructor.
Qt3DRender::QTexture2D * mapTexture() const
Returns shadow depth texture.