diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp
index dad073ed82ee4a96688d0adade32bf426431de96..39b458afe9df01124b064682c7ef179da3422412 100644
--- a/src/canvas3d.cpp
+++ b/src/canvas3d.cpp
@@ -90,12 +90,9 @@ Canvas::Canvas(QQuickItem *parent):
     m_glContext(0),
     m_glContextQt(0),
     m_contextWindow(0),
-    #if defined(QT_OPENGL_ES_2)
     m_maxSamples(0),
-    #else
-    m_maxSamples(4),
-    #endif
     m_devicePixelRatio(1.0f),
+    m_isOpenGLES2(false),
     m_isSoftwareRendered(false),
     m_isContextAttribsSet(false),
     m_antialiasFbo(0),
@@ -320,12 +317,13 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
         }
 
         QSurfaceFormat surfaceFormat = m_glContextQt->format();
-#if defined(QT_OPENGL_ES_2)
-        surfaceFormat.setMajorVersion(2);
-        surfaceFormat.setMinorVersion(0);
-#endif
-        surfaceFormat.setSwapBehavior(QSurfaceFormat::SingleBuffer);
-        surfaceFormat.setSwapInterval(0);
+        if (m_isOpenGLES2) {
+            surfaceFormat.setMajorVersion(2);
+            surfaceFormat.setMinorVersion(0);
+        } else {
+            surfaceFormat.setSwapBehavior(QSurfaceFormat::SingleBuffer);
+            surfaceFormat.setSwapInterval(0);
+        }
 
         if (m_contextAttribs.antialias() && !m_isSoftwareRendered)
             surfaceFormat.setSamples(m_maxSamples);
@@ -382,8 +380,10 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
             m_antialiasFbo = new QOpenGLFramebufferObject(m_initialisedSize, antialiasFboFormat);
         }
 
-        m_context3D = new CanvasContext(m_glContext, m_offscreenSurface, m_initialisedSize.width() * m_devicePixelRatio,
-                                        m_initialisedSize.height() * m_devicePixelRatio);
+        m_context3D = new CanvasContext(m_glContext, m_offscreenSurface,
+                                        m_initialisedSize.width() * m_devicePixelRatio,
+                                        m_initialisedSize.height() * m_devicePixelRatio,
+                                        m_isOpenGLES2);
         m_context3D->setCanvas(this);
         m_context3D->setDevicePixelRatio(m_devicePixelRatio);
         m_context3D->setContextAttributes(m_contextAttribs);
@@ -513,6 +513,9 @@ QSGNode *Canvas::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
 
     if (!m_glContextQt) {
         m_glContextQt = window()->openglContext();
+        m_isOpenGLES2 = m_glContextQt->isOpenGLES();
+        if (!m_isOpenGLES2)
+            m_maxSamples = 4;
         ready();
         return 0;
     }
diff --git a/src/canvas3d_p.h b/src/canvas3d_p.h
index fec9f80fc16133007f58c5e0feae66a2fbd071b9..b5179d34da30de6c315dfe655b93e767ae837c2c 100644
--- a/src/canvas3d_p.h
+++ b/src/canvas3d_p.h
@@ -127,6 +127,7 @@ private:
     int m_maxSamples;
     float m_devicePixelRatio;
 
+    bool m_isOpenGLES2;
     bool m_isSoftwareRendered;
     bool m_runningInDesigner;
     CanvasContextAttributes m_contextAttribs;
diff --git a/src/context3d.cpp b/src/context3d.cpp
index e7013d6379f2c47fa6bf5b953c13b6ca5c9de06c..9a1144222348a2127cef3111d6afba65cde48a94 100644
--- a/src/context3d.cpp
+++ b/src/context3d.cpp
@@ -77,7 +77,7 @@
 
 // Owned by the SG Render Thread!
 CanvasContext::CanvasContext(QOpenGLContext *context, QSurface *surface,
-                             int width, int height, QObject *parent) :
+                             int width, int height, bool isES2, QObject *parent) :
     CanvasAbstractObject(parent),
     QOpenGLFunctions(context),
     m_unpackFlipYEnabled(false),
@@ -95,7 +95,8 @@ CanvasContext::CanvasContext(QOpenGLContext *context, QSurface *surface,
     m_currentFramebuffer(0),
     m_map(EnumToStringMap::newInstance()),
     m_canvas(0),
-    m_maxVertexAttribs(0)
+    m_maxVertexAttribs(0),
+    m_isOpenGLES2(isES2)
 {
     int value = 0;
     glGetIntegerv(MAX_VERTEX_ATTRIBS, &value);
@@ -2390,11 +2391,11 @@ void CanvasContext::deleteShader(CanvasShader *shader)
  */
 void CanvasContext::shaderSource(CanvasShader *shader, const QString &shaderSource)
 {
-#if defined(QT_OPENGL_ES_2)
-    QString modSource = shaderSource;
-#else
     QString modSource = "#version 120 \n#define precision \n"+ shaderSource;
-#endif
+
+    if (m_isOpenGLES2)
+        modSource = shaderSource;
+
     if (m_logAllCalls) qDebug() << "Context3D::" << __FUNCTION__
                                 << "(shader:" << shader
                                 << ", shaderSource"
diff --git a/src/context3d_p.h b/src/context3d_p.h
index 344356ed67188a46d814635f56e98d0846911646..a18207bb3cb28bca8d29205a017a9a0acb4d4f3b 100644
--- a/src/context3d_p.h
+++ b/src/context3d_p.h
@@ -940,7 +940,7 @@ public:
     ENUM_AS_PROPERTY(BROWSER_DEFAULT_WEBGL)
 
     CanvasContext(QOpenGLContext *context, QSurface *surface,
-                  int width, int height, QObject *parent = 0);
+                  int width, int height, bool isES2, QObject *parent = 0);
     ~CanvasContext();
 
     void setCanvas(Canvas *canvas);
@@ -1231,6 +1231,7 @@ private:
     Canvas *m_canvas;
     uint m_maxVertexAttribs;
     float **m_vertexAttribPointers;
+    bool m_isOpenGLES2;
 };
 
 #endif // CONTEXT3D_P_H