// Copyright (C) 2016 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 QQUICKFRAMEBUFFEROBJECT_H #define QQUICKFRAMEBUFFEROBJECT_H #include QT_BEGIN_NAMESPACE class QOpenGLFramebufferObject; class QQuickFramebufferObjectPrivate; class QSGFramebufferObjectNode; class Q_QUICK_EXPORT QQuickFramebufferObject : public QQuickItem { Q_OBJECT Q_DECLARE_PRIVATE(QQuickFramebufferObject) Q_PROPERTY(bool textureFollowsItemSize READ textureFollowsItemSize WRITE setTextureFollowsItemSize NOTIFY textureFollowsItemSizeChanged) Q_PROPERTY(bool mirrorVertically READ mirrorVertically WRITE setMirrorVertically NOTIFY mirrorVerticallyChanged) public: class Q_QUICK_EXPORT Renderer { protected: Renderer(); virtual ~Renderer(); virtual void render() = 0; virtual QOpenGLFramebufferObject *createFramebufferObject(const QSize &size); virtual void synchronize(QQuickFramebufferObject *); QOpenGLFramebufferObject *framebufferObject() const; void update(); void invalidateFramebufferObject(); private: friend class QSGFramebufferObjectNode; friend class QQuickFramebufferObject; void *data; }; QQuickFramebufferObject(QQuickItem *parent = nullptr); bool textureFollowsItemSize() const; void setTextureFollowsItemSize(bool follows); bool mirrorVertically() const; void setMirrorVertically(bool enable); virtual Renderer *createRenderer() const = 0; bool isTextureProvider() const override; QSGTextureProvider *textureProvider() const override; void releaseResources() override; protected: void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; protected: QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; Q_SIGNALS: void textureFollowsItemSizeChanged(bool); void mirrorVerticallyChanged(bool); private Q_SLOTS: void invalidateSceneGraph(); }; QT_END_NAMESPACE #endif // QQUICKFRAMEBUFFEROBJECT_H