summaryrefslogtreecommitdiffstats
path: root/src/plugins/renderers/opengl/renderer/renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/renderers/opengl/renderer/renderer.cpp')
-rw-r--r--src/plugins/renderers/opengl/renderer/renderer.cpp78
1 files changed, 30 insertions, 48 deletions
diff --git a/src/plugins/renderers/opengl/renderer/renderer.cpp b/src/plugins/renderers/opengl/renderer/renderer.cpp
index 9dffba30b..8ea13fb82 100644
--- a/src/plugins/renderers/opengl/renderer/renderer.cpp
+++ b/src/plugins/renderers/opengl/renderer/renderer.cpp
@@ -81,7 +81,6 @@
#include <Qt3DRender/private/subtreeenabler_p.h>
#include <Qt3DRender/private/qshaderprogrambuilder_p.h>
#include <Qt3DRender/private/qshaderprogram_p.h>
-#include <Qt3DRender/private/filterentitybycomponentjob_p.h>
#include <Qt3DRender/private/qrenderaspect_p.h>
#ifndef Q_OS_INTEGRITY
#include <imguirenderer_p.h>
@@ -139,41 +138,41 @@ namespace OpenGL {
namespace {
-class SyncLightsGatherer
-{
+class CachingLightGatherer : public LightGatherer {
public:
- explicit SyncLightsGatherer(LightGathererPtr gatherJob,
- RendererCache *cache)
- : m_gatherJob(gatherJob)
+ CachingLightGatherer(RendererCache *cache)
+ : LightGatherer()
, m_cache(cache)
{
}
- void operator()()
+ void run() override
{
+ LightGatherer::run();
+
QMutexLocker lock(m_cache->mutex());
- m_cache->gatheredLights = m_gatherJob->lights();
- m_cache->environmentLight = m_gatherJob->takeEnvironmentLight();
+ m_cache->gatheredLights = lights();
+ m_cache->environmentLight = environmentLight();
}
private:
- LightGathererPtr m_gatherJob;
RendererCache *m_cache;
};
-class SyncRenderableEntities
-{
+class CachingRenderableEntityFilter : public RenderableEntityFilter {
public:
- explicit SyncRenderableEntities(RenderableEntityFilterPtr gatherJob,
- RendererCache *cache)
- : m_gatherJob(gatherJob)
+ CachingRenderableEntityFilter(RendererCache *cache)
+ : RenderableEntityFilter()
, m_cache(cache)
{
+
}
- void operator()()
+ void run() override
{
- QVector<Entity *> selectedEntities = m_gatherJob->filteredEntities();
+ RenderableEntityFilter::run();
+
+ QVector<Entity *> selectedEntities = filteredEntities();
std::sort(selectedEntities.begin(), selectedEntities.end());
QMutexLocker lock(m_cache->mutex());
@@ -181,23 +180,23 @@ public:
}
private:
- RenderableEntityFilterPtr m_gatherJob;
RendererCache *m_cache;
};
-class SyncComputableEntities
-{
+class CachingComputableEntityFilter : public ComputableEntityFilter {
public:
- explicit SyncComputableEntities(ComputableEntityFilterPtr gatherJob,
- RendererCache *cache)
- : m_gatherJob(gatherJob)
+ CachingComputableEntityFilter(RendererCache *cache)
+ : ComputableEntityFilter()
, m_cache(cache)
{
+
}
- void operator()()
+ void run() override
{
- QVector<Entity *> selectedEntities = m_gatherJob->filteredEntities();
+ ComputableEntityFilter::run();
+
+ QVector<Entity *> selectedEntities = filteredEntities();
std::sort(selectedEntities.begin(), selectedEntities.end());
QMutexLocker lock(m_cache->mutex());
@@ -205,7 +204,6 @@ public:
}
private:
- ComputableEntityFilterPtr m_gatherJob;
RendererCache *m_cache;
};
@@ -253,9 +251,9 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, m_cleanupJob(Render::FrameCleanupJobPtr::create())
, m_sendBufferCaptureJob(Render::SendBufferCaptureJobPtr::create())
, m_filterCompatibleTechniqueJob(FilterCompatibleTechniqueJobPtr::create())
- , m_lightGathererJob(Render::LightGathererPtr::create())
- , m_renderableEntityFilterJob(Render::RenderableEntityFilterPtr::create())
- , m_computableEntityFilterJob(Render::ComputableEntityFilterPtr::create())
+ , m_lightGathererJob(new CachingLightGatherer(&m_cache))
+ , m_renderableEntityFilterJob(new CachingRenderableEntityFilter(&m_cache))
+ , m_computableEntityFilterJob(new CachingComputableEntityFilter(&m_cache))
, m_bufferGathererJob(CreateSynchronizerJobPtr([this] { lookForDirtyBuffers(); }, JobTypes::DirtyBufferGathering))
, m_vaoGathererJob(CreateSynchronizerJobPtr([this] { lookForAbandonedVaos(); }, JobTypes::DirtyVaoGathering))
, m_textureGathererJob(CreateSynchronizerJobPtr([this] { lookForDirtyTextures(); }, JobTypes::DirtyTextureGathering))
@@ -263,12 +261,6 @@ Renderer::Renderer(QRenderAspect::RenderType type)
, m_introspectShaderJob(CreateSynchronizerPostFramePtr([this] { reloadDirtyShaders(); },
[this] (Qt3DCore::QAspectManager *m) { sendShaderChangesToFrontend(m); },
JobTypes::DirtyShaderGathering))
- , m_cacheRenderableEntitiesJob(CreateSynchronizerJobPtr(SyncRenderableEntities(m_renderableEntityFilterJob, &m_cache),
- JobTypes::EntityComponentTypeFiltering))
- , m_cacheComputableEntitiesJob(CreateSynchronizerJobPtr(SyncComputableEntities(m_computableEntityFilterJob, &m_cache),
- JobTypes::EntityComponentTypeFiltering))
- , m_cacheLightsJob(CreateSynchronizerJobPtr(SyncLightsGatherer(m_lightGathererJob, &m_cache),
- JobTypes::EntityComponentTypeFiltering))
, m_ownedContext(false)
, m_offscreenHelper(nullptr)
, m_glResourceManagers(nullptr)
@@ -285,10 +277,6 @@ Renderer::Renderer(QRenderAspect::RenderType type)
m_introspectShaderJob->addDependency(m_filterCompatibleTechniqueJob);
- m_cacheLightsJob->addDependency(m_lightGathererJob);
- m_cacheRenderableEntitiesJob->addDependency(m_renderableEntityFilterJob);
- m_cacheComputableEntitiesJob->addDependency(m_computableEntityFilterJob);
-
m_filterCompatibleTechniqueJob->setRenderer(this);
m_defaultRenderStateSet = new RenderStateSet;
@@ -1901,20 +1889,14 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs()
const bool materialCacheNeedsToBeRebuilt = shadersDirty || materialDirty || frameGraphDirty;
const bool renderCommandsDirty = materialCacheNeedsToBeRebuilt || renderableDirty || computeableDirty;
- if (renderableDirty) {
+ if (renderableDirty)
renderBinJobs.push_back(m_renderableEntityFilterJob);
- renderBinJobs.push_back(m_cacheRenderableEntitiesJob);
- }
- if (computeableDirty) {
+ if (computeableDirty)
renderBinJobs.push_back(m_computableEntityFilterJob);
- renderBinJobs.push_back(m_cacheComputableEntitiesJob);
- }
- if (lightsDirty) {
+ if (lightsDirty)
renderBinJobs.push_back(m_lightGathererJob);
- renderBinJobs.push_back(m_cacheLightsJob);
- }
QMutexLocker lock(m_renderQueue->mutex());
if (m_renderQueue->wasReset()) { // Have we rendered yet? (Scene3D case)