diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2016-12-16 16:09:17 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2017-01-25 16:28:00 +0000 |
commit | 5578d5b89d06b502e05ef6b3e3c6ffa0c29a7aa7 (patch) | |
tree | 59483700526af2ab18f6af8980189a19e55ac34f /src/render/graphicshelpers/graphicscontext.cpp | |
parent | fe8ba714347091a61d0b335d3413b49f8094dfd8 (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.cpp | 17 |
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(); |