QSGBatchRenderer: return when a shader is not returned by the manager
authorAndrew Knight <andrew.knight@digia.com>
Thu, 6 Mar 2014 12:59:42 +0000 (14:59 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 6 Mar 2014 14:50:37 +0000 (15:50 +0100)
If a shader can't be found from the manager (e.g., if it failed to link),
return from rendering. This prevents the renderer from crashing on a
null pointer.

Task-number: QTBUG-37290
Change-Id: I44d0bbb721854c0bc6da681ff55f71140a5cb0bc
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp

index 8a430c1..e271778 100644 (file)
@@ -2040,6 +2040,8 @@ void Renderer::renderMergedBatch(const Batch *batch)
 
     QSGMaterial *material = gn->activeMaterial();
     ShaderManager::Shader *sms = m_useDepthBuffer ? m_shaderManager->prepareMaterial(material) : m_shaderManager->prepareMaterialNoRewrite(material);
+    if (!sms)
+        return;
     QSGMaterialShader *program = sms->program;
 
     if (m_currentShader != sms)
@@ -2124,6 +2126,8 @@ void Renderer::renderUnmergedBatch(const Batch *batch)
 
     QSGMaterial *material = gn->activeMaterial();
     ShaderManager::Shader *sms = m_shaderManager->prepareMaterialNoRewrite(material);
+    if (!sms)
+        return;
     QSGMaterialShader *program = sms->program;
 
     if (sms != m_currentShader)