110bool QTextureFileData::isValid()
const
115 if (d->mode == ImageMode)
118 if (d->data.isEmpty() || d->size.isEmpty() || (!d->format && !d->internalFormat))
121 const int numFacesOffset = d->offsets.size();
122 const int numFacesLength = d->lengths.size();
123 if (numFacesOffset == 0 || numFacesLength == 0 || d->numFaces != numFacesOffset
124 || d->numFaces != numFacesLength)
127 const qint64 dataSize = d->data.size();
130 for (
int face = 0; face < d->numFaces; face++) {
131 const int numLevelsOffset = d->offsets.at(face).size();
132 const int numLevelsLength = d->lengths.at(face).size();
133 if (numLevelsOffset == 0 || numLevelsLength == 0 || d->numLevels != numLevelsOffset
134 || d->numLevels != numLevelsLength)
137 for (
int level = 0; level < d->numLevels; level++) {
138 const qint64 offset = d->getOffset(level, face);
139 const qint64 length = d->getLength(level, face);
140 if (offset < 0 || offset >= dataSize || length <= 0 || (offset + length > dataSize))
176void QTextureFileData::setDataOffset(
int offset,
int level,
int face)
178 Q_ASSERT(d->mode == ByteArrayMode);
179 if (d.constData() && level >= 0) {
180 d->ensureSize(level + 1, face + 1);
181 d->setOffset(offset, level, face);
191QByteArrayView QTextureFileData::getDataView(
int level,
int face)
const
193 if (d->mode == ByteArrayMode) {
194 const int dataLength =
this->dataLength(level, face);
195 const int dataOffset =
this->dataOffset(level, face);
197 if (d ==
nullptr || dataLength == 0)
198 return QByteArrayView();
200 return QByteArrayView(d->data.constData() + dataOffset, dataLength);
202 if (!d->isValid(level, face))
203 return QByteArrayView();
204 const QImage &img = d->images[face][level];
205 return img.isNull() ? QByteArrayView() : QByteArrayView(img.constBits(), img.sizeInBytes());
209void QTextureFileData::setDataLength(
int length,
int level,
int face)
211 Q_ASSERT(d->mode == ByteArrayMode);
212 if (d.constData() && level >= 0) {
213 d->ensureSize(level + 1, face + 1);
214 d->setLength(length, level, face);
311QDebug operator<<(QDebug dbg,
const QTextureFileData &d)
313 QDebugStateSaver saver(dbg);
315 dbg.nospace() <<
"QTextureFileData(";
317 dbg.space() << d.logName() << d.size();
318 dbg <<
"glFormat:" << glFormatName(d.glFormat());
319 dbg <<
"glInternalFormat:" << glFormatName(d.glInternalFormat());
320 dbg <<
"glBaseInternalFormat:" << glFormatName(d.glBaseInternalFormat());
321 dbg.nospace() <<
"Levels: " << d.numLevels();
322 dbg.nospace() <<
"Faces: " << d.numFaces();
326 dbg << (d.d->mode ?
"[bytearray-based]" :
"[image-based]");
void setLength(int value, int level, int face)
QTextureFileDataPrivate(const QTextureFileDataPrivate &other)
QVarLengthArray< QList< int >, MAX_FACES > lengths
bool isValid(int level, int face) const
quint32 baseInternalFormat
~QTextureFileDataPrivate()
QVarLengthArray< QList< QImage >, MAX_FACES > images
int getLength(int level, int face) const
void ensureSize(int levels, int faces, bool force=false)
void setOffset(int value, int level, int face)
QVarLengthArray< QList< int >, MAX_FACES > offsets
QMap< QByteArray, QByteArray > keyValues
QTextureFileDataPrivate()
int getOffset(int level, int face) const
constexpr size_t MAX_FACES
static QByteArray glFormatName(quint32 fmt)