diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp
index acaeba0e6329c3bc870537ef734f6edf8b351ffd..91fbe5b4d79e731a199ec053d93af781da3f66c3 100644
--- a/src/canvas3d.cpp
+++ b/src/canvas3d.cpp
@@ -281,7 +281,7 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
                                     << " Attribs:" << m_contextAttribs;
 
         // If we can't do antialiasing, ensure we don't even try to enable it
-        if (m_maxSamples == 0)
+        if (m_maxSamples == 0 || m_isSoftwareRendered)
             m_contextAttribs.setAntialias(false);
 
         // Ensure ignored attributes are left to their default state
@@ -295,8 +295,10 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
     if (!m_context3D) {
         updateWindowParameters();
 
-        // Initialize the swap buffer chain
         QOpenGLFramebufferObjectFormat format;
+        QOpenGLFramebufferObjectFormat antialiasFboFormat;
+
+        // Initialize the swap buffer chain
         if (m_contextAttribs.depth() && m_contextAttribs.stencil() && !m_contextAttribs.antialias())
             format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
         else if (m_contextAttribs.depth() && !m_contextAttribs.antialias())
@@ -306,7 +308,6 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
         else
             format.setAttachment(QOpenGLFramebufferObject::NoAttachment);
 
-        QOpenGLFramebufferObjectFormat antialiasFboFormat;
         if (m_contextAttribs.antialias()) {
             antialiasFboFormat.setSamples(m_maxSamples);
 
@@ -329,11 +330,6 @@ CanvasContext *Canvas::getContext(const QString &type, const QVariantMap &option
             surfaceFormat.setSwapInterval(0);
         }
 
-        if (m_contextAttribs.antialias() && !m_isSoftwareRendered)
-            surfaceFormat.setSamples(m_maxSamples);
-        else
-            surfaceFormat.setSamples(0);
-
         if (m_contextAttribs.alpha())
             surfaceFormat.setAlphaBufferSize(8);
         else
@@ -664,7 +660,7 @@ void Canvas::renderNext()
     // Resolve MSAA
     if (m_contextAttribs.antialias()) {
         if (m_logAllCalls) qDebug() << "Canvas3D::" << __FUNCTION__ << " Resolving MSAA";
-        QOpenGLFramebufferObject::blitFramebuffer(m_displayFbo, m_antialiasFbo);
+        QOpenGLFramebufferObject::blitFramebuffer(m_renderFbo, m_antialiasFbo);
     }
 
     // We need to flush the contents to the FBO before posting
diff --git a/src/context3d.cpp b/src/context3d.cpp
index 8be26a3887f3649cc2189d6e906d70ec4fa12e86..d135d6235882c2452f7a35e7763f9fa977e30210 100644
--- a/src/context3d.cpp
+++ b/src/context3d.cpp
@@ -3929,7 +3929,6 @@ void CanvasContext::bindBuffer(glEnums target, CanvasBuffer *buffer)
                 return;
             }
             m_currentArrayBuffer = buffer;
-            glBindBuffer(GLenum(target), buffer->id());
         } else {
             if (buffer->target() == CanvasBuffer::UNINITIALIZED)
                 buffer->setTarget(CanvasBuffer::ELEMENT_ARRAY_BUFFER);
@@ -3941,8 +3940,8 @@ void CanvasContext::bindBuffer(glEnums target, CanvasBuffer *buffer)
                 return;
             }
             m_currentElementArrayBuffer = buffer;
-            glBindBuffer(GLenum(target), buffer->id());
         }
+        glBindBuffer(GLenum(target), buffer->id());
     } else {
         glBindBuffer(GLenum(target), 0);
     }