1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQUICKRHIITEM_H
5#define QQUICKRHIITEM_H
6
7#include <QtQuick/QQuickItem>
8
9QT_BEGIN_NAMESPACE
10
11class QQuickRhiItem;
12class QQuickRhiItemPrivate;
13class QQuickRhiItemNode;
14class QRhi;
15class QRhiCommandBuffer;
16class QRhiTexture;
17class QRhiRenderBuffer;
18class QRhiRenderTarget;
19
20class Q_QUICK_EXPORT QQuickRhiItemRenderer
21{
22public:
23 QQuickRhiItemRenderer();
24 virtual ~QQuickRhiItemRenderer();
25
26protected:
27 virtual void initialize(QRhiCommandBuffer *cb) = 0;
28 virtual void synchronize(QQuickRhiItem *item) = 0;
29 virtual void render(QRhiCommandBuffer *cb) = 0;
30
31 void update();
32
33 QRhi *rhi() const;
34 QRhiTexture *colorTexture() const;
35 QRhiRenderBuffer *msaaColorBuffer() const;
36 QRhiTexture *resolveTexture() const;
37 QRhiRenderBuffer *depthStencilBuffer() const;
38 QRhiRenderTarget *renderTarget() const;
39
40private:
41 QQuickRhiItemNode *node;
42 friend class QQuickRhiItem;
43 friend class QQuickRhiItemNode;
44
45 Q_DISABLE_COPY_MOVE(QQuickRhiItemRenderer)
46};
47
48class Q_QUICK_EXPORT QQuickRhiItem : public QQuickItem
49{
50 Q_OBJECT
51 Q_DECLARE_PRIVATE(QQuickRhiItem)
52
53 Q_PROPERTY(int sampleCount READ sampleCount WRITE setSampleCount NOTIFY sampleCountChanged FINAL)
54 Q_PROPERTY(TextureFormat colorBufferFormat READ colorBufferFormat WRITE setColorBufferFormat NOTIFY colorBufferFormatChanged FINAL)
55 Q_PROPERTY(bool mirrorVertically READ isMirrorVerticallyEnabled WRITE setMirrorVertically NOTIFY mirrorVerticallyChanged FINAL)
56 Q_PROPERTY(bool alphaBlending READ alphaBlending WRITE setAlphaBlending NOTIFY alphaBlendingChanged FINAL)
57 Q_PROPERTY(int fixedColorBufferWidth READ fixedColorBufferWidth WRITE setFixedColorBufferWidth NOTIFY fixedColorBufferWidthChanged FINAL)
58 Q_PROPERTY(int fixedColorBufferHeight READ fixedColorBufferHeight WRITE setFixedColorBufferHeight NOTIFY fixedColorBufferHeightChanged FINAL)
59 Q_PROPERTY(QSize effectiveColorBufferSize READ effectiveColorBufferSize NOTIFY effectiveColorBufferSizeChanged FINAL)
60
61public:
62 enum class TextureFormat {
63 RGBA8,
64 RGBA16F,
65 RGBA32F,
66 RGB10A2
67 };
68 Q_ENUM(TextureFormat)
69
70 explicit QQuickRhiItem(QQuickItem *parent = nullptr);
71 ~QQuickRhiItem() override;
72
73 int sampleCount() const;
74 void setSampleCount(int samples);
75
76 TextureFormat colorBufferFormat() const;
77 void setColorBufferFormat(TextureFormat format);
78
79 bool isMirrorVerticallyEnabled() const;
80 void setMirrorVertically(bool enable);
81
82 bool alphaBlending() const;
83 void setAlphaBlending(bool enable);
84
85 int fixedColorBufferWidth() const;
86 void setFixedColorBufferWidth(int width);
87 int fixedColorBufferHeight() const;
88 void setFixedColorBufferHeight(int height);
89
90 QSize effectiveColorBufferSize() const;
91
92 bool isTextureProvider() const override;
93 QSGTextureProvider *textureProvider() const override;
94
95Q_SIGNALS:
96 void sampleCountChanged();
97 void colorBufferFormatChanged();
98 void autoRenderTargetChanged();
99 void mirrorVerticallyChanged();
100 void alphaBlendingChanged();
101 void fixedColorBufferWidthChanged();
102 void fixedColorBufferHeightChanged();
103 void effectiveColorBufferSizeChanged();
104
105protected:
106 virtual QQuickRhiItemRenderer *createRenderer() = 0;
107
108 bool isAutoRenderTargetEnabled() const;
109 void setAutoRenderTarget(bool enabled);
110
111 QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
112 bool event(QEvent *) override;
113 void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
114 void releaseResources() override;
115
116private Q_SLOTS:
117 void invalidateSceneGraph();
118
119 friend class QQuickRhiItemNode;
120};
121
122QT_END_NAMESPACE
123
124#endif // QQUICKRHIITEM_H
125

Provided by KDAB

Privacy Policy
Learn to use CMake with our Intro Training
Find out more

source code of qtdeclarative/src/quick/items/qquickrhiitem.h