7#include <QJsonDocument>
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();
119 static const auto toInputOutput = [](
const QJsonObject &uObj) {
122 const auto end = uObj.constEnd();
136 const auto end =
obj.constEnd();
143 const auto uniformArray =
it->toArray();
144 for (
const auto valueRef : uniformArray) {
145 if (!valueRef.isObject())
149 const auto uniform = toUniform(
obj);
150 if (!uniform.type.isEmpty() && !uniform.name.isEmpty()) {
151 result.uniforms.push_back(uniform);
153 qWarning(
"Invalid uniform, skipping");
157 const auto uniform = toUniform(
it->toObject());
158 if (!uniform.type.isEmpty() && !uniform.name.isEmpty())
159 result.uniforms.push_back(uniform);
161 qWarning(
"Invalid uniform, skipping");
169 for (
const auto valueRef :
it->toArray()) {
170 if (!valueRef.isObject())
172 const auto inOutVar = toInputOutput(valueRef.toObject());
173 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty())
174 result.inputs.push_back(inOutVar);
176 qWarning(
"Invalid input variable, skipping");
180 const auto inOutVar = toInputOutput(
obj);
181 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty()) {
182 result.inputs.push_back(inOutVar);
184 qWarning(
"Invalid input variable, skipping");
193 for (
const auto valueRef :
it->toArray()) {
194 if (!valueRef.isObject())
196 const auto inOutVar = toInputOutput(valueRef.toObject());
197 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty())
198 result.outputs.push_back(inOutVar);
200 qWarning(
"Invalid output variable, skipping");
204 const auto inOutVar = toInputOutput(inputJObj);
205 if (!inOutVar.type.isEmpty() && !inOutVar.name.isEmpty()) {
206 result.outputs.push_back(inOutVar);
208 qWarning(
"Invalid output variable, skipping");
QByteArray trimmed() const &
bool endsWith(char c) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
bool startsWith(QByteArrayView bv) const
QByteArray mid(qsizetype index, qsizetype len=-1) const
Returns a byte array containing len bytes from this byte array, starting at position pos.
static constexpr QChar fromLatin1(char c) noexcept
Converts the Latin-1 character c to its equivalent QChar.
static QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error=nullptr)
Parses json as a UTF-8 encoded JSON document, and creates a QJsonDocument from it.
\inmodule QtCore\reentrant
const_iterator constBegin() const noexcept
const_iterator constEnd() const noexcept
const_iterator constFind(const T &value) const
\macro QT_RESTRICTED_CAST_FROM_ASCII
QByteArray toLatin1() const &
QString mid(qsizetype position, qsizetype n=-1) const
Returns a string that contains n characters of this string, starting at the specified position index.
QSet< QString >::iterator it
#define QByteArrayLiteral(str)
DBusConnection const char DBusError * error
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
#define qPrintable(string)
QLatin1StringView QLatin1String
\inmodule QtCore\reentrant