aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/scenegraph
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@digia.com>2013-09-23 09:53:58 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-25 16:16:15 +0200
commitf2233c725078d49f6b185e642325dacb47b33240 (patch)
tree7e612d02f2d4c84882bc5294640ecb99333f139d /examples/quick/scenegraph
parent0e62896fdcbad014177ba11d88bbe46eb496ab2d (diff)
Convenience class for FBO rendering in Qt Quick
Change-Id: I5712bbfa0cde9f2fe5fddc35c4cc23597717065c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'examples/quick/scenegraph')
-rw-r--r--examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp82
-rw-r--r--examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.h12
-rw-r--r--examples/quick/scenegraph/textureinsgnode/main.qml2
3 files changed, 19 insertions, 77 deletions
diff --git a/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp b/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp
index 67df392555..0a75f82889 100644
--- a/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp
+++ b/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp
@@ -46,84 +46,30 @@
#include <QtQuick/QQuickWindow>
#include <qsgsimpletexturenode.h>
-
-
-
-class TextureNode : public QObject, public QSGSimpleTextureNode
+class LogoInFboRenderer : public QQuickFramebufferObject::Renderer
{
- Q_OBJECT
-
public:
- TextureNode(QQuickWindow *window)
- : m_fbo(0)
- , m_texture(0)
- , m_window(window)
- , m_logoRenderer(0)
+ LogoInFboRenderer()
{
- connect(m_window, SIGNAL(beforeRendering()), this, SLOT(renderFBO()));
+ logo.initialize();
}
- ~TextureNode()
- {
- delete m_texture;
- delete m_fbo;
- delete m_logoRenderer;
+ void render() {
+ logo.render();
+ update();
}
-public slots:
- void renderFBO()
- {
- QSize size = rect().size().toSize();
-
- if (!m_fbo) {
-
- QOpenGLFramebufferObjectFormat format;
- format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
- m_fbo = new QOpenGLFramebufferObject(size, format);
- m_texture = m_window->createTextureFromId(m_fbo->texture(), size);
- m_logoRenderer = new LogoRenderer();
- m_logoRenderer->initialize();
- setTexture(m_texture);
- }
-
- m_fbo->bind();
-
- glViewport(0, 0, size.width(), size.height());
-
- m_logoRenderer->render();
-
- m_fbo->bindDefault();
-
- m_window->update();
+ QOpenGLFramebufferObject *createFramebufferObject(const QSize &size) {
+ QOpenGLFramebufferObjectFormat format;
+ format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
+ format.setSamples(4);
+ return new QOpenGLFramebufferObject(size, format);
}
-private:
- QOpenGLFramebufferObject *m_fbo;
- QSGTexture *m_texture;
- QQuickWindow *m_window;
-
- LogoRenderer *m_logoRenderer;
+ LogoRenderer logo;
};
-
-
-FboInSGRenderer::FboInSGRenderer()
+QQuickFramebufferObject::Renderer *FboInSGRenderer::createRenderer() const
{
- setFlag(ItemHasContents, true);
+ return new LogoInFboRenderer();
}
-
-
-QSGNode *FboInSGRenderer::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
-{
- // Don't bother with resize and such, just recreate the node from scratch
- // when geometry changes.
- if (oldNode)
- delete oldNode;
-
- TextureNode *node = new TextureNode(window());
- node->setRect(boundingRect());
-
- return node;
-}
-
-#include "fboinsgrenderer.moc"
diff --git a/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.h b/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.h
index 42e10aef6d..d36f855d6c 100644
--- a/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.h
+++ b/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.h
@@ -41,19 +41,15 @@
#ifndef FBOINSGRENDERER_H
#define FBOINSGRENDERER_H
-#include <QQuickItem>
+#include <QtQuick/QQuickFramebufferObject>
+class LogoRenderer;
-class FboInSGRenderer : public QQuickItem
+class FboInSGRenderer : public QQuickFramebufferObject
{
Q_OBJECT
-
public:
- FboInSGRenderer();
-
-protected:
- QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
-
+ Renderer *createRenderer() const;
};
#endif
diff --git a/examples/quick/scenegraph/textureinsgnode/main.qml b/examples/quick/scenegraph/textureinsgnode/main.qml
index 6f6d7d1c1a..f461cb29a8 100644
--- a/examples/quick/scenegraph/textureinsgnode/main.qml
+++ b/examples/quick/scenegraph/textureinsgnode/main.qml
@@ -125,7 +125,7 @@ Item {
anchors.right: renderer.right
anchors.margins: 20
wrapMode: Text.WordWrap
- text: "The blue rectangle with the vintage 'Q' is an FBO, rendered by the application on the scene graph rendering thread. It is displayed using a QSGSimpleTextureNode."
+ text: "The blue rectangle with the vintage 'Q' is an FBO, rendered by the application on the scene graph rendering thread. The FBO is managed and displayed using the QQuickFramebufferObject convenience class."
}