static ApiTexture getTextureFrom(QVariantMap const &image, QString label) { QSize size(image[QLatin1String("__width__")].toInt(), image[QLatin1String("__height__")].toInt()); QString cls = image[QLatin1String("__class__")].toString(); int depth = image[QLatin1String("__depth__")].toInt(); QString formatName = image[QLatin1String("__format__")].toString(); QByteArray dataArray = image[QLatin1String("__data__")].toByteArray(); QString userLabel = image[QLatin1String("__label__")].toString(); if (!userLabel.isEmpty()) { label += QString(", \"%1\"").arg(userLabel); } ApiTexture tex; tex.setSize(size); tex.setDepth(depth); tex.setFormatName(formatName); tex.setLabel(label); tex.setData(dataArray); return tex; }
ApiTraceState::ApiTraceState(const QVariantMap &parsedJson) { m_parameters = parsedJson[QLatin1String("parameters")].toMap(); QVariantMap attachedShaders = parsedJson[QLatin1String("shaders")].toMap(); QVariantMap::const_iterator itr; for (itr = attachedShaders.constBegin(); itr != attachedShaders.constEnd(); ++itr) { QString type = itr.key(); QString source = itr.value().toString(); m_shaderSources[type] = source; } m_uniforms = parsedJson[QLatin1String("uniforms")].toMap(); m_buffers = parsedJson[QLatin1String("buffers")].toMap(); QVariantMap textures = parsedJson[QLatin1String("textures")].toMap(); for (itr = textures.constBegin(); itr != textures.constEnd(); ++itr) { QVariantMap image = itr.value().toMap(); QSize size(image[QLatin1String("__width__")].toInt(), image[QLatin1String("__height__")].toInt()); QString cls = image[QLatin1String("__class__")].toString(); int depth = image[QLatin1String("__depth__")].toInt(); QString formatName = image[QLatin1String("__format__")].toString(); QByteArray dataArray = image[QLatin1String("__data__")].toByteArray(); ApiTexture tex; tex.setSize(size); tex.setDepth(depth); tex.setFormatName(formatName); tex.setLabel(itr.key()); tex.contentsFromBase64(dataArray); m_textures.append(tex); } QVariantMap fbos = parsedJson[QLatin1String("framebuffer")].toMap(); for (itr = fbos.constBegin(); itr != fbos.constEnd(); ++itr) { QVariantMap buffer = itr.value().toMap(); QSize size(buffer[QLatin1String("__width__")].toInt(), buffer[QLatin1String("__height__")].toInt()); QString cls = buffer[QLatin1String("__class__")].toString(); int depth = buffer[QLatin1String("__depth__")].toInt(); QString formatName = buffer[QLatin1String("__format__")].toString(); QByteArray dataArray = buffer[QLatin1String("__data__")].toByteArray(); ApiFramebuffer fbo; fbo.setSize(size); fbo.setDepth(depth); fbo.setFormatName(formatName); fbo.setType(itr.key()); fbo.contentsFromBase64(dataArray); m_framebuffers.append(fbo); } }
ApiTraceState::ApiTraceState(const QVariantMap &parsedJson) { m_parameters = parsedJson[QLatin1String("parameters")].toMap(); QVariantMap attachedShaders = parsedJson[QLatin1String("shaders")].toMap(); QVariantMap::const_iterator itr; for (itr = attachedShaders.constBegin(); itr != attachedShaders.constEnd(); ++itr) { QString type = itr.key(); QString source = itr.value().toString(); m_shaderSources[type] = source; } QVariantList textureUnits = parsedJson[QLatin1String("textures")].toList(); for (int i = 0; i < textureUnits.count(); ++i) { QVariantMap unit = textureUnits[i].toMap(); for (itr = unit.constBegin(); itr != unit.constEnd(); ++itr) { QVariantMap target = itr.value().toMap(); if (target.count()) { QVariantList levels = target[QLatin1String("levels")].toList(); for (int j = 0; j < levels.count(); ++j) { QVariantMap level = levels[j].toMap(); QVariantMap image = level[QLatin1String("image")].toMap(); QSize size(image[QLatin1String("__width__")].toInt(), image[QLatin1String("__height__")].toInt()); QString cls = image[QLatin1String("__class__")].toString(); QString type = image[QLatin1String("__type__")].toString(); bool normalized = image[QLatin1String("__normalized__")].toBool(); int numChannels = image[QLatin1String("__channels__")].toInt(); Q_ASSERT(type == QLatin1String("uint8")); Q_ASSERT(normalized == true); QByteArray dataArray = image[QLatin1String("__data__")].toByteArray(); ApiTexture tex; tex.setSize(size); tex.setNumChannels(numChannels); tex.setLevel(j); tex.setUnit(i); tex.setTarget(itr.key()); tex.contentsFromBase64(dataArray); m_textures.append(tex); } } } } QVariantMap fbos = parsedJson[QLatin1String("framebuffer")].toMap(); for (itr = fbos.constBegin(); itr != fbos.constEnd(); ++itr) { QVariantMap buffer = itr.value().toMap(); QSize size(buffer[QLatin1String("__width__")].toInt(), buffer[QLatin1String("__height__")].toInt()); QString cls = buffer[QLatin1String("__class__")].toString(); QString type = buffer[QLatin1String("__type__")].toString(); bool normalized = buffer[QLatin1String("__normalized__")].toBool(); int numChannels = buffer[QLatin1String("__channels__")].toInt(); Q_ASSERT(type == QLatin1String("uint8")); Q_ASSERT(normalized == true); QByteArray dataArray = buffer[QLatin1String("__data__")].toByteArray(); ApiFramebuffer fbo; fbo.setSize(size); fbo.setNumChannels(numChannels); fbo.setType(itr.key()); fbo.contentsFromBase64(dataArray); m_framebuffers.append(fbo); } }