diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp
index 5b503c5bc6b7cb5e935461b992974f3ac4268454..dad073ed82ee4a96688d0adade32bf426431de96 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 82f00aee28fcafa888d45d4849d2e47e28228099..fec9f80fc16133007f58c5e0feae66a2fbd071b9 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;