diff options
Diffstat (limited to 'src/quick/scenegraph/adaptations/software')
5 files changed, 13 insertions, 7 deletions
diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp index dee1ac8954..ce726e342b 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarecontext.cpp @@ -153,8 +153,7 @@ void QSGSoftwareRenderContext::invalidate() QSGTexture *QSGSoftwareRenderContext::createTexture(const QImage &image, uint flags) const { - Q_UNUSED(flags) - return new QSGSoftwarePixmapTexture(image); + return new QSGSoftwarePixmapTexture(image, flags); } QSGRenderer *QSGSoftwareRenderContext::createRenderer() diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwareninepatchnode_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwareninepatchnode_p.h index 62559c933c..bc7aec1b5a 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwareninepatchnode_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwareninepatchnode_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE class QSGSoftwareNinePatchNode : public QSGNinePatchNode { -public: +public: QSGSoftwareNinePatchNode(); void setTexture(QSGTexture *texture) override; diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture.cpp index e04c400af3..534a0a4ec6 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture.cpp @@ -41,11 +41,17 @@ QT_BEGIN_NAMESPACE -QSGSoftwarePixmapTexture::QSGSoftwarePixmapTexture(const QImage &image) +QSGSoftwarePixmapTexture::QSGSoftwarePixmapTexture(const QImage &image, uint flags) +{ // Prevent pixmap format conversion to reduce memory consumption // and surprises in calling code. (See QTBUG-47328) - : m_pixmap(QPixmap::fromImage(image, Qt::NoFormatConversion)) -{ + if (flags & QSGRenderContext::CreateTexture_Alpha) { + //If texture should have an alpha + m_pixmap = QPixmap::fromImage(image, Qt::NoFormatConversion); + } else { + //Force opaque texture + m_pixmap = QPixmap::fromImage(image.convertToFormat(QImage::Format_RGB32), Qt::NoFormatConversion); + } } QSGSoftwarePixmapTexture::QSGSoftwarePixmapTexture(const QPixmap &pixmap) diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture_p.h b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture_p.h index 01bfe19471..034fa25da9 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture_p.h +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarepixmaptexture_p.h @@ -59,7 +59,7 @@ class QSGSoftwarePixmapTexture : public QSGTexture { Q_OBJECT public: - QSGSoftwarePixmapTexture(const QImage &image); + QSGSoftwarePixmapTexture(const QImage &image, uint flags); QSGSoftwarePixmapTexture(const QPixmap &pixmap); int textureId() const override; diff --git a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp index 300ce6920c..5292e1371f 100644 --- a/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp +++ b/src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp @@ -229,6 +229,7 @@ QImage QSGSoftwareRenderLoop::grab(QQuickWindow *window) renderWindow(window); QImage grabbed = grabContent; + grabbed.detach(); grabContent = QImage(); return grabbed; } |