diff options
author | Kevin Ottens <kevin.ottens@kdab.com> | 2017-07-19 16:54:24 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-09-04 11:11:50 +0000 |
commit | aa3d86f2b7358dd71bdf78fb275bc2aa21ca23fd (patch) | |
tree | 50530329d97967d20aeb460ec71e7d8cfe33227f /src | |
parent | 47ed71044ef0d9ac2b86a3943a0c4c67c485737b (diff) |
Implement enabledLayers on ShaderBuilder
This is the backend counterpart to the QShaderProgramBuilder
introduction of the enabledLayers property.
Change-Id: Iecec5e9d1450c454f64c243f5f797c0d63e5f1ee
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/materialsystem/shaderbuilder.cpp | 25 | ||||
-rw-r--r-- | src/render/materialsystem/shaderbuilder_p.h | 3 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/render/materialsystem/shaderbuilder.cpp b/src/render/materialsystem/shaderbuilder.cpp index 95da42506..c2b32ce86 100644 --- a/src/render/materialsystem/shaderbuilder.cpp +++ b/src/render/materialsystem/shaderbuilder.cpp @@ -130,6 +130,7 @@ ShaderBuilder::~ShaderBuilder() void ShaderBuilder::cleanup() { m_shaderProgramId = Qt3DCore::QNodeId(); + m_enabledLayers.clear(); m_graphs.clear(); m_dirtyTypes.clear(); QBackendNode::setEnabled(false); @@ -140,6 +141,25 @@ Qt3DCore::QNodeId ShaderBuilder::shaderProgramId() const return m_shaderProgramId; } +QStringList ShaderBuilder::enabledLayers() const +{ + return m_enabledLayers; +} + + +void ShaderBuilder::setEnabledLayers(const QStringList &layers) +{ + if (m_enabledLayers == layers) + return; + + m_enabledLayers = layers; + + for (const auto type : m_graphs.keys()) { + if (!m_graphs.value(type).isEmpty()) + m_dirtyTypes.insert(type); + } +} + GraphicsApiFilterData ShaderBuilder::graphicsApi() const { return m_graphicsApi; @@ -253,7 +273,7 @@ void ShaderBuilder::generateCode(ShaderBuilder::ShaderType type) generator.format = format; generator.graph = graph; - const auto code = generator.createShaderCode(); + const auto code = generator.createShaderCode(m_enabledLayers); m_codes.insert(type, deincludify(code, graphPath + QStringLiteral(".glsl"))); m_dirtyTypes.remove(type); } @@ -266,6 +286,8 @@ void ShaderBuilder::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) if (propertyChange->propertyName() == QByteArrayLiteral("shaderProgram")) m_shaderProgramId = propertyValue.value<Qt3DCore::QNodeId>(); + else if (propertyChange->propertyName() == QByteArrayLiteral("enabledLayers")) + setEnabledLayers(propertyValue.toStringList()); else if (propertyChange->propertyName() == QByteArrayLiteral("vertexShaderGraph")) setShaderGraph(Vertex, propertyValue.toUrl()); else if (propertyChange->propertyName() == QByteArrayLiteral("tessellationControlShaderGraph")) @@ -290,6 +312,7 @@ void ShaderBuilder::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr const auto &data = typedChange->data; m_shaderProgramId = data.shaderProgramId; + m_enabledLayers = data.enabledLayers; setShaderGraph(Vertex, data.vertexShaderGraph); setShaderGraph(TessellationControl, data.tessellationControlShaderGraph); setShaderGraph(TessellationEvaluation, data.tessellationEvaluationShaderGraph); diff --git a/src/render/materialsystem/shaderbuilder_p.h b/src/render/materialsystem/shaderbuilder_p.h index 6f3612ce8..9fff5df97 100644 --- a/src/render/materialsystem/shaderbuilder_p.h +++ b/src/render/materialsystem/shaderbuilder_p.h @@ -82,6 +82,7 @@ public: void cleanup(); Qt3DCore::QNodeId shaderProgramId() const; + QStringList enabledLayers() const; GraphicsApiFilterData graphicsApi() const; void setGraphicsApi(const GraphicsApiFilterData &graphicsApi); @@ -98,9 +99,11 @@ public: private: void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) Q_DECL_FINAL; + void setEnabledLayers(const QStringList &layers); GraphicsApiFilterData m_graphicsApi; Qt3DCore::QNodeId m_shaderProgramId; + QStringList m_enabledLayers; QHash<ShaderType, QUrl> m_graphs; QHash<ShaderType, QByteArray> m_codes; QSet<ShaderType> m_dirtyTypes; |