summaryrefslogtreecommitdiffstats
path: root/src/render/graphicshelpers
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2018-01-23 12:16:53 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2018-02-01 20:59:51 +0000
commitbb548a48c0e5f9e07ccc84c69b4e7e38c8c751cf (patch)
tree5890cfcb15caef64fba278a3fad0318a1e52a448 /src/render/graphicshelpers
parent02ebfda6c3aaedd2becdc4f0ce4a39025e95b726 (diff)
Compile failing shaders once only and avoid asserting on failure
This way a material with a broken shader will fail once (and won't be retried unless the shader code gets changed), and the application will continue gracefully, without asserting. Task-number: QTBUG-65936 Change-Id: I7003e8c6f7d9094280d7757c1020b485f93e3b37 Reviewed-by: Svenn-Arne Dragly <svenn-arne.dragly@qt.io> Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/graphicshelpers')
-rw-r--r--src/render/graphicshelpers/graphicscontext.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/render/graphicshelpers/graphicscontext.cpp b/src/render/graphicshelpers/graphicscontext.cpp
index 84163780d..0b6870c3a 100644
--- a/src/render/graphicshelpers/graphicscontext.cpp
+++ b/src/render/graphicshelpers/graphicscontext.cpp
@@ -511,14 +511,14 @@ void GraphicsContext::introspectShaderInterface(Shader *shader, QOpenGLShaderPro
void GraphicsContext::loadShader(Shader *shader, ShaderManager *manager)
{
- QOpenGLShaderProgram *shaderProgram = m_shaderCache.getShaderProgramAndAddRef(shader->dna(), shader->peerId());
- if (!shaderProgram) {
+ bool wasPresent = false;
+ QOpenGLShaderProgram *shaderProgram = m_shaderCache.getShaderProgramAndAddRef(shader->dna(), shader->peerId(), &wasPresent);
+ if (!shaderProgram && !wasPresent) {
// No matching QOpenGLShader in the cache so create one
shaderProgram = createShaderProgram(shader);
- // Store in cache
- if (shaderProgram)
- m_shaderCache.insert(shader->dna(), shader->peerId(), shaderProgram);
+ // Store in cache (even when failed and shaderProgram is null)
+ m_shaderCache.insert(shader->dna(), shader->peerId(), shaderProgram);
}
// Ensure the Shader node knows about the program interface