61 int jsonStart = 0, jsonEnd = 0;
70 if (jsonStart <= 0 || jsonEnd <= 0)
73 const int size = jsonEnd - jsonStart;
76 qWarning(
"Shader metadata section found, but content to small to be valid!");
89 jsonData = jsonData.mid(2, jsonData.size() - 4);
94 qWarning() <<
"Shader metadata parse error at offset: " <<
error.offset;
98 static const auto toUniform = [](
const QJsonObject &uObj) {
101 const auto end = uObj.constEnd();
108 uniform.multiview = (
it !=
end) ?
it->toBool() :
false;
114 uniform.conditionName = conditionString.mid(1).toLatin1();
116 uniform.conditionName = conditionString.toLatin1();
121 static const auto toInputOutput = [](
const QJsonObject &uObj) {
124 const auto end = uObj.constEnd();
133 inOutVar.flat = (
it !=
end) ?
it->toBool() :
false;
140 const auto end =
obj.constEnd();
147 const auto uniformArray =
it->toArray();
148 for (
const auto valueRef : uniformArray) {
149 if (!valueRef.isObject())
153 const auto uniform = toUniform(
obj);
154 if (!uniform.type.isEmpty() && !uniform.name.isEmpty()) {
155 result.uniforms.push_back(uniform);
157 qWarning(
"Invalid uniform, skipping");
161 const auto uniform = toUniform(
it->toObject());
162 if (!uniform.type.isEmpty() && !uniform.name.isEmpty())
163 result.uniforms.push_back(uniform);
165 qWarning(
"Invalid uniform, skipping");
173 for (
const auto valueRef :
it->toArray()) {
174 if (!valueRef.isObject())
176 const auto inOutVar = toInputOutput(valueRef.toObject());
177 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty())
178 result.inputs.push_back(inOutVar);
180 qWarning(
"Invalid input variable, skipping");
184 const auto inOutVar = toInputOutput(
obj);
185 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty()) {
186 result.inputs.push_back(inOutVar);
188 qWarning(
"Invalid input variable, skipping");
197 for (
const auto valueRef :
it->toArray()) {
198 if (!valueRef.isObject())
200 const auto inOutVar = toInputOutput(valueRef.toObject());
201 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty())
202 result.outputs.push_back(inOutVar);
204 qWarning(
"Invalid output variable, skipping");
208 const auto inOutVar = toInputOutput(inputJObj);
209 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty()) {
210 result.outputs.push_back(inOutVar);
212 qWarning(
"Invalid output variable, skipping");