aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickrhiitem.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickrhiitem.h')
-rw-r--r--src/quick/items/qquickrhiitem.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/quick/items/qquickrhiitem.h b/src/quick/items/qquickrhiitem.h
new file mode 100644
index 0000000000..78bfb9fe4b
--- /dev/null
+++ b/src/quick/items/qquickrhiitem.h
@@ -0,0 +1,124 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKRHIITEM_H
+#define QQUICKRHIITEM_H
+
+#include <QtQuick/QQuickItem>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickRhiItem;
+class QQuickRhiItemPrivate;
+class QQuickRhiItemNode;
+class QRhi;
+class QRhiCommandBuffer;
+class QRhiTexture;
+class QRhiRenderBuffer;
+class QRhiRenderTarget;
+
+class Q_QUICK_EXPORT QQuickRhiItemRenderer
+{
+public:
+ QQuickRhiItemRenderer();
+ virtual ~QQuickRhiItemRenderer();
+
+protected:
+ virtual void initialize(QRhiCommandBuffer *cb) = 0;
+ virtual void synchronize(QQuickRhiItem *item) = 0;
+ virtual void render(QRhiCommandBuffer *cb) = 0;
+
+ void update();
+
+ QRhi *rhi() const;
+ QRhiTexture *colorTexture() const;
+ QRhiRenderBuffer *msaaColorBuffer() const;
+ QRhiTexture *resolveTexture() const;
+ QRhiRenderBuffer *depthStencilBuffer() const;
+ QRhiRenderTarget *renderTarget() const;
+
+private:
+ QQuickRhiItemNode *node;
+ friend class QQuickRhiItem;
+ friend class QQuickRhiItemNode;
+
+ Q_DISABLE_COPY_MOVE(QQuickRhiItemRenderer)
+};
+
+class Q_QUICK_EXPORT QQuickRhiItem : public QQuickItem
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QQuickRhiItem)
+
+ Q_PROPERTY(int sampleCount READ sampleCount WRITE setSampleCount NOTIFY sampleCountChanged FINAL)
+ Q_PROPERTY(TextureFormat colorBufferFormat READ colorBufferFormat WRITE setColorBufferFormat NOTIFY colorBufferFormatChanged FINAL)
+ Q_PROPERTY(bool mirrorVertically READ isMirrorVerticallyEnabled WRITE setMirrorVertically NOTIFY mirrorVerticallyChanged FINAL)
+ Q_PROPERTY(bool alphaBlending READ alphaBlending WRITE setAlphaBlending NOTIFY alphaBlendingChanged FINAL)
+ Q_PROPERTY(int fixedColorBufferWidth READ fixedColorBufferWidth WRITE setFixedColorBufferWidth NOTIFY fixedColorBufferWidthChanged FINAL)
+ Q_PROPERTY(int fixedColorBufferHeight READ fixedColorBufferHeight WRITE setFixedColorBufferHeight NOTIFY fixedColorBufferHeightChanged FINAL)
+ Q_PROPERTY(QSize effectiveColorBufferSize READ effectiveColorBufferSize NOTIFY effectiveColorBufferSizeChanged FINAL)
+
+public:
+ enum class TextureFormat {
+ RGBA8,
+ RGBA16F,
+ RGBA32F,
+ RGB10A2
+ };
+ Q_ENUM(TextureFormat)
+
+ explicit QQuickRhiItem(QQuickItem *parent = nullptr);
+ ~QQuickRhiItem() override;
+
+ int sampleCount() const;
+ void setSampleCount(int samples);
+
+ TextureFormat colorBufferFormat() const;
+ void setColorBufferFormat(TextureFormat format);
+
+ bool isMirrorVerticallyEnabled() const;
+ void setMirrorVertically(bool enable);
+
+ bool alphaBlending() const;
+ void setAlphaBlending(bool enable);
+
+ int fixedColorBufferWidth() const;
+ void setFixedColorBufferWidth(int width);
+ int fixedColorBufferHeight() const;
+ void setFixedColorBufferHeight(int height);
+
+ QSize effectiveColorBufferSize() const;
+
+ bool isTextureProvider() const override;
+ QSGTextureProvider *textureProvider() const override;
+
+Q_SIGNALS:
+ void sampleCountChanged();
+ void colorBufferFormatChanged();
+ void autoRenderTargetChanged();
+ void mirrorVerticallyChanged();
+ void alphaBlendingChanged();
+ void fixedColorBufferWidthChanged();
+ void fixedColorBufferHeightChanged();
+ void effectiveColorBufferSizeChanged();
+
+protected:
+ virtual QQuickRhiItemRenderer *createRenderer() = 0;
+
+ bool isAutoRenderTargetEnabled() const;
+ void setAutoRenderTarget(bool enabled);
+
+ QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
+ bool event(QEvent *) override;
+ void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
+ void releaseResources() override;
+
+private Q_SLOTS:
+ void invalidateSceneGraph();
+
+ friend class QQuickRhiItemNode;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKRHIITEM_H