summaryrefslogtreecommitdiffstats
path: root/src/render/graphicshelpers/graphicscontext.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2016-12-16 16:09:17 +0100
committerPaul Lemire <paul.lemire@kdab.com>2017-01-25 16:28:00 +0000
commit5578d5b89d06b502e05ef6b3e3c6ffa0c29a7aa7 (patch)
tree59483700526af2ab18f6af8980189a19e55ac34f /src/render/graphicshelpers/graphicscontext.cpp
parentfe8ba714347091a61d0b335d3413b49f8094dfd8 (diff)
ShaderProgram: store and send log and status to frontend
Change-Id: I00b02f8b73ecf1194b4c4db7b60a95ee7cc3df22 Task-number: QTBUG-57615 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/graphicshelpers/graphicscontext.cpp')
-rw-r--r--src/render/graphicshelpers/graphicscontext.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/render/graphicshelpers/graphicscontext.cpp b/src/render/graphicshelpers/graphicscontext.cpp
index 05693f325..8a2919a96 100644
--- a/src/render/graphicshelpers/graphicscontext.cpp
+++ b/src/render/graphicshelpers/graphicscontext.cpp
@@ -459,11 +459,14 @@ QOpenGLShaderProgram *GraphicsContext::createShaderProgram(Shader *shaderNode)
// Compile shaders
const auto shaderCode = shaderNode->shaderCode();
+ QString logs;
for (int i = QShaderProgram::Vertex; i <= QShaderProgram::Compute; ++i) {
QShaderProgram::ShaderType type = static_cast<const QShaderProgram::ShaderType>(i);
- if (!shaderCode.at(i).isEmpty() &&
- !shaderProgram->addShaderFromSourceCode(shaderType(type), shaderCode.at(i))) {
- qWarning().noquote() << "Failed to compile shader:" << shaderProgram->log();
+ if (!shaderCode.at(i).isEmpty()) {
+ // Note: logs only return the error but not all the shader code
+ // we could append it
+ if (!shaderProgram->addShaderFromSourceCode(shaderType(type), shaderCode.at(i)))
+ logs += shaderProgram->log();
}
}
@@ -473,10 +476,12 @@ QOpenGLShaderProgram *GraphicsContext::createShaderProgram(Shader *shaderNode)
bindFragOutputs(shaderProgram->programId(), shaderNode->fragOutputs());
const bool linkSucceeded = shaderProgram->link();
- if (!linkSucceeded) {
- qWarning().noquote() << "Failed to link shader program:" << shaderProgram->log();
+ logs += shaderProgram->log();
+ shaderNode->setLog(logs);
+ shaderNode->setStatus(linkSucceeded ? QShaderProgram::Ready : QShaderProgram::Error);
+
+ if (!linkSucceeded)
return nullptr;
- }
// take from scoped-pointer so it doesn't get deleted
return shaderProgram.take();