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