From d66d66708c869f2d6de322a87e6b417348aff207 Mon Sep 17 00:00:00 2001
From: Pasi Keranen <pasi.keranen@digia.com>
Date: Mon, 29 Dec 2014 08:57:40 +0200
Subject: [PATCH] Fixes samples settings and antialiasing blit order.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Change-Id: I2ad59504ec4a477bb730f277428e50e4193ed0f0
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
---
 src/canvas3d.cpp  | 14 +++++---------
 src/context3d.cpp |  3 +--
 2 files changed, 6 insertions(+), 11 deletions(-)

diff --git a/src/canvas3d.cpp b/src/canvas3d.cpp
index acaeba0..91fbe5b 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 8be26a3..d135d62 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);
     }
-- 
GitLab