20#include <QCoreApplication>
21#include <QOffscreenSurface>
22#include <QSurfaceFormat>
23#include <QOpenGLFunctions>
25#include <Qt3DCore/QAspectEngine>
26#include <Qt3DLogic/QLogicAspect>
27#include <Qt3DRender/QCamera>
28#include <Qt3DRender/QCameraSelector>
29#include <Qt3DRender/QClearBuffers>
30#include <Qt3DRender/QRenderAspect>
31#include <Qt3DRender/QRenderCapture>
32#include <Qt3DRender/QRenderSettings>
33#include <Qt3DRender/QRenderTarget>
34#include <Qt3DRender/QRenderTargetOutput>
35#include <Qt3DRender/QRenderTargetSelector>
36#include <Qt3DRender/QRenderSurfaceSelector>
37#include <Qt3DRender/QTexture>
38#include <Qt3DRender/QViewport>
43 mCamera =
new Qt3DRender::QCamera;
44 mCamera->lens()->setPerspectiveProjection( 45.0f,
float( mSize.width() ) /
float( mSize.height() ), 0.1f, 1000.0f );
45 mCamera->setPosition( QVector3D( 0, 0, 20.0f ) );
46 mCamera->setUpVector( QVector3D( 0, 1, 0 ) );
47 mCamera->setViewCenter( QVector3D( 0, 0, 0 ) );
50 mAspectEngine =
new Qt3DCore::QAspectEngine();
52#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
53 mRenderAspect =
new Qt3DRender::QRenderAspect( Qt3DRender::QRenderAspect::Threaded );
55 mRenderAspect =
new Qt3DRender::QRenderAspect();
58 mLogicAspect =
new Qt3DLogic::QLogicAspect();
60 mAspectEngine->registerAspect( mRenderAspect );
61 mAspectEngine->registerAspect( mLogicAspect );
68 mRoot =
new Qt3DCore::QEntity;
69 mRenderSettings =
new Qt3DRender::QRenderSettings( mRoot );
70 mRoot->addComponent( mRenderSettings );
72 mCamera->setParent( mRoot );
76 mOffscreenSurface =
new QOffscreenSurface();
78 QSurfaceFormat format;
81 if ( QCoreApplication::instance() && QCoreApplication::instance()->testAttribute( Qt::AA_ShareOpenGLContexts ) )
83 format = QSurfaceFormat::defaultFormat();
88 format.setRenderableType( QSurfaceFormat::OpenGL );
90 format.setVersion( 4, 1 );
91 format.setProfile( QSurfaceFormat::CoreProfile );
93 format.setVersion( 4, 3 );
94 format.setProfile( QSurfaceFormat::CoreProfile );
96 format.setDepthBufferSize( 24 );
97 format.setSamples( 4 );
98 format.setStencilBufferSize( 8 );
101 mOffscreenSurface->setFormat( format );
102 mOffscreenSurface->create();
112 mAspectEngine->setRootEntity( Qt3DCore::QEntityPtr( mRoot ) );
118 delete mAspectEngine;
119 delete mOffscreenSurface;
127 mCamera->setAspectRatio(
float( mSize.width() ) /
float( mSize.height() ) );
146 mSceneRoot->setParent(
static_cast<Qt3DCore::QNode *
>(
nullptr ) );
151 mSceneRoot->setParent( mRoot );
158 return mRenderSettings;
173 return mOffscreenSurface;
void sizeChanged()
Emitted after a call to setSize()
QgsFrameGraph * mFrameGraph
Qt3DRender::QLayer * forwardRenderLayer()
Returns a layer object used to indicate that an entity will be rendered during the forward rendering ...
void setRenderCaptureEnabled(bool enabled)
Sets whether it will be possible to render to an image.
Qt3DRender::QFrameGraphNode * frameGraphRoot()
Returns the root of the frame graph object.
void setClearColor(const QColor &clearColor)
Sets the clear color of the scene (background color)
void setFrustumCullingEnabled(bool enabled)
Sets whether frustum culling is enabled.
void setShadowRenderingEnabled(bool enabled)
Sets whether the shadow rendering is enabled.
Qt3DRender::QLayer * castShadowsLayer()
Returns a layer object used to indicate that an entity will cast shadows.
void setSize(QSize s)
Sets the size of the buffers used for rendering.
void setSize(QSize s) override
Sets the size of the rendering area (in pixels)
void setClearColor(const QColor &color) override
Sets background color of the scene.
QSize size() const override
Returns size of the engine's rendering area in pixels.
void setRootEntity(Qt3DCore::QEntity *root) override
Sets root entity of the 3D scene.
~QgsOffscreen3DEngine() override
void setFrustumCullingEnabled(bool enabled) override
Sets whether frustum culling is enabled (this should make rendering faster by not rendering entities ...
Qt3DRender::QCamera * camera() override
Returns pointer to the engine's camera entity.
Qt3DRender::QRenderSettings * renderSettings() override
Returns access to the engine's render settings (the frame graph can be accessed from here)
QSurface * surface() const override
Returns the surface of the engine.