summaryrefslogtreecommitdiffstats
path: root/src/gui/util/qshadergenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/util/qshadergenerator.cpp')
-rw-r--r--src/gui/util/qshadergenerator.cpp70
1 files changed, 37 insertions, 33 deletions
diff --git a/src/gui/util/qshadergenerator.cpp b/src/gui/util/qshadergenerator.cpp
index ae45c03fd1..60cf5a2fc5 100644
--- a/src/gui/util/qshadergenerator.cpp
+++ b/src/gui/util/qshadergenerator.cpp
@@ -260,21 +260,22 @@ namespace
QByteArray replaceParameters(const QByteArray &original, const QShaderNode &node, const QShaderFormat &format)
{
- auto result = original;
+ QByteArray result = original;
- for (const auto &parameterName : node.parameterNames()) {
- const auto placeholder = QByteArray(QByteArrayLiteral("$") + parameterName.toUtf8());
- const auto parameter = node.parameter(parameterName);
+ const QStringList parameterNames = node.parameterNames();
+ for (const QString &parameterName : parameterNames) {
+ const QByteArray placeholder = QByteArray(QByteArrayLiteral("$") + parameterName.toUtf8());
+ const QVariant parameter = node.parameter(parameterName);
if (parameter.userType() == qMetaTypeId<QShaderLanguage::StorageQualifier>()) {
- const auto qualifier = parameter.value<QShaderLanguage::StorageQualifier>();
- const auto value = toGlsl(qualifier, format);
+ const QShaderLanguage::StorageQualifier qualifier = parameter.value<QShaderLanguage::StorageQualifier>();
+ const QByteArray value = toGlsl(qualifier, format);
result.replace(placeholder, value);
} else if (parameter.userType() == qMetaTypeId<QShaderLanguage::VariableType>()) {
- const auto type = parameter.value<QShaderLanguage::VariableType>();
- const auto value = toGlsl(type);
+ const QShaderLanguage::VariableType type = parameter.value<QShaderLanguage::VariableType>();
+ const QByteArray value = toGlsl(type);
result.replace(placeholder, value);
} else {
- const auto value = parameter.toString().toUtf8();
+ const QByteArray value = parameter.toString().toUtf8();
result.replace(placeholder, value);
}
}
@@ -288,20 +289,20 @@ QByteArray QShaderGenerator::createShaderCode(const QStringList &enabledLayers)
auto code = QByteArrayList();
if (format.isValid()) {
- const auto isGLES = format.api() == QShaderFormat::OpenGLES;
- const auto major = format.version().majorVersion();
- const auto minor = format.version().minorVersion();
+ const bool isGLES = format.api() == QShaderFormat::OpenGLES;
+ const int major = format.version().majorVersion();
+ const int minor = format.version().minorVersion();
- const auto version = major == 2 && isGLES ? 100
- : major == 3 && isGLES ? 300
- : major == 2 ? 100 + 10 * (minor + 1)
- : major == 3 && minor <= 2 ? 100 + 10 * (minor + 3)
- : major * 100 + minor * 10;
+ const int version = major == 2 && isGLES ? 100
+ : major == 3 && isGLES ? 300
+ : major == 2 ? 100 + 10 * (minor + 1)
+ : major == 3 && minor <= 2 ? 100 + 10 * (minor + 3)
+ : major * 100 + minor * 10;
- const auto profile = isGLES && version > 100 ? QByteArrayLiteral(" es")
- : version >= 150 && format.api() == QShaderFormat::OpenGLCoreProfile ? QByteArrayLiteral(" core")
- : version >= 150 && format.api() == QShaderFormat::OpenGLCompatibilityProfile ? QByteArrayLiteral(" compatibility")
- : QByteArray();
+ const QByteArray profile = isGLES && version > 100 ? QByteArrayLiteral(" es")
+ : version >= 150 && format.api() == QShaderFormat::OpenGLCoreProfile ? QByteArrayLiteral(" core")
+ : version >= 150 && format.api() == QShaderFormat::OpenGLCompatibilityProfile ? QByteArrayLiteral(" compatibility")
+ : QByteArray();
code << (QByteArrayLiteral("#version ") + QByteArray::number(version) + profile);
code << QByteArray();
@@ -313,9 +314,11 @@ QByteArray QShaderGenerator::createShaderCode(const QStringList &enabledLayers)
[enabledLayers] (const QString &s) { return enabledLayers.contains(s); });
};
- for (const auto &node : graph.nodes()) {
+ const QVector<QShaderNode> nodes = graph.nodes();
+ for (const QShaderNode &node : nodes) {
if (intersectsEnabledLayers(node.layers())) {
- for (const auto &snippet : node.rule(format).headerSnippets) {
+ const QByteArrayList headerSnippets = node.rule(format).headerSnippets;
+ for (const QByteArray &snippet : headerSnippets) {
code << replaceParameters(snippet, node, format);
}
}
@@ -325,17 +328,18 @@ QByteArray QShaderGenerator::createShaderCode(const QStringList &enabledLayers)
code << QByteArrayLiteral("void main()");
code << QByteArrayLiteral("{");
- for (const auto &statement : graph.createStatements(enabledLayers)) {
- const auto node = statement.node;
- auto line = node.rule(format).substitution;
- for (const auto &port : node.ports()) {
- const auto portName = port.name;
- const auto portDirection = port.direction;
- const auto isInput = port.direction == QShaderNodePort::Input;
+ for (const QShaderGraph::Statement &statement : graph.createStatements(enabledLayers)) {
+ const QShaderNode node = statement.node;
+ QByteArray line = node.rule(format).substitution;
+ const QVector<QShaderNodePort> ports = node.ports();
+ for (const QShaderNodePort &port : ports) {
+ const QString portName = port.name;
+ const QShaderNodePort::Direction portDirection = port.direction;
+ const bool isInput = port.direction == QShaderNodePort::Input;
- const auto portIndex = statement.portIndex(portDirection, portName);
- const auto variableIndex = isInput ? statement.inputs.at(portIndex)
- : statement.outputs.at(portIndex);
+ const int portIndex = statement.portIndex(portDirection, portName);
+ const int variableIndex = isInput ? statement.inputs.at(portIndex)
+ : statement.outputs.at(portIndex);
if (variableIndex < 0)
continue;