diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-09-20 12:10:26 +0200 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-10-12 05:53:02 +0000 |
commit | 1739b90d6120e24065b0c85a8d293234c5d51787 (patch) | |
tree | 59efafef45767c9077ada0a8664d18e8bdf765c2 /src/render/frontend | |
parent | 12cd9f0a5e32038d860d688ac6fa5b4ae32cfe7b (diff) |
Implement WaitFence/SetFence handling into the renderer
Slightly reorganize jobs between jobs needed for rendering and jobs
that should run even when no rendering is required.
Change-Id: I02d262efd8cb46c71c40ac6dbcd4d1b25bb725e1
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/frontend')
-rw-r--r-- | src/render/frontend/qrenderaspect.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/render/frontend/qrenderaspect.cpp b/src/render/frontend/qrenderaspect.cpp index ccec826ff..795073ce0 100644 --- a/src/render/frontend/qrenderaspect.cpp +++ b/src/render/frontend/qrenderaspect.cpp @@ -88,6 +88,8 @@ #include <Qt3DRender/qproximityfilter.h> #include <Qt3DRender/qshaderprogrambuilder.h> #include <Qt3DRender/qblitframebuffer.h> +#include <Qt3DRender/qsetfence.h> +#include <Qt3DRender/qwaitfence.h> #include <Qt3DCore/qarmature.h> #include <Qt3DCore/qjoint.h> #include <Qt3DCore/qskeletonloader.h> @@ -150,6 +152,8 @@ #include <Qt3DRender/private/joint_p.h> #include <Qt3DRender/private/loadskeletonjob_p.h> #include <Qt3DRender/private/proximityfilter_p.h> +#include <Qt3DRender/private/setfence_p.h> +#include <Qt3DRender/private/waitfence_p.h> #include <private/qrenderpluginfactory_p.h> #include <private/qrenderplugin_p.h> @@ -291,6 +295,8 @@ void QRenderAspectPrivate::registerBackendTypes() q->registerBackendType<QMemoryBarrier>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::MemoryBarrier, QMemoryBarrier> >::create(m_renderer)); q->registerBackendType<QProximityFilter>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::ProximityFilter, QProximityFilter> >::create(m_renderer)); q->registerBackendType<QBlitFramebuffer>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::BlitFramebuffer, QBlitFramebuffer> >::create(m_renderer)); + q->registerBackendType<QSetFence>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::SetFence, QSetFence> >::create(m_renderer)); + q->registerBackendType<QWaitFence>(QSharedPointer<Render::FrameGraphNodeFunctor<Render::WaitFence, QWaitFence> >::create(m_renderer)); // Picking q->registerBackendType<QObjectPicker>(QSharedPointer<Render::NodeFunctor<Render::ObjectPicker, Render::ObjectPickerManager> >::create(m_renderer)); @@ -361,6 +367,8 @@ void QRenderAspectPrivate::unregisterBackendTypes() unregisterBackendType<QRenderCapture>(); unregisterBackendType<QBufferCapture>(); unregisterBackendType<QMemoryBarrier>(); + unregisterBackendType<QSetFence>(); + unregisterBackendType<QWaitFence>(); // Picking unregisterBackendType<QObjectPicker>(); @@ -502,11 +510,8 @@ QVector<Qt3DCore::QAspectJobPtr> QRenderAspect::jobsToExecute(qint64 time) const QVector<QAspectJobPtr> geometryJobs = d->createGeometryRendererJobs(); jobs.append(geometryJobs); - - // Add all jobs to queue - // Note: the getter is also responsible for returning a job ready to run - jobs.append(d->m_renderer->pickBoundingVolumeJob()); - jobs.append(d->m_renderer->rayCastingJob()); + const QVector<QAspectJobPtr> preRenderingJobs = d->m_renderer->preRenderingJobs(); + jobs.append(preRenderingJobs); // Don't spawn any rendering jobs, if the renderer decides to skip this frame // Note: this only affects rendering jobs (jobs that load buffers, |