aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp
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/textureinsgnode/fboinsgrenderer.cpp
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/textureinsgnode/fboinsgrenderer.cpp')
-rw-r--r--examples/quick/scenegraph/textureinsgnode/fboinsgrenderer.cpp82
1 files changed, 14 insertions, 68 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"