48 QByteArray fileData = device()->readAll();
49 if (fileData.size() < qpkmh_headerSize || !canRead(QByteArray(), fileData)) {
50 qCDebug(lcQtGuiTextureIO,
"Invalid PKM file %s", logName().constData());
51 return QTextureFileData();
53 texData.setData(fileData);
55 const char *rawData = fileData.constData();
60 quint16 type = qFromBigEndian<quint16>(rawData + 6);
62 qCDebug(lcQtGuiTextureIO,
"Unknown compression format in PKM file %s", logName().constData());
63 return QTextureFileData();
65 texData.setGLFormat(0);
66 texData.setGLInternalFormat(typeMap[type].glFormat);
70 texData.setNumLevels(1);
71 texData.setNumFaces(1);
72 const int bpb =
typeMap[type].bytesPerBlock;
73 QSize paddedSize(qFromBigEndian<quint16>(rawData + 8), qFromBigEndian<quint16>(rawData + 10));
74 texData.setDataLength((paddedSize.width() / 4) * (paddedSize.height() / 4) * bpb);
75 QSize texSize(qFromBigEndian<quint16>(rawData + 12), qFromBigEndian<quint16>(rawData + 14));
76 texData.setSize(texSize);
78 texData.setDataOffset(qpkmh_headerSize);
80 if (!texData.isValid()) {
81 qCDebug(lcQtGuiTextureIO,
"Invalid values in header of PKM file %s", logName().constData());
82 return QTextureFileData();
85 texData.setLogName(logName());
88 qDebug() <<
"PKM file handler read" << texData;