54 Q_PROPERTY(QQuick3DTexture *texture READ texture WRITE setTexture NOTIFY textureChanged)
55 Q_PROPERTY(
bool enabled MEMBER enabled NOTIFY enabledChanged)
57 QML_NAMED_ELEMENT(TextureInput)
60 explicit QQuick3DShaderUtilsTextureInput(QObject *p =
nullptr);
61 virtual ~QQuick3DShaderUtilsTextureInput();
62 QQuick3DTexture *m_texture =
nullptr;
65 QQuick3DTexture *texture()
const
71 void setTexture(QQuick3DTexture *texture);
74 void textureChanged();
75 void enabledChanged();
81 Q_PROPERTY(TextureFormat format READ format WRITE setFormat NOTIFY changed)
82 Q_PROPERTY(TextureFilterOperation textureFilterOperation READ textureFilterOperation WRITE setTextureFilterOperation NOTIFY changed)
83 Q_PROPERTY(TextureCoordOperation textureCoordOperation READ textureCoordOperation WRITE setTextureCoordOperation NOTIFY changed)
84 Q_PROPERTY(
float sizeMultiplier MEMBER sizeMultiplier NOTIFY changed)
85 Q_PROPERTY(AllocateBufferFlagValues bufferFlags READ bufferFlags WRITE setBufferFlags NOTIFY changed)
86 Q_PROPERTY(QByteArray name MEMBER name NOTIFY changed)
88 QML_NAMED_ELEMENT(Buffer)
91 QQuick3DShaderUtilsBuffer() =
default;
92 ~QQuick3DShaderUtilsBuffer() override =
default;
94 enum class TextureFilterOperation
100 Q_ENUM(TextureFilterOperation)
102 enum class TextureCoordOperation
109 Q_ENUM(TextureCoordOperation)
111 enum class AllocateBufferFlagValues
116 Q_ENUM(AllocateBufferFlagValues)
118 enum class TextureFormat {
128 Q_ENUM(TextureFormat)
130 QSSGAllocateBuffer command {};
131 TextureFilterOperation textureFilterOperation()
const {
return TextureFilterOperation(command.m_filterOp); }
132 void setTextureFilterOperation(TextureFilterOperation op);
134 TextureCoordOperation textureCoordOperation()
const {
return TextureCoordOperation(command.m_texCoordOp); }
135 void setTextureCoordOperation(TextureCoordOperation texCoordOp);
136 float &sizeMultiplier = command.m_sizeMultiplier;
137 QSSGCommand *cloneCommand() {
return new QSSGAllocateBuffer(command); }
139 TextureFormat format()
const;
140 void setFormat(TextureFormat format);
142 AllocateBufferFlagValues bufferFlags()
const {
return AllocateBufferFlagValues(
int(command.m_bufferFlags)); }
143 void setBufferFlags(AllocateBufferFlagValues flag);
145 QByteArray &name = command.m_name;
147 static QSSGRenderTextureFormat::Format mapTextureFormat(QQuick3DShaderUtilsBuffer::TextureFormat fmt);
148 static QQuick3DShaderUtilsBuffer::TextureFormat mapRenderTextureFormat(QSSGRenderTextureFormat::Format fmt);
171 Q_PROPERTY(QQuick3DShaderUtilsBuffer *buffer READ buffer WRITE setBuffer)
172 Q_PROPERTY(QByteArray sampler MEMBER sampler)
174 QML_NAMED_ELEMENT(BufferInput)
177 QQuick3DShaderUtilsBufferInput() =
default;
178 ~QQuick3DShaderUtilsBufferInput() override =
default;
179 QSSGApplyBufferValue command { QByteArray(), QByteArray() };
180 QByteArray &sampler = command.m_samplerName;
181 QSSGCommand *cloneCommand() override {
return new QSSGApplyBufferValue(command); }
183 int bufferCount()
const override {
return (m_buffer !=
nullptr) ? 1 : 0; }
184 QQuick3DShaderUtilsBuffer *bufferAt(
int idx)
const override
186 Q_ASSERT(idx < 1 && idx >= 0);
187 return (m_buffer && idx == 0) ? m_buffer :
nullptr;
190 QQuick3DShaderUtilsBuffer *buffer()
const {
return m_buffer; }
191 void setBuffer(QQuick3DShaderUtilsBuffer *buffer) {
192 if (m_buffer == buffer)
196 Q_ASSERT(!buffer->name.isEmpty());
197 command.m_bufferName = buffer->name;
202 QQuick3DShaderUtilsBuffer *m_buffer =
nullptr;
209 Q_PROPERTY(QByteArray target MEMBER target)
210 Q_PROPERTY(QVariant value MEMBER value)
212 QML_NAMED_ELEMENT(SetUniformValue)
215 QQuick3DShaderUtilsApplyValue() =
default;
216 ~QQuick3DShaderUtilsApplyValue() override =
default;
217 QSSGCommand *cloneCommand() override {
return new QSSGApplyValue(command); }
218 QSSGApplyValue command { };
219 QVariant &value = command.m_value;
220 QByteArray &target = command.m_propertyName;
226 Q_PROPERTY(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> commands READ commands)
227 Q_PROPERTY(QQuick3DShaderUtilsBuffer *output MEMBER outputBuffer)
228 Q_PROPERTY(QQmlListProperty<QQuick3DShaderUtilsShader> shaders READ shaders)
230 QML_NAMED_ELEMENT(Pass)
233 QQuick3DShaderUtilsRenderPass() =
default;
234 ~QQuick3DShaderUtilsRenderPass() override =
default;
236 static void qmlAppendCommand(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list, QQuick3DShaderUtilsRenderCommand *command);
237 static QQuick3DShaderUtilsRenderCommand *qmlCommandAt(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list, qsizetype index);
238 static qsizetype qmlCommandCount(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list);
239 static void qmlCommandClear(QQmlListProperty<QQuick3DShaderUtilsRenderCommand> *list);
241 static void qmlAppendShader(QQmlListProperty<QQuick3DShaderUtilsShader> *list, QQuick3DShaderUtilsShader *shader);
242 static QQuick3DShaderUtilsShader *qmlShaderAt(QQmlListProperty<QQuick3DShaderUtilsShader> *list, qsizetype index);
243 static qsizetype qmlShaderCount(QQmlListProperty<QQuick3DShaderUtilsShader> *list);
244 static void qmlShaderClear(QQmlListProperty<QQuick3DShaderUtilsShader> *list);
246 QQmlListProperty<QQuick3DShaderUtilsRenderCommand> commands();
247 QVector<QQuick3DShaderUtilsRenderCommand *> m_commands;
248 QQuick3DShaderUtilsBuffer *outputBuffer =
nullptr;
249 QQmlListProperty<QQuick3DShaderUtilsShader> shaders();
250 QVarLengthArray<QQuick3DShaderUtilsShader *, 2> m_shaders;
259 Q_PROPERTY(QUrl shader MEMBER shader NOTIFY shaderChanged)
260 Q_PROPERTY(Stage stage MEMBER stage NOTIFY stageChanged)
262 QML_NAMED_ELEMENT(Shader)
265 QQuick3DShaderUtilsShader() =
default;
266 virtual ~QQuick3DShaderUtilsShader() =
default;
267 enum class Stage : quint8
275 Stage stage = Stage::Fragment;
278 void shaderChanged();