aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/scenegraph/rendernode/openglrenderer.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-05-26 14:34:00 +0200
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-05-31 12:42:16 +0000
commite1682b84bb09ce3b45237b964c820eb4b92857a2 (patch)
tree5cc2e28037a0443d71e6d0f8e7609f670d9f6ae0 /examples/quick/scenegraph/rendernode/openglrenderer.cpp
parent519032e9e0faa52162ec67d1f35b8f66cd4576d3 (diff)
Refactor the rendernode example
By removing the Renderer abstraction it becomes easier to follow and understand. Change-Id: Iddacb461d51a75864983850660c5480985b3524f Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'examples/quick/scenegraph/rendernode/openglrenderer.cpp')
-rw-r--r--examples/quick/scenegraph/rendernode/openglrenderer.cpp35
1 files changed, 24 insertions, 11 deletions
diff --git a/examples/quick/scenegraph/rendernode/openglrenderer.cpp b/examples/quick/scenegraph/rendernode/openglrenderer.cpp
index e9c1be071c..27712e13b2 100644
--- a/examples/quick/scenegraph/rendernode/openglrenderer.cpp
+++ b/examples/quick/scenegraph/rendernode/openglrenderer.cpp
@@ -39,6 +39,7 @@
****************************************************************************/
#include "openglrenderer.h"
+#include <QQuickItem>
#ifndef QT_NO_OPENGL
@@ -46,13 +47,28 @@
#include <QOpenGLBuffer>
#include <QOpenGLFunctions>
-OpenGLRenderer::OpenGLRenderer(QQuickItem *item, QSGRenderNode *node)
- : m_item(item),
- m_node(node)
+OpenGLRenderNode::OpenGLRenderNode(QQuickItem *item)
+ : m_item(item)
{
}
-void OpenGLRenderer::init()
+OpenGLRenderNode::~OpenGLRenderNode()
+{
+ releaseResources();
+}
+
+// No need to reimplement changedStates() since our rendering is so simple,
+// without involving any state changes.
+
+void OpenGLRenderNode::releaseResources()
+{
+ delete m_program;
+ m_program = nullptr;
+ delete m_vbo;
+ m_vbo = nullptr;
+}
+
+void OpenGLRenderNode::init()
{
m_program = new QOpenGLShaderProgram;
@@ -98,18 +114,15 @@ void OpenGLRenderer::init()
m_vbo->release();
}
-OpenGLRenderer::~OpenGLRenderer()
+void OpenGLRenderNode::render(const RenderState *state)
{
- delete m_program;
- delete m_vbo;
-}
+ if (!m_program)
+ init();
-void OpenGLRenderer::render(const QSGRenderNode::RenderState *state)
-{
QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
m_program->bind();
- m_program->setUniformValue(m_matrixUniform, *state->projectionMatrix() * *m_node->matrix());
+ m_program->setUniformValue(m_matrixUniform, *state->projectionMatrix() * *matrix());
m_vbo->bind();