diff options
Diffstat (limited to 'src/render/backend/renderer.cpp')
-rw-r--r-- | src/render/backend/renderer.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 6217338eb..bb0585e6f 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -166,6 +166,7 @@ Renderer::Renderer(QRenderAspect::RenderType type) , m_glContext(nullptr) , m_shareContext(nullptr) , m_pickBoundingVolumeJob(PickBoundingVolumeJobPtr::create()) + , m_rayCastingJob(RayCastingJobPtr::create()) , m_time(0) , m_settings(nullptr) , m_updateShaderDataTransformJob(Render::UpdateShaderDataTransformJobPtr::create()) @@ -217,6 +218,7 @@ Renderer::Renderer(QRenderAspect::RenderType type) // All world stuff depends on the RenderEntity's localBoundingVolume m_updateLevelOfDetailJob->addDependency(m_updateMeshTriangleListJob); m_pickBoundingVolumeJob->addDependency(m_updateMeshTriangleListJob); + m_rayCastingJob->addDependency(m_updateMeshTriangleListJob); m_shaderGathererJob->addDependency(m_filterCompatibleTechniqueJob); @@ -278,6 +280,7 @@ void Renderer::setNodeManagers(NodeManagers *managers) m_cleanupJob->setManagers(m_nodesManager); m_calculateBoundingVolumeJob->setManagers(m_nodesManager); m_pickBoundingVolumeJob->setManagers(m_nodesManager); + m_rayCastingJob->setManagers(m_nodesManager); m_updateWorldBoundingVolumeJob->setManager(m_nodesManager->renderNodesManager()); m_sendRenderCaptureJob->setManagers(m_nodesManager); m_sendBufferCaptureJob->setManagers(m_nodesManager); @@ -518,6 +521,7 @@ void Renderer::setSceneRoot(QBackendNodeFactory *factory, Entity *sgRoot) m_calculateBoundingVolumeJob->setRoot(m_renderSceneRoot); m_cleanupJob->setRoot(m_renderSceneRoot); m_pickBoundingVolumeJob->setRoot(m_renderSceneRoot); + m_rayCastingJob->setRoot(m_renderSceneRoot); m_updateLevelOfDetailJob->setRoot(m_renderSceneRoot); m_updateSkinningPaletteJob->setRoot(m_renderSceneRoot); m_updateTreeEnabledJob->setRoot(m_renderSceneRoot); @@ -1562,6 +1566,8 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs() const bool layersDirty = dirtyBitsForFrame & AbstractRenderer::LayersDirty; const bool layersCacheNeedsToBeRebuilt = layersDirty || entitiesEnabledDirty; + const bool materialDirty = dirtyBitsForFrame & AbstractRenderer::MaterialDirty; + QMutexLocker lock(m_renderQueue->mutex()); if (m_renderQueue->wasReset()) { // Have we rendered yet? (Scene3D case) // Traverse the current framegraph. For each leaf node create a @@ -1583,6 +1589,7 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs() for (int i = 0; i < fgBranchCount; ++i) { RenderViewBuilder builder(fgLeaves.at(i), i, this); builder.setLayerCacheNeedsToBeRebuilt(layersCacheNeedsToBeRebuilt); + builder.setMaterialGathererCacheNeedsToBeRebuilt(materialDirty); builder.prepareJobs(); renderBinJobs.append(builder.buildJobHierachy()); } @@ -1604,6 +1611,7 @@ QVector<Qt3DCore::QAspectJobPtr> Renderer::renderBinJobs() } else { notCleared |= AbstractRenderer::TechniquesDirty; notCleared |= AbstractRenderer::ShadersDirty; + notCleared |= AbstractRenderer::MaterialDirty; } m_dirtyBits.remaining = dirtyBitsForFrame & notCleared; @@ -1625,6 +1633,18 @@ QAspectJobPtr Renderer::pickBoundingVolumeJob() return m_pickBoundingVolumeJob; } +QAspectJobPtr Renderer::rayCastingJob() +{ + // Set values on rayCastingJob + RenderSettings *renderSetting = settings(); + if (renderSetting != nullptr) { + m_rayCastingJob->setRenderSettings(renderSetting); + m_rayCastingJob->setFrameGraphRoot(frameGraphRoot()); + } + + return m_rayCastingJob; +} + QAspectJobPtr Renderer::syncTextureLoadingJob() { return m_syncTextureLoadingJob; |