Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquick3drenderpass_p.h
Go to the documentation of this file.
1// Copyright (C) 2025 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QQUICK3DRENDERPASS_P_H
7#define QQUICK3DRENDERPASS_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtQuick3D/qtquick3dglobal.h>
21#include <QtQuick3D/private/qquick3dobject_p.h>
22#include <QtQuick3D/private/qquick3dshaderutils_p.h>
23
25
26class Q_QUICK3D_EXPORT QQuick3DRenderPass : public QQuick3DObject, public QQuick3DPropertyChangedTracker
27{
28 Q_OBJECT
29 Q_PROPERTY(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> commands READ commands)
30 Q_PROPERTY(MaterialModes materialMode READ materialMode WRITE setMaterialMode NOTIFY materialModeChanged)
31 Q_PROPERTY(QColor clearColor READ clearColor WRITE setClearColor NOTIFY clearColorChanged)
32 Q_PROPERTY(float depthClearValue READ depthClearValue WRITE setDepthClearValue NOTIFY depthClearValueChanged)
33 Q_PROPERTY(quint32 stencilClearValue READ stencilClearValue WRITE setStencilClearValue NOTIFY stencilClearValueChanged)
34 Q_PROPERTY(QQuick3DMaterial* overrideMaterial READ overrideMaterial WRITE setOverrideMaterial NOTIFY overrideMaterialChanged)
35 Q_PROPERTY(QUrl augmentShader READ augmentShader WRITE setAugmentShader NOTIFY augmentShaderChanged)
36 Q_PROPERTY(PassMode passMode READ passMode WRITE setPassMode NOTIFY passModeChanged)
37 Q_PROPERTY(RenderTargetFlags renderTargetFlags READ renderTargetFlags WRITE setRenderTargetFlags NOTIFY renderTargetFlagsChanged)
38 QML_NAMED_ELEMENT(RenderPass)
39 QML_ADDED_IN_VERSION(6, 11)
40public:
41 enum MaterialModes {
42 OriginalMaterial,
43 AugmentMaterial,
44 OverrideMaterial
45 };
46 Q_ENUM(MaterialModes)
47
48 enum PassMode {
49 UserPass,
50 SkyboxPass,
51 Item2DPass,
52 };
53 Q_ENUM(PassMode)
54
55 enum class RenderTargetFlag {
56 None = 0,
57 PreserveColorContents = 1 << 0,
58 PreserveDepthStencilContents = 1 << 1,
59 DoNotStoreDepthStencilContents = 1 << 2
60 };
61 Q_DECLARE_FLAGS(RenderTargetFlags, RenderTargetFlag)
62 Q_FLAGS(RenderTargetFlags)
63
64 explicit QQuick3DRenderPass(QQuick3DObject *parent = nullptr);
65
66 QQmlListProperty<QQuick3DShaderUtilsRenderCommand> commands();
67
68 QColor clearColor() const;
69 void setClearColor(const QColor &newClearColor);
70
71 MaterialModes materialMode() const;
72 void setMaterialMode(MaterialModes newMaterialMode);
73
74 QQuick3DMaterial *overrideMaterial() const;
75 void setOverrideMaterial(QQuick3DMaterial *newOverrideMaterial);
76
77 QUrl augmentShader() const;
78 void setAugmentShader(const QUrl &newAugmentShader);
79
80 PassMode passMode() const;
81 void setPassMode(PassMode newPassMode);
82
83 float depthClearValue() const;
84 void setDepthClearValue(float newDepthClearValue);
85
86 quint32 stencilClearValue() const;
87 void setStencilClearValue(quint32 newStencilClearValue);
88
89 void markAllDirty() override { m_dirtyAttributes = AllDirty; }
90
91 RenderTargetFlags renderTargetFlags() const;
92 void setRenderTargetFlags(RenderTargetFlags newRenderTargetFlags);
93
94Q_SIGNALS:
95 void outputChanged();
96 void materialModeChanged();
97 void clearColorChanged();
98 void overrideMaterialChanged();
99 void augmentShaderChanged();
100 void passModeChanged();
101 void depthClearValueChanged();
102 void stencilClearValueChanged();
103 void renderTargetFlagsChanged();
104
105protected:
106 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *node) override;
107 void itemChange(QQuick3DObject::ItemChange , const QQuick3DObject::ItemChangeData &) override;
108 void markTrackedPropertyDirty(QMetaProperty property, QQuick3DPropertyChangedTracker::DirtyPropertyHint hint) override;
109
110private Q_SLOTS:
111 void onMaterialDestroyed(QObject *object);
112 void onCommandChanged();
113
114private:
115 static void qmlAppendCommand(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list, QQuick3DShaderUtilsRenderCommand *command);
116 static QQuick3DShaderUtilsRenderCommand *qmlCommandAt(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list, qsizetype index);
117 static qsizetype qmlCommandCount(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list);
118 static void qmlCommandClear(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list);
119
120 enum Dirty {
121 TextureDirty = 0x1,
122 PropertyDirty = 0x2,
123 CommandsDirty = 0x8,
124 ClearDirty = 0x10,
125 MaterialModeDirty = 0x20,
126 OverrideMaterialDirty = 0x40,
127 AugmentShaderDirty = 0x80,
128 PassTypeDirty = 0x100
129 };
130
131 using DirtyT = std::underlying_type_t<Dirty>;
132 static constexpr DirtyT AllDirty { std::numeric_limits<DirtyT>::max() };
133
134 void updateSceneManager(QQuick3DSceneManager *sceneManager);
135 void markDirty(QQuick3DRenderPass::Dirty type, bool requestSecondaryUpdate = false);
136 void clearDirty(QQuick3DRenderPass::Dirty type);
137
138 quint32 m_dirtyAttributes = AllDirty;
139 QVector<QQuick3DShaderUtilsRenderCommand *> m_commands;
140 QColor m_clearColor = Qt::black;
141 MaterialModes m_materialMode = OriginalMaterial;
142 QQuick3DMaterial *m_overrideMaterial = nullptr;
143 bool m_overrideMaterialRefed = false;
144 QUrl m_augmentShader;
145 PassMode m_passMode = UserPass;
146 float m_depthClearValue = 1.0f;
147 quint32 m_stencilClearValue = 0;
148 RenderTargetFlags m_renderTargetFlags = RenderTargetFlag::None;
149};
150
151QT_END_NAMESPACE
152
153#endif // QQUICK3DRENDERPASS_P_H
Combined button and popup list for selecting options.