diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-08-04 11:03:42 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-08-05 15:59:56 +0000 |
commit | d6fdc93bb085d64d1817b20f787e25b7bb911e5c (patch) | |
tree | c670e3742b8b732e08eccb4e098efb17a1106350 | |
parent | 43fe0b34a6a8ab14db9b144a214efa47f028a6b0 (diff) |
Load only the shaders which match the rendering API
Change-Id: I94a14e714c2c7da850c6a2ee624ff191ef9715fc
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/render/backend/renderer.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 58cc4c483..eb65984c9 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -760,12 +760,19 @@ void Renderer::updateGLResources() } } - const QVector<HShader> activeShaderHandles = m_nodesManager->shaderManager()->activeHandles(); - for (HShader handle: activeShaderHandles) { - Shader *shader = m_nodesManager->shaderManager()->data(handle); - if (!shader->isLoaded()) { - // Compile shader - m_graphicsContext->loadShader(shader); + const QVector<HTechnique> activeTechniques = m_nodesManager->techniqueManager()->activeHandles(); + for (HTechnique techniqueHandle : activeTechniques) { + Technique *technique = m_nodesManager->techniqueManager()->data(techniqueHandle); + // If api of the renderer matches the one from the technique + if (*contextInfo() == *technique->graphicsApiFilter()) { + const auto passIds = technique->renderPasses(); + for (const QNodeId passId : passIds) { + RenderPass *renderPass = m_nodesManager->renderPassManager()->lookupResource(passId); + HShader shaderHandle = m_nodesManager->shaderManager()->lookupHandle(renderPass->shaderProgram()); + Shader *shader = m_nodesManager->shaderManager()->data(shaderHandle); + if (shader != nullptr && !shader->isLoaded()) + m_graphicsContext->loadShader(shader); + } } } |