summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp29
-rw-r--r--src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h3
2 files changed, 31 insertions, 1 deletions
diff --git a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp
index 79a115525..ed0854ecf 100644
--- a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp
+++ b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob.cpp
@@ -54,9 +54,36 @@ namespace {
int renderViewInstanceCounter = 0;
} // anonymous
+class RenderViewCommandUpdaterJobPrivate : public Qt3DCore::QAspectJobPrivate
+{
+public:
+ RenderViewCommandUpdaterJobPrivate(RenderViewCommandUpdaterJob *q) : q_ptr(q) { }
+ ~RenderViewCommandUpdaterJobPrivate() override = default;
+
+ bool isRequired() override;
+ void postFrame(Qt3DCore::QAspectManager *manager) override;
+
+ RenderViewCommandUpdaterJob *q_ptr;
+ Q_DECLARE_PUBLIC(RenderViewCommandUpdaterJob)
+};
+
+bool RenderViewCommandUpdaterJobPrivate::isRequired()
+{
+ Q_Q(RenderViewCommandUpdaterJob);
+
+ return q->m_renderView && !q->m_renderView->noDraw() && q->m_count > 0;
+}
+
+void RenderViewCommandUpdaterJobPrivate::postFrame(Qt3DCore::QAspectManager *manager)
+{
+ Q_UNUSED(manager)
+
+ // reset to 0 after every frame, stops the number growing indefinitely
+ renderViewInstanceCounter = 0;
+}
RenderViewCommandUpdaterJob::RenderViewCommandUpdaterJob()
- : Qt3DCore::QAspectJob()
+ : Qt3DCore::QAspectJob(*new RenderViewCommandUpdaterJobPrivate(this))
, m_offset(0)
, m_count(0)
, m_renderView(nullptr)
diff --git a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h
index 2fe5749ad..bb1975c82 100644
--- a/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h
+++ b/src/plugins/renderers/opengl/jobs/renderviewcommandupdaterjob_p.h
@@ -65,6 +65,7 @@ namespace OpenGL {
class RenderView;
class Renderer;
+class RenderViewCommandUpdaterJobPrivate;
class Q_AUTOTEST_EXPORT RenderViewCommandUpdaterJob : public Qt3DCore::QAspectJob
{
@@ -92,6 +93,8 @@ private:
Renderer *m_renderer;
EntityRenderCommandDataPtr m_renderables;
QVector<RenderCommand> m_commands;
+
+ Q_DECLARE_PRIVATE(RenderViewCommandUpdaterJob)
};
typedef QSharedPointer<RenderViewCommandUpdaterJob> RenderViewCommandUpdaterJobPtr;