diff options
Diffstat (limited to 'src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp')
-rw-r--r-- | src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp b/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp index 6e7e2b5118..91eda8ebfc 100644 --- a/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp +++ b/src/quick/scenegraph/qsgrhidistancefieldglyphcache.cpp @@ -565,4 +565,40 @@ bool QSGRhiDistanceFieldGlyphCache::eightBitFormatIsAlphaSwizzled() const return !m_rhi->isFeatureSupported(QRhi::RedOrAlpha8IsRed); } +#if defined(QSG_DISTANCEFIELD_CACHE_DEBUG) +void QSGRhiDistanceFieldGlyphCache::saveTexture(QRhiTexture *texture, const QString &nameBase) const +{ + quint64 textureId = texture->nativeTexture().object; + QString fileName = nameBase + QLatin1Char('_') + QString::number(textureId, 16); + fileName.replace(QLatin1Char('/'), QLatin1Char('_')); + fileName.replace(QLatin1Char(' '), QLatin1Char('_')); + fileName.append(QLatin1String(".png")); + + QRhiReadbackResult *rbResult = new QRhiReadbackResult; + rbResult->completed = [rbResult, fileName] { + const QSize size = rbResult->pixelSize; + const qint64 numPixels = qint64(size.width()) * size.height(); + if (numPixels == rbResult->data.size()) { + // 1 bpp data, may be packed; copy it to ensure QImage scanline alignment + QImage image(size, QImage::Format_Grayscale8); + const char *p = rbResult->data.constData(); + for (int i = 0; i < size.height(); i++) + memcpy(image.scanLine(i), p + (i * size.width()), size.width()); + image.save(fileName); + } else if (4 * numPixels == rbResult->data.size()) { + // 4 bpp data + const uchar *p = reinterpret_cast<const uchar *>(rbResult->data.constData()); + QImage image(p, size.width(), size.height(), QImage::Format_RGBA8888); + image.save(fileName); + } else { + qWarning("Unhandled data format in glyph texture"); + } + delete rbResult; + }; + + QRhiReadbackDescription rb(texture); + m_resourceUpdates->readBackTexture(rb, rbResult); +} +#endif + QT_END_NAMESPACE |