summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKevin Ottens <kevin.ottens@kdab.com>2017-07-19 16:54:24 +0200
committerSean Harmer <sean.harmer@kdab.com>2017-09-04 11:11:50 +0000
commitaa3d86f2b7358dd71bdf78fb275bc2aa21ca23fd (patch)
tree50530329d97967d20aeb460ec71e7d8cfe33227f /src
parent47ed71044ef0d9ac2b86a3943a0c4c67c485737b (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.cpp25
-rw-r--r--src/render/materialsystem/shaderbuilder_p.h3
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;