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); }