summaryrefslogtreecommitdiffstats
path: root/src/render/materialsystem/shader.cpp
diff options
context:
space:
mode:
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);