diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2019-08-29 10:16:07 +0200 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2019-09-08 09:41:49 +0200 |
commit | dd523fcb00921ba5b51c283db809fd6ff083821c (patch) | |
tree | 630c57a2aabe264158c61062bd298ce818d3b6e6 /examples/quick/scenegraph/rendernode/openglrenderer.cpp | |
parent | ee702d94368140618fc4777a0e247219a28d39c8 (diff) | |
download | qtdeclarative-dd523fcb00921ba5b51c283db809fd6ff083821c.tar.gz |
rendernode example: Prevent gui-render thread data race
By taking things like the item width and height in updatePaintNode()
(while gui is locked).
Change-Id: I840c6c858a0478eb6ceb09653fd1e033cb54372d
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 | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/examples/quick/scenegraph/rendernode/openglrenderer.cpp b/examples/quick/scenegraph/rendernode/openglrenderer.cpp index 0633731617..a4e619bea9 100644 --- a/examples/quick/scenegraph/rendernode/openglrenderer.cpp +++ b/examples/quick/scenegraph/rendernode/openglrenderer.cpp @@ -58,11 +58,6 @@ #include <QOpenGLFunctions> //! [1] -OpenGLRenderNode::OpenGLRenderNode(QQuickItem *item) - : m_item(item) -{ -} - OpenGLRenderNode::~OpenGLRenderNode() { releaseResources(); @@ -138,9 +133,9 @@ void OpenGLRenderNode::render(const RenderState *state) m_vbo->bind(); //! [5] - QPointF p0(m_item->width() - 1, m_item->height() - 1); + QPointF p0(m_width - 1, m_height - 1); QPointF p1(0, 0); - QPointF p2(0, m_item->height() - 1); + QPointF p2(0, m_height - 1); GLfloat vertices[6] = { GLfloat(p0.x()), GLfloat(p0.y()), GLfloat(p1.x()), GLfloat(p1.y()), @@ -192,8 +187,14 @@ QSGRenderNode::RenderingFlags OpenGLRenderNode::flags() const QRectF OpenGLRenderNode::rect() const { - return QRect(0, 0, m_item->width(), m_item->height()); + return QRect(0, 0, m_width, m_height); } //! [4] +void OpenGLRenderNode::sync(QQuickItem *item) +{ + m_width = item->width(); + m_height = item->height(); +} + #endif // opengl |