diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-12-13 09:29:27 +0100 |
---|---|---|
committer | Jani Heikkinen <jani.heikkinen@qt.io> | 2016-12-14 11:18:09 +0000 |
commit | 7eb54642ba19a995e251518448a4896943dea1d2 (patch) | |
tree | e0050686b9158f8b93070264b3c294ec920fbcb4 /src/render/backend/renderer_p.h | |
parent | 2f3837cdbce8b27499db03f376e3781f5aede317 (diff) |
Properly order texture jobs
1) Load all the texture data
2) Sync
3) Look for dirty textures
We want to wait for textures to have been loaded to look for the dirty
textures otherwise the texture may not be ready and we would render some
invalid texture.
Task-number: QTBUG-56466
Task-number: QTBUG-57509
Change-Id: I2326f81bfe51dcdc753ff4eba150ce4cfae1635f
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/backend/renderer_p.h')
-rw-r--r-- | src/render/backend/renderer_p.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/render/backend/renderer_p.h b/src/render/backend/renderer_p.h index 965bccbcf..ad86fc3ce 100644 --- a/src/render/backend/renderer_p.h +++ b/src/render/backend/renderer_p.h @@ -136,6 +136,8 @@ class VSyncFrameAdvanceService; class PickEventFilter; class NodeManagers; +using SynchronizerJobPtr = GenericLambdaJobPtr<std::function<void()>>; + class QT3DRENDERSHARED_PRIVATE_EXPORT Renderer : public AbstractRenderer { public: @@ -180,6 +182,8 @@ public: QVector<Qt3DCore::QAspectJobPtr> renderBinJobs() Q_DECL_OVERRIDE; Qt3DCore::QAspectJobPtr pickBoundingVolumeJob() Q_DECL_OVERRIDE; + Qt3DCore::QAspectJobPtr syncTextureLoadingJob() Q_DECL_OVERRIDE; + QVector<Qt3DCore::QAspectJobPtr> createRenderBufferJobs() const; inline FrameCleanupJobPtr frameCleanupJob() const { return m_cleanupJob; } @@ -189,6 +193,7 @@ public: inline UpdateWorldTransformJobPtr updateWorldTransformJob() const { return m_worldTransformJob; } inline UpdateWorldBoundingVolumeJobPtr updateWorldBoundingVolumeJob() const { return m_updateWorldBoundingVolumeJob; } inline UpdateMeshTriangleListJobPtr updateMeshTriangleListJob() const { return m_updateMeshTriangleListJob; } + inline SynchronizerJobPtr textureLoadSyncJob() const { return m_syncTextureLoadingJob; } Qt3DCore::QAbstractFrameAdvanceService *frameAdvanceService() const Q_DECL_OVERRIDE; @@ -311,6 +316,8 @@ private: GenericLambdaJobPtr<std::function<void ()>> m_textureGathererJob; GenericLambdaJobPtr<std::function<void ()>> m_shaderGathererJob; + SynchronizerJobPtr m_syncTextureLoadingJob; + void lookForDirtyBuffers(); void lookForDirtyTextures(); void lookForDirtyShaders(); |