summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-08-04 11:03:42 +0200
committerSean Harmer <sean.harmer@kdab.com>2016-08-05 15:59:56 +0000
commitd6fdc93bb085d64d1817b20f787e25b7bb911e5c (patch)
treec670e3742b8b732e08eccb4e098efb17a1106350
parent43fe0b34a6a8ab14db9b144a214efa47f028a6b0 (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.cpp19
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);
+ }
}
}