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