diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2016-05-26 14:34:00 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2016-05-31 12:42:16 +0000 |
commit | e1682b84bb09ce3b45237b964c820eb4b92857a2 (patch) | |
tree | 5cc2e28037a0443d71e6d0f8e7609f670d9f6ae0 /examples/quick/scenegraph/rendernode/openglrenderer.cpp | |
parent | 519032e9e0faa52162ec67d1f35b8f66cd4576d3 (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.cpp | 35 |
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(); |