QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsdepthrenderview.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsdepthrenderview.cpp
3 --------------------------------------
4 Date : August 2022
5 Copyright : (C) 2022 by Benoit De Mezzo and (C) 2020 by Belgacem Nedjima
6 Email : benoit dot de dot mezzo at oslandia dot com
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#include "qgsdepthrenderview.h"
17
18#include "qgsdepthentity.h"
19
20#include <Qt3DRender/QCamera>
21#include <Qt3DRender/QCameraSelector>
22#include <Qt3DRender/QClearBuffers>
23#include <Qt3DRender/QCullFace>
24#include <Qt3DRender/QDepthTest>
25#include <Qt3DRender/QLayer>
26#include <Qt3DRender/QLayerFilter>
27#include <Qt3DRender/QRenderCapture>
28#include <Qt3DRender/QRenderStateSet>
29#include <Qt3DRender/QRenderTarget>
30#include <Qt3DRender/QRenderTargetSelector>
31#include <Qt3DRender/QTexture>
32#include <Qt3DRender/qsubtreeenabler.h>
33
34QgsDepthRenderView::QgsDepthRenderView( const QString &viewName, QSize size, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity )
35 : QgsAbstractRenderView( viewName )
36{
37 mLayer = new Qt3DRender::QLayer;
38 mLayer->setRecursive( true );
39 mLayer->setObjectName( mViewName + "::Layer" );
40
41 // depth rendering pass
42 buildRenderPass( size, forwardDepthTexture, rootSceneEntity );
43}
44
45void QgsDepthRenderView::updateWindowResize( int width, int height )
46{
47 mColorTexture->setSize( width, height );
48}
49
50Qt3DRender::QRenderTarget *QgsDepthRenderView::buildTextures( QSize size )
51{
52 // depth buffer render to copy pass
53 // Create a render target output for rendering color.
54 Qt3DRender::QRenderTargetOutput *colorOutput = new Qt3DRender::QRenderTargetOutput;
55 colorOutput->setAttachmentPoint( Qt3DRender::QRenderTargetOutput::Color0 );
56
57 // Create a texture to render into.
58 mColorTexture = new Qt3DRender::QTexture2D( colorOutput );
59 mColorTexture->setSize( size.width(), size.height() );
60 mColorTexture->setFormat( Qt3DRender::QAbstractTexture::RGB8_UNorm );
61 mColorTexture->setMinificationFilter( Qt3DRender::QAbstractTexture::Linear );
62 mColorTexture->setMagnificationFilter( Qt3DRender::QAbstractTexture::Linear );
63 mColorTexture->setObjectName( mViewName + "::mColorTexture" );
64
65 // Hook the texture up to our output, and the output up to this object.
66 colorOutput->setTexture( mColorTexture );
67
68 Qt3DRender::QRenderTarget *renderTarget = new Qt3DRender::QRenderTarget;
69 renderTarget->setObjectName( mViewName + "::RenderTarget" );
70 renderTarget->addOutput( colorOutput );
71
72 return renderTarget;
73}
74
75void QgsDepthRenderView::buildRenderPass( QSize size, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity )
76{
77 // depth buffer render to copy pass
78 Qt3DRender::QLayerFilter *layerFilter = new Qt3DRender::QLayerFilter( mRendererEnabler );
79 layerFilter->addLayer( mLayer );
80
81 Qt3DRender::QRenderTargetSelector *renderTargetSelector = new Qt3DRender::QRenderTargetSelector( layerFilter );
82
83 // build texture part
84 Qt3DRender::QRenderTarget *renderTarget = buildTextures( size );
85
86 renderTargetSelector->setTarget( renderTarget );
87
88 // Note: We do not a clear buffers node since we are drawing a quad that will override the buffer's content anyway
89 mDepthRenderCapture = new Qt3DRender::QRenderCapture( renderTargetSelector );
90
91 // entity used to draw the depth texture and convert it to rgb image
92 new QgsDepthEntity( forwardDepthTexture, mLayer, rootSceneEntity );
93}
Qt3DRender::QSubtreeEnabler * mRendererEnabler
QgsAbstractRenderView(const QString &viewName)
Constructor for QgsAbstractRenderView with the specified parent object.
void updateWindowResize(int width, int height) override
Called when 3D window is resized.
QgsDepthRenderView(const QString &viewName, QSize size, Qt3DRender::QTexture2D *forwardDepthTexture, Qt3DCore::QEntity *rootSceneEntity)
Constructor.