diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-05-12 09:29:28 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-07-05 16:13:32 +0000 |
commit | 93f4a23989a7c19094abbc8bc4fe56eb7087ff84 (patch) | |
tree | bb7fc52144abfe570f1a5b19c59e00f72da5a26b /src/render/materialsystem/shader.cpp | |
parent | 0a28d95c6df5d840f7bd1b5cb43c99d162b0d04c (diff) |
Shader: factor out the logic to change shader code
Change-Id: Iabf8371534aededb4c45a0be0a3e1a1846ecc9ef
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/materialsystem/shader.cpp')
-rw-r--r-- | src/render/materialsystem/shader.cpp | 62 |
1 files changed, 26 insertions, 36 deletions
diff --git a/src/render/materialsystem/shader.cpp b/src/render/materialsystem/shader.cpp index bc793e90b..2f63e08d7 100644 --- a/src/render/materialsystem/shader.cpp +++ b/src/render/materialsystem/shader.cpp @@ -161,46 +161,36 @@ QVector<QByteArray> Shader::shaderCode() const return m_shaderCode; } +void Shader::setShaderCode(QShaderProgram::ShaderType type, const QByteArray &code) +{ + if (code == m_shaderCode[type]) + return; + + m_shaderCode[type] = code; + m_isLoaded = false; + setStatus(QShaderProgram::NotReady); + updateDNA(); + markDirty(AbstractRenderer::ShadersDirty); +} + void Shader::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) { if (e->type() == PropertyUpdated) { QPropertyUpdatedChangePtr propertyChange = e.staticCast<QPropertyUpdatedChange>(); - - QShaderProgram::ShaderType type = QShaderProgram::Vertex; - bool knownProperty = false; - - if (propertyChange->propertyName() == QByteArrayLiteral("vertexShaderCode")) { - type = QShaderProgram::Vertex; - knownProperty = true; - } else if (propertyChange->propertyName() == QByteArrayLiteral("fragmentShaderCode")) { - type = QShaderProgram::Fragment; - knownProperty = true; - } else if (propertyChange->propertyName() == QByteArrayLiteral("tessellationControlShaderCode")) { - type = QShaderProgram::TessellationControl; - knownProperty = true; - } else if (propertyChange->propertyName() == QByteArrayLiteral("tessellationEvaluationShaderCode")) { - type = QShaderProgram::TessellationEvaluation; - knownProperty = true; - } else if (propertyChange->propertyName() == QByteArrayLiteral("geometryShaderCode")) { - type = QShaderProgram::Geometry; - knownProperty = true; - } else if (propertyChange->propertyName() == QByteArrayLiteral("computeShaderCode")) { - type = QShaderProgram::Compute; - knownProperty = true; - } - - if (knownProperty) { - const QVariant propertyValue = propertyChange->value(); - const QByteArray code = propertyValue.toByteArray(); - - if (code != m_shaderCode[type]) { - m_shaderCode[type] = code; - m_isLoaded = false; - setStatus(QShaderProgram::NotReady); - updateDNA(); - markDirty(AbstractRenderer::ShadersDirty); - } - } + QVariant propertyValue = propertyChange->value(); + + if (propertyChange->propertyName() == QByteArrayLiteral("vertexShaderCode")) + setShaderCode(QShaderProgram::Vertex, propertyValue.toByteArray()); + else if (propertyChange->propertyName() == QByteArrayLiteral("fragmentShaderCode")) + setShaderCode(QShaderProgram::Fragment, propertyValue.toByteArray()); + else if (propertyChange->propertyName() == QByteArrayLiteral("tessellationControlShaderCode")) + setShaderCode(QShaderProgram::TessellationControl, propertyValue.toByteArray()); + else if (propertyChange->propertyName() == QByteArrayLiteral("tessellationEvaluationShaderCode")) + setShaderCode(QShaderProgram::TessellationEvaluation, propertyValue.toByteArray()); + else if (propertyChange->propertyName() == QByteArrayLiteral("geometryShaderCode")) + setShaderCode(QShaderProgram::Geometry, propertyValue.toByteArray()); + else if (propertyChange->propertyName() == QByteArrayLiteral("computeShaderCode")) + setShaderCode(QShaderProgram::Compute, propertyValue.toByteArray()); } BackendNode::sceneChangeEvent(e); |