17#ifndef QQSBCOLLECTION_H
18#define QQSBCOLLECTION_H
20#include <QtQuick3DUtils/private/qtquick3dutilsglobal_p.h>
22#include <QtCore/qfile.h>
23#include <QtCore/qset.h>
24#include <QtCore/qmap.h>
26#include <rhi/qshader.h>
35 virtual ~QQsbCollection();
37 struct Q_QUICK3DUTILS_EXPORT Entry
41 explicit Entry(
const QByteArray &key) : key(key)
45 Entry(
const QByteArray &key, qint64 value) : key(key), value(value)
49 bool isValid()
const {
return !key.isEmpty(); }
55 using FeatureSet = QMap<QByteArray,
bool>;
58 static FeatureSet toFeatureSet(
const T &ssgFeatureSet)
61 for (quint32 i = 0, end = T::Count; i != end; ++i) {
62 auto def = T::fromIndex(i);
63 if (ssgFeatureSet.isSet(def))
64 ret.insert(T::asDefineString(def),
true);
69 struct Q_QUICK3DUTILS_EXPORT EntryDesc {
70 QByteArray materialKey;
71 FeatureSet featureSet;
74 QByteArray generateSha()
const;
75 static QByteArray generateSha(
const QByteArray &materialKey,
const FeatureSet &featureSet);
78 using EntryMap = QSet<Entry>;
79 virtual EntryMap availableEntries()
const = 0;
80 virtual Entry addEntry(
const QByteArray &key,
const EntryDesc &entryDesc) = 0;
81 virtual bool extractEntry(Entry entry, EntryDesc &entryDesc) = 0;
90 bool readEndHeader(QDataStream &ds, qint64 *startPos, quint8 *version);
91 void writeEndHeader(QDataStream &ds, qint64 startPos, quint8 version, quint64 magic);
92 bool readEndHeader(QIODevice *device, EntryMap *entries, quint8 *version);
93 void writeEndHeader(QIODevice *device,
const EntryMap &entries);
96Q_DECLARE_TYPEINFO(QQsbCollection::Entry, Q_PRIMITIVE_TYPE);
98Q_QUICK3DUTILS_EXPORT
QDataStream &operator<<(QDataStream &stream,
const QQsbCollection::Entry &entry);
99Q_QUICK3DUTILS_EXPORT
QDataStream &operator>>(QDataStream &stream, QQsbCollection::Entry &entry);
100Q_QUICK3DUTILS_EXPORT
QDataStream &operator<<(QDataStream &stream,
const QQsbCollection::EntryDesc &entryDesc);
101Q_QUICK3DUTILS_EXPORT
QDataStream &operator>>(QDataStream &stream, QQsbCollection::EntryDesc &entryDesc);
103Q_QUICK3DUTILS_EXPORT size_t qHash(
const QQsbCollection::Entry &entry, size_t);
104Q_QUICK3DUTILS_EXPORT
bool operator==(
const QQsbCollection::Entry &l,
const QQsbCollection::Entry &r);
112 QQsbInMemoryCollection() =
default;
114 EntryMap availableEntries()
const override;
115 Entry addEntry(
const QByteArray &key,
const EntryDesc &entryDesc) override;
116 bool extractEntry(Entry entry, EntryDesc &entryDesc) override;
120 bool load(
const QString &filename);
121 bool save(
const QString &filename);
124 Q_DISABLE_COPY(QQsbInMemoryCollection);
126 QHash<Entry, EntryDesc> entries;
135 Read = QIODevice::ReadOnly,
136 Write = (QIODevice::WriteOnly | QIODevice::Truncate)
139 explicit QQsbIODeviceCollection(
const QString &filePath);
140 explicit QQsbIODeviceCollection(QIODevice &dev);
141 ~QQsbIODeviceCollection();
143 bool map(MapMode mode);
146 EntryMap availableEntries()
const override;
147 Entry addEntry(
const QByteArray &key,
const EntryDesc &entryDesc) override;
148 bool extractEntry(Entry entry, EntryDesc &entryDesc) override;
151 static void dumpInfo(
const QString &device);
152 static void dumpInfo(QIODevice &device);
155 Q_DISABLE_COPY(QQsbIODeviceCollection);
157 enum class DeviceOwner : quint8
164 DeviceOwner devOwner = DeviceOwner::Self;
165 quint8 version = Version::Unknown;
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
\inmodule QtCore\reentrant
Combined button and popup list for selecting options.
QDataStream & operator>>(QDataStream &s, QKeyCombination &combination)
static const char * borderText()
static constexpr qint64 HeaderSize
static QString lockFileName(const QString &name)
static constexpr quint64 MagicaDS
static constexpr quint32 QtVersion
constexpr size_t qHash(const QSize &s, size_t seed=0) noexcept