73 lines · 2.2 KB · C++
RawDownload
////  TextureMeta.cpp//  libraries/shared/src////  Created by Ryan Huffman on 04/10/18.//  Copyright 2018 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// #include "TextureMeta.h" #include <QDebug>#include <QJsonDocument>#include <QJsonObject> const QString TEXTURE_META_EXTENSION = ".texmeta.json";const uint16_t KTX_VERSION = 1; bool TextureMeta::deserialize(const QByteArray& data, TextureMeta* meta) {    QJsonParseError error;    auto doc = QJsonDocument::fromJson(data, &error);    if (error.error != QJsonParseError::NoError) {        qDebug() << "Failed to parse TextureMeta:" << error.errorString();        return false;    }    if (!doc.isObject()) {        qDebug() << "Unable to process TextureMeta: top-level value is not an Object";        return false;    }     auto root = doc.object();    if (root.contains("original")) {        meta->original = root["original"].toString();    }    if (root.contains("uncompressed")) {        meta->uncompressed = root["uncompressed"].toString();    }    if (root.contains("compressed")) {        auto compressed = root["compressed"].toObject();        for (auto it = compressed.constBegin(); it != compressed.constEnd(); it++) {            khronos::gl::texture::InternalFormat format;            auto formatName = it.key().toLatin1();            if (khronos::gl::texture::fromString(formatName.constData(), &format)) {                meta->availableTextureTypes[format] = it.value().toString();            }        }    }    if (root.contains("version")) {        meta->version = root["version"].toInt();    }     return true;} QByteArray TextureMeta::serialize() {    QJsonDocument doc;    QJsonObject root;    QJsonObject compressed;     for (auto kv : availableTextureTypes) {        const char* name = khronos::gl::texture::toString(kv.first);        compressed[name] = kv.second.toString();    }    root["original"] = original.toString();    root["uncompressed"] = uncompressed.toString();    root["compressed"] = compressed;    root["version"] = KTX_VERSION;    doc.setObject(root);     return doc.toJson();}