summaryrefslogtreecommitdiffstats
path: root/src/render/materialsystem/shader.cpp
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-05-12 09:29:28 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-07-05 16:13:32 +0000
commit93f4a23989a7c19094abbc8bc4fe56eb7087ff84 (patch)
treebb7fc52144abfe570f1a5b19c59e00f72da5a26b /src/render/materialsystem/shader.cpp
parent0a28d95c6df5d840f7bd1b5cb43c99d162b0d04c (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.cpp62
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);