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
qquick3dshaderutils_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QQUICK3DSHADERUTILS_H
5#define QQUICK3DSHADERUTILS_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 <QtQuick3D/qtquick3dglobal.h>
19#include <QtQuick3D/private/qquick3dobject_p.h>
20#include <QtQuick3D/private/qquick3dtexture_p.h>
21#include <QtQuick3D/private/qquick3dmaterial_p.h>
22
23#include <QtQuick3DUtils/private/qssgrenderbasetypes_p.h>
24
25#include <QtQuick3DRuntimeRender/private/qssgrendercommands_p.h>
26
28
30class QQmlContext;
31
32namespace QSSGShaderUtils {
33
34using MetaTypeList = QList<QMetaType::Type>;
35using ResolveFunction = bool (*)(const QUrl &url, const QQmlContext *context, QByteArray &shaderData, QByteArray &shaderPathKey);
36Q_QUICK3D_EXPORT void setResolveFunction(ResolveFunction fn);
37Q_QUICK3D_EXPORT QByteArray resolveShader(const QUrl &fileUrl, const QQmlContext *context, QByteArray &shaderPathKey);
38Q_QUICK3D_EXPORT MetaTypeList supportedMetatypes();
39
40
41template<QMetaType::Type>
43{
44};
45
49}
50
51class Q_QUICK3D_EXPORT QQuick3DShaderUtilsTextureInput : public QObject
52{
54 Q_PROPERTY(QQuick3DTexture *texture READ texture WRITE setTexture NOTIFY textureChanged)
55 Q_PROPERTY(bool enabled MEMBER enabled NOTIFY enabledChanged)
56
57 QML_NAMED_ELEMENT(TextureInput)
58
59public:
62 QQuick3DTexture *m_texture = nullptr;
63 bool enabled = true;
66 {
67 return m_texture;
68 }
69
70public Q_SLOTS:
71 void setTexture(QQuick3DTexture *texture);
72
76};
77
78class Q_QUICK3D_EXPORT QQuick3DShaderUtilsBuffer : public QObject
79{
82 Q_PROPERTY(TextureFilterOperation textureFilterOperation READ textureFilterOperation WRITE setTextureFilterOperation)
83 Q_PROPERTY(TextureCoordOperation textureCoordOperation READ textureCoordOperation WRITE setTextureCoordOperation)
84 Q_PROPERTY(float sizeMultiplier MEMBER sizeMultiplier)
85 Q_PROPERTY(AllocateBufferFlagValues bufferFlags READ bufferFlags WRITE setBufferFlags)
87
89
90public:
92 ~QQuick3DShaderUtilsBuffer() override = default;
93
94 enum class TextureFilterOperation // must match QSSGRenderTextureFilterOp
95 {
96 Unknown = 0,
97 Nearest,
98 Linear
99 };
100 Q_ENUM(TextureFilterOperation)
101
102 enum class TextureCoordOperation // must match QSSGRenderTextureCoordOp
103 {
104 Unknown = 0,
107 Repeat
108 };
109 Q_ENUM(TextureCoordOperation)
110
112 {
113 None = 0,
114 SceneLifetime = 1
115 };
117
118 enum class TextureFormat {
119 Unknown = 0,
120 RGBA8,
121 RGBA16F,
122 RGBA32F,
123 R8,
124 R16,
125 R16F,
126 R32F
127 };
128 Q_ENUM(TextureFormat)
129
133
134 TextureCoordOperation textureCoordOperation() const { return TextureCoordOperation(command.m_texCoordOp); }
135 void setTextureCoordOperation(TextureCoordOperation texCoordOp) { command.m_texCoordOp = QSSGRenderTextureCoordOp(texCoordOp); }
136 float &sizeMultiplier = command.m_sizeMultiplier;
137 QSSGCommand *getCommand() { return &command; }
138
139 TextureFormat format() const;
140 void setFormat(TextureFormat format);
141
142 AllocateBufferFlagValues bufferFlags() const { return AllocateBufferFlagValues(int(command.m_bufferFlags)); }
143 void setBufferFlags(AllocateBufferFlagValues flag) { command.m_bufferFlags = quint32(flag);}
144
145 QByteArray &name = command.m_name;
146
149};
150
151class Q_QUICK3D_EXPORT QQuick3DShaderUtilsRenderCommand : public QObject
152{
154
155 QML_NAMED_ELEMENT(Command)
156
157public:
160 virtual QSSGCommand *getCommand() { Q_ASSERT(0); return nullptr; }
161 virtual int bufferCount() const { return 0; }
162 virtual QQuick3DShaderUtilsBuffer *bufferAt(int idx) const { Q_UNUSED(idx); return nullptr; }
163};
164
166{
170
171 QML_NAMED_ELEMENT(BufferInput)
172
173public:
175 ~QQuick3DShaderUtilsBufferInput() override = default;
177 QByteArray &sampler = command.m_samplerName;
178 QSSGCommand *getCommand() override { return &command; }
179
180 int bufferCount() const override { return (m_buffer != nullptr) ? 1 : 0; }
181 QQuick3DShaderUtilsBuffer *bufferAt(int idx) const override
182 {
183 Q_ASSERT(idx < 1 && idx >= 0);
184 return (m_buffer && idx == 0) ? m_buffer : nullptr;
185 }
186
187 QQuick3DShaderUtilsBuffer *buffer() const { return m_buffer; }
189 if (m_buffer == buffer)
190 return;
191
192 if (buffer) {
193 Q_ASSERT(!buffer->name.isEmpty());
194 command.m_bufferName = buffer->name;
195 }
196 m_buffer = buffer;
197 }
198
199 QQuick3DShaderUtilsBuffer *m_buffer = nullptr;
200
201};
202
204{
208
209 QML_NAMED_ELEMENT(SetUniformValue)
210
211public:
213 ~QQuick3DShaderUtilsApplyValue() override = default;
214 QSSGCommand *getCommand() override { return &command; }
215 QSSGApplyValue command { };
216 QVariant &value = command.m_value;
217 QByteArray &target = command.m_propertyName;
218};
219
220class Q_QUICK3D_EXPORT QQuick3DShaderUtilsRenderPass : public QObject
221{
223 Q_PROPERTY(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> commands READ commands)
226
228
229public:
231 ~QQuick3DShaderUtilsRenderPass() override = default;
232
236 static void qmlCommandClear(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list);
237
241 static void qmlShaderClear(QQmlListProperty<QQuick3DShaderUtilsShader> *list);
242
245 QQuick3DShaderUtilsBuffer *outputBuffer = nullptr;
248
250 void changed();
251};
252
253class Q_QUICK3D_EXPORT QQuick3DShaderUtilsShader : public QObject
254{
256 Q_PROPERTY(QUrl shader MEMBER shader NOTIFY shaderChanged)
257 Q_PROPERTY(Stage stage MEMBER stage NOTIFY stageChanged)
258
259 QML_NAMED_ELEMENT(Shader)
260
261public:
263 virtual ~QQuick3DShaderUtilsShader() = default;
264 enum class Stage : quint8
265 {
266 Vertex = 0,
267 Fragment = 1
268 };
269 Q_ENUM(Stage)
270
271 QUrl shader;
272 Stage stage = Stage::Fragment;
273
277};
278
280
282
283#endif // QQUICK3DSHADERUTILS_H
\inmodule QtCore
Definition qbytearray.h:57
Definition qlist.h:75
\inmodule QtCore
Definition qmetatype.h:341
\inmodule QtCore
Definition qobject.h:103
The QQmlContext class defines a context within a QML engine.
Definition qqmlcontext.h:25
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:24
QQuick3DShaderUtilsBuffer * bufferAt(int idx) const override
void setBuffer(QQuick3DShaderUtilsBuffer *buffer)
QQuick3DShaderUtilsBuffer * buffer() const
QSSGCommand * getCommand() override
void setBufferFlags(AllocateBufferFlagValues flag)
void setTextureFilterOperation(TextureFilterOperation op)
void setTextureCoordOperation(TextureCoordOperation texCoordOp)
TextureFilterOperation textureFilterOperation() const
AllocateBufferFlagValues bufferFlags() const
TextureCoordOperation textureCoordOperation() const
~QQuick3DShaderUtilsRenderCommand() override=default
virtual QQuick3DShaderUtilsBuffer * bufferAt(int idx) const
\inmodule QtCore
Definition qurl.h:94
\inmodule QtCore
Definition qvariant.h:65
widget setFormat(format)
\qmltype Shader \inherits Object \inqmlmodule QtQuick3D
QList< QMetaType::Type > MetaTypeList
bool(*)(const QUrl &url, const QQmlContext *context, QByteArray &shaderData, QByteArray &shaderPathKey) ResolveFunction
QByteArray resolveShader(const QUrl &fileUrl, const QQmlContext *context, QByteArray &shaderPathKey)
QSSGRenderShaderValue::Type uniformType(QMetaType type)
void setResolveFunction(ResolveFunction fn)
QByteArray uniformTypeName(QMetaType type)
MetaTypeList supportedMetatypes()
Combined button and popup list for selecting options.
static void * context
typedef QByteArray(EGLAPIENTRYP PFNQGSGETDISPLAYSPROC)()
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
@ Repeat
@ None
Definition qhash.cpp:531
#define Q_DECLARE_OPAQUE_POINTER(POINTER)
Definition qmetatype.h:1517
GLuint index
[2]
GLuint sampler
GLsizei const GLubyte * commands
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLenum GLuint buffer
GLenum type
GLenum target
GLenum GLuint texture
GLuint name
GLint GLsizei GLsizei GLenum format
GLuint shader
Definition qopenglext.h:665
GLsizei GLsizei GLuint * shaders
Definition qopenglext.h:677
GLfloat GLfloat p
[1]
#define QML_NAMED_ELEMENT(NAME)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QSSGRenderTextureCoordOp
QSSGRenderTextureFilterOp
AllocateBufferFlagValues
#define Q_ENUM(x)
#define Q_PROPERTY(...)
#define Q_OBJECT
#define Q_SLOTS
#define Q_SIGNALS
#define Q_UNUSED(x)
unsigned int quint32
Definition qtypes.h:50
ptrdiff_t qsizetype
Definition qtypes.h:165
unsigned char quint8
Definition qtypes.h:46
QVideoFrameFormat::PixelFormat fmt
QT_BEGIN_NAMESPACE typedef uchar * output
#define explicit
QList< int > list
[14]
QUrl url("example.com")
[constructor-url-reference]
\qmltype MapCircle \instantiates QDeclarativeCircleMapItem \inqmlmodule QtLocation