Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquick3dscenerenderer_p.h
Go to the documentation of this file.
1// Copyright (C) 2019 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QSSGSCENERENDERER_H
5#define QSSGSCENERENDERER_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <ssg/qssgrendercontextcore.h>
19
20#include <qsgtextureprovider.h>
21#include <qsgrendernode.h>
22#include <QSGSimpleTextureNode>
23
24#include <QtQuick3D/private/qquick3dviewport_p.h>
25#include <QtQuick3DRuntimeRender/private/qssgrenderlayer_p.h>
26#include <QtQuick3DRuntimeRender/private/qssgrhieffectsystem_p.h>
27#include <QtQuick3DRuntimeRender/private/qssgrenderer_p.h>
28
29#include <QtCore/qpointer.h>
30
31#include <optional>
32
34
36
37
40struct QSSGRenderLayer;
41
43{
44 using PickResultList = QVarLengthArray<QSSGRenderPickResult, 20>;
45public:
46 explicit QQuick3DSceneRenderer(const std::shared_ptr<QSSGRenderContextInterface> &rci);
48
50 {
51 if (environment.useBuiltinTonemapper())
52 return QSSGRenderLayer::TonemapMode(environment.tonemapMode());
53
54 // Special case for the extend scene environment...
57 }
58
59protected:
61 void beginFrame();
62 void endFrame();
63 void rhiPrepare(const QRect &viewport, qreal displayPixelRatio);
64 void rhiRender();
65 void synchronize(QQuick3DViewport *view3D, const QSize &size, float dpr);
67 QSize surfaceSize() const { return m_surfaceSize; }
69
70 std::optional<QSSGRenderRay> getRayFromViewportPos(const QPointF &pos);
71 PickResultList syncPick(const QSSGRenderRay &ray);
72 PickResultList syncPickOne(const QSSGRenderRay &ray, QSSGRenderNode *node);
73 PickResultList syncPickSubset(const QSSGRenderRay &ray, QVarLengthArray<QSSGRenderNode *> subset);
74 PickResultList syncPickAll(const QSSGRenderRay &ray);
75
76 void setGlobalPickingEnabled(bool isEnabled);
77
79
80private:
81 void releaseAaDependentRhiResources();
82 void updateLayerNode(QQuick3DViewport *view3D, const QList<QSSGRenderGraphObject *> &resourceLoaders);
83 void addNodeToLayer(QSSGRenderNode *node);
84 void removeNodeFromLayer(QSSGRenderNode *node);
85 std::shared_ptr<QSSGRenderContextInterface> m_sgContext;
86 QSSGRenderLayer *m_layer = nullptr;
87 QPointer<QQuick3DWindowAttachment> winAttacment;
88 QSize m_surfaceSize;
89 SGFramebufferObjectNode *fboNode = nullptr;
90 bool m_aaIsDirty = true;
91
92 // RHI
93 QRhiTexture *m_texture = nullptr;
94 // the rt is set up to output into m_texture or m_ssaaTexture or m_msaaRenderBuffer(+resolve into m_texture)
95 QRhiTextureRenderTarget *m_textureRenderTarget = nullptr;
96 QRhiRenderPassDescriptor *m_textureRenderPassDescriptor = nullptr;
97 // used by the draw quad that does m_ssaaTexture -> m_texture
98 QRhiTextureRenderTarget *m_ssaaTextureToTextureRenderTarget = nullptr;
99 QRhiRenderPassDescriptor *m_ssaaTextureToTextureRenderPassDescriptor = nullptr;
100 QRhiRenderBuffer *m_msaaRenderBuffer = nullptr;
101 QRhiTexture *m_msaaMultiViewRenderBuffer = nullptr;
102 QRhiTexture *m_ssaaTexture = nullptr;
103 QRhiTexture *m_temporalAATexture = nullptr;
104 QRhiTexture *m_prevTempAATexture = nullptr;
105 QRhiTextureRenderTarget *m_temporalAARenderTarget = nullptr;
106 QRhiRenderPassDescriptor *m_temporalAARenderPassDescriptor = nullptr;
107 QRhiRenderBuffer *m_depthStencilBuffer = nullptr;
108 QRhiTexture *m_multiViewDepthStencilBuffer = nullptr;
109 bool m_textureNeedsFlip = true;
110 QSSGRenderLayer::Background m_backgroundMode;
111 QColor m_userBackgroundColor = Qt::black;
112 QColor m_linearBackgroundColor = Qt::black;
113 QColor m_tonemappedBackgroundColor = Qt::black;
114 int m_samples = 1;
115 QSSGRhiEffectSystem *m_effectSystem = nullptr;
116
117 QPointer<QQuick3DRenderStats> m_renderStats;
118
119 QSSGRenderNode *m_sceneRootNode = nullptr;
120 QSSGRenderNode *m_importRootNode = nullptr;
121
122 float m_ssaaMultiplier = 1.5f;
123
124 bool m_prepared = false;
125
126 int requestedFramesCount = 0;
127 bool m_postProcessingStack = false;
129
133 friend class QQuick3DViewport;
135};
136
137class Q_QUICK3D_EXPORT QQuick3DRenderLayerHelpers
138{
139public:
140 static void updateLayerNodeHelper(const QQuick3DViewport &view3D, QSSGRenderLayer &layerNode, bool &aaIsDirty, bool &temporalIsDirty, float &ssaaMultiplier);
141};
142
144{
146
147public:
149 ~SGFramebufferObjectNode() override;
150
151 void scheduleRender();
152
153 QSGTexture *texture() const override;
154
155 void preprocess() override;
156
157public Q_SLOTS:
158 void render();
159
160 void handleScreenChange();
161
162public:
166
169
171};
172
174{
175public:
177 void prepare() override;
178 StateFlags changedStates() const override;
179 void render(const RenderState *state) override;
180 void releaseResources() override;
181 RenderingFlags flags() const override;
182public:
185};
186
188{
190public:
197
198 QQuick3DSceneRenderer *renderer() { return m_renderer; }
199 void setViewport(const QRectF &viewport);
200
201 void requestRender();
202 void setVisibility(bool visible);
203
204 void preSynchronize();
205
206private Q_SLOTS:
207 void prepare();
208 void render();
209
210private:
211 QQuick3DSceneRenderer *m_renderer = nullptr;
212 QQuickWindow *m_window = nullptr;
213 QRectF m_viewport;
214 bool m_isVisible = true;
215 QRhiTexture *m_rhiTexture = nullptr;
216 bool renderPending = false;
217};
218
220
221#endif // QSSGSCENERENDERER_H
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition qcolor.h:31
\inmodule QtCore
Definition qobject.h:103
\inmodule QtCore\reentrant
Definition qpoint.h:217
QQuick3DSceneRenderer * renderer()
void setViewport(const QRectF &viewport)
QQuick3DSGDirectRenderer(QQuick3DSceneRenderer *renderer, QQuickWindow *window, QQuick3DSGDirectRendererMode mode=Underlay)
void render(const RenderState *state) override
This function is called by the renderer and should paint this node with directly invoking commands in...
void releaseResources() override
This function is called when all custom graphics resources allocated by this node have to be freed im...
RenderingFlags flags() const override
void prepare() override
Called from the frame preparation phase.
QQuick3DSceneRenderer * renderer
StateFlags changedStates() const override
When the underlying rendering API is OpenGL, this function should return a mask where each bit repres...
QQuick3DEnvironmentTonemapModes tonemapMode
QRhiTexture * renderToRhiTexture(QQuickWindow *qw)
PickResultList syncPick(const QSSGRenderRay &ray)
QQuick3DSceneRenderer(const std::shared_ptr< QSSGRenderContextInterface > &rci)
void rhiPrepare(const QRect &viewport, qreal displayPixelRatio)
PickResultList syncPickSubset(const QSSGRenderRay &ray, QVarLengthArray< QSSGRenderNode * > subset)
void synchronize(QQuick3DViewport *view3D, const QSize &size, float dpr)
std::optional< QSSGRenderRay > getRayFromViewportPos(const QPointF &pos)
PickResultList syncPickAll(const QSSGRenderRay &ray)
static QSSGRenderLayer::TonemapMode getTonemapMode(const QQuick3DSceneEnvironment &environment)
void setGlobalPickingEnabled(bool isEnabled)
QQuick3DRenderStats * renderStats()
PickResultList syncPickOne(const QSSGRenderRay &ray, QSSGRenderNode *node)
\qmltype Window \instantiates QQuickWindow \inqmlmodule QtQuick
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore\reentrant
Definition qrect.h:30
\inmodule QtGui
Definition qrhi.h:1094
\inmodule QtGui
Definition qrhi.h:1142
\inmodule QtGui
Definition qrhi.h:1184
\inmodule QtGui
Definition qrhi.h:895
The QSGRenderNode class represents a set of custom rendering commands targeting the graphics API that...
The QSGSimpleTextureNode class is provided for convenience to easily draw textured content using the ...
The QSGTextureProvider class encapsulates texture based entities in QML.
\inmodule QtQuick
Definition qsgtexture.h:20
\inmodule QtCore
Definition qsize.h:25
QQuick3DSceneRenderer * renderer
QSGTexture * texture() const override
Returns a pointer to the texture object.
void preprocess() override
Override this function to do processing on the node before it is rendered.
else opt state
[0]
Combined button and popup list for selecting options.
@ black
Definition qnamespace.h:30
GLenum mode
GLenum GLuint GLintptr GLsizeiptr size
[1]
#define Q_QUICK3D_PROFILE_ID
static QT_BEGIN_NAMESPACE qreal dpr(const QWindow *w)
#define Q_OBJECT
#define Q_SLOTS
double qreal
Definition qtypes.h:187
view viewport() -> scroll(dx, dy, deviceRect)
aWidget window() -> setWindowTitle("New Window Title")
[2]