Qt 6.x
The Qt SDK
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 <QtQuick3DRuntimeRender/private/qssgrendercontextcore_p.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 <optional>
30
32
34
35
38struct QSSGRenderLayer;
39
41{
43public:
44 explicit QQuick3DSceneRenderer(const std::shared_ptr<QSSGRenderContextInterface> &rci);
46
48 {
49 return environment.useBuiltinTonemapper() ? QSSGRenderLayer::TonemapMode(environment.tonemapMode())
51 }
52
53protected:
55 void beginFrame();
56 void endFrame();
57 void rhiPrepare(const QRect &viewport, qreal displayPixelRatio);
58 void rhiRender();
59 void synchronize(QQuick3DViewport *view3D, const QSize &size, float dpr);
61 QSize surfaceSize() const { return m_surfaceSize; }
63
64 std::optional<QSSGRenderRay> getRayFromViewportPos(const QPointF &pos);
67 PickResultList syncPickAll(const QSSGRenderRay &ray);
68
69 void setGlobalPickingEnabled(bool isEnabled);
70
72
73private:
74 void releaseAaDependentRhiResources();
75 void updateLayerNode(QQuick3DViewport *view3D, const QList<QSSGRenderGraphObject *> &resourceLoaders);
76 void addNodeToLayer(QSSGRenderNode *node);
77 void removeNodeFromLayer(QSSGRenderNode *node);
78 std::shared_ptr<QSSGRenderContextInterface> m_sgContext;
79 QSSGRenderLayer *m_layer = nullptr;
81 QSize m_surfaceSize;
82 SGFramebufferObjectNode *fboNode = nullptr;
83 bool m_aaIsDirty = true;
84
85 // RHI
86 QRhiTexture *m_texture = nullptr;
87 // the rt is set up to output into m_texture or m_ssaaTexture or m_msaaRenderBuffer(+resolve into m_texture)
88 QRhiTextureRenderTarget *m_textureRenderTarget = nullptr;
89 QRhiRenderPassDescriptor *m_textureRenderPassDescriptor = nullptr;
90 // used by the draw quad that does m_ssaaTexture -> m_texture
91 QRhiTextureRenderTarget *m_ssaaTextureToTextureRenderTarget = nullptr;
92 QRhiRenderPassDescriptor *m_ssaaTextureToTextureRenderPassDescriptor = nullptr;
93 QRhiRenderBuffer *m_msaaRenderBuffer = nullptr;
94 QRhiTexture *m_ssaaTexture = nullptr;
95 QRhiTexture *m_temporalAATexture = nullptr;
96 QRhiTexture *m_prevTempAATexture = nullptr;
97 QRhiTextureRenderTarget *m_temporalAARenderTarget = nullptr;
98 QRhiRenderPassDescriptor *m_temporalAARenderPassDescriptor = nullptr;
99 QRhiRenderBuffer *m_depthStencilBuffer = nullptr;
100 bool m_textureNeedsFlip = true;
101 QSSGRenderLayer::Background m_backgroundMode;
102 QColor m_userBackgroundColor = Qt::black;
103 QColor m_linearBackgroundColor = Qt::black;
104 QColor m_tonemappedBackgroundColor = Qt::black;
105 int m_samples = 1;
106 QSSGRhiEffectSystem *m_effectSystem = nullptr;
107
108 QPointer<QQuick3DRenderStats> m_renderStats;
109
110 QSSGRenderNode *m_sceneRootNode = nullptr;
111 QSSGRenderNode *m_importRootNode = nullptr;
112
113 float m_ssaaMultiplier = 1.5f;
114
115 bool m_prepared = false;
116
117 int requestedFramesCount = 0;
118 bool m_postProcessingStack = false;
120
124 friend class QQuick3DViewport;
126};
127
129Q_QUICK3D_EXPORT void updateLayerNodeHelper(const QQuick3DViewport &view3D, QSSGRenderLayer &layerNode, bool &aaIsDirty, bool &temporalIsDirty, float &ssaaMultiplier);
130}
131
133{
135
136public:
138 ~SGFramebufferObjectNode() override;
139
140 void scheduleRender();
141
142 QSGTexture *texture() const override;
143
144 void preprocess() override;
145
146public Q_SLOTS:
147 void render();
148
149 void handleScreenChange();
150
151public:
155
158
160};
161
163{
164public:
166 void prepare() override;
167 StateFlags changedStates() const override;
168 void render(const RenderState *state) override;
169 void releaseResources() override;
170 RenderingFlags flags() const override;
171public:
174};
175
177{
179public:
182 Overlay
183 };
186
187 QQuick3DSceneRenderer *renderer() { return m_renderer; }
188 void setViewport(const QRectF &viewport);
189
190 void requestRender();
191 void setVisibility(bool visible);
192
193private Q_SLOTS:
194 void prepare();
195 void render();
196
197private:
198 QQuick3DSceneRenderer *m_renderer = nullptr;
199 QQuickWindow *m_window = nullptr;
201 QRectF m_viewport;
202 bool m_isVisible = true;
203 QRhiTexture *m_rhiTexture = nullptr;
204 bool renderPending = false;
205};
206
208
209#endif // QSSGSCENERENDERER_H
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition qcolor.h:31
Definition qlist.h:74
\inmodule QtCore
Definition qobject.h:90
\inmodule QtCore\reentrant
Definition qpoint.h:214
\inmodule QtCore
Definition qpointer.h:18
QQuick3DSceneRenderer * renderer()
void setViewport(const QRectF &viewport)
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
QSSGRenderPickResult syncPickOne(const QSSGRenderRay &ray, QSSGRenderNode *node)
QRhiTexture * renderToRhiTexture(QQuickWindow *qw)
void rhiPrepare(const QRect &viewport, qreal displayPixelRatio)
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()
QSSGRenderPickResult syncPick(const QSSGRenderRay &ray)
\qmltype Window \instantiates QQuickWindow \inqmlmodule QtQuick
\inmodule QtCore\reentrant
Definition qrect.h:483
\inmodule QtCore\reentrant
Definition qrect.h:30
\inmodule QtGui
Definition qrhi.h:1071
\inmodule QtGui
Definition qrhi.h:1119
\inmodule QtGui
Definition qrhi.h:1161
\inmodule QtGui
Definition qrhi.h:883
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]
Q_QUICK3D_EXPORT void updateLayerNodeHelper(const QQuick3DViewport &view3D, QSSGRenderLayer &layerNode, bool &aaIsDirty, bool &temporalIsDirty, float &ssaaMultiplier)
Combined button and popup list for selecting options.
@ black
Definition qnamespace.h:29
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:92
view viewport() -> scroll(dx, dy, deviceRect)
aWidget window() -> setWindowTitle("New Window Title")
[2]