From 597ae648b37e748af52fb733e7a9cff4d4e8e012 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= <tomi.korpipaa@digia.com>
Date: Thu, 6 Nov 2014 07:43:33 +0200
Subject: [PATCH] Fixed crash with Qt 5.4 software renderer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Change-Id: Id56053764835e13bf475d76230ea4a6c356161ca
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
---
 src/canvas3d.cpp | 8 ++++++--
 src/canvas3d_p.h | 2 +-
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp
index 5b503c5..dad073e 100644
--- a/src/canvas3d.cpp
+++ b/src/canvas3d.cpp
@@ -95,8 +95,8 @@ Canvas::Canvas(QQuickItem *parent):
     #else
     m_maxSamples(4),
     #endif
-    m_samples(0),
     m_devicePixelRatio(1.0f),
+    m_isSoftwareRendered(false),
     m_isContextAttribsSet(false),
     m_antialiasFbo(0),
     m_renderFbo(0),
@@ -111,6 +111,10 @@ Canvas::Canvas(QQuickItem *parent):
     m_runningInDesigner = QGuiApplication::applicationDisplayName() == "Qml2Puppet";
     setFlag(ItemHasContents, !m_runningInDesigner);
 
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0))
+    if (QCoreApplication::testAttribute(Qt::AA_UseSoftwareOpenGL))
+        m_isSoftwareRendered = true;
+#endif
 }
 
 /*!
@@ -323,7 +327,7 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
         surfaceFormat.setSwapBehavior(QSurfaceFormat::SingleBuffer);
         surfaceFormat.setSwapInterval(0);
 
-        if (m_contextAttribs.antialias())
+        if (m_contextAttribs.antialias() && !m_isSoftwareRendered)
             surfaceFormat.setSamples(m_maxSamples);
         else
             surfaceFormat.setSamples(0);
diff --git a/src/canvas3d_p.h b/src/canvas3d_p.h
index 82f00ae..fec9f80 100644
--- a/src/canvas3d_p.h
+++ b/src/canvas3d_p.h
@@ -125,9 +125,9 @@ private:
     QQuickWindow *m_contextWindow;
 
     int m_maxSamples;
-    int m_samples;
     float m_devicePixelRatio;
 
+    bool m_isSoftwareRendered;
     bool m_runningInDesigner;
     CanvasContextAttributes m_contextAttribs;
     bool m_isContextAttribsSet;
-- 
GitLab