Let ShaderEffectSource use same multisample count as GL context.
authorKim Motoyoshi Kalland <kim.kalland@nokia.com>
Tue, 3 Jul 2012 14:05:13 +0000 (16:05 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 4 Jul 2012 09:57:06 +0000 (11:57 +0200)
Change-Id: I9b772a2c405c2fab13dfee3527212117de16e9c0
Reviewed-by: Gunnar Sletta <gunnar.sletta@nokia.com>
src/quick/items/qquickshadereffectsource.cpp
src/quick/items/qquickshadereffectsource_p.h

index 71a0aaf..3f36c86 100644 (file)
@@ -140,7 +140,7 @@ QQuickShaderEffectTexture::QQuickShaderEffectTexture(QQuickItem *shaderSource)
     , m_live(true)
     , m_recursive(false)
     , m_dirtyTexture(true)
-    , m_multisamplingSupportChecked(false)
+    , m_multisamplingChecked(false)
     , m_multisampling(false)
     , m_grab(false)
 {
@@ -316,11 +316,15 @@ void QQuickShaderEffectTexture::grab()
     if (!m_fbo || m_fbo->size() != m_size || m_fbo->format().internalTextureFormat() != m_format
         || (!m_fbo->format().mipmap() && m_mipmap))
     {
-        if (!m_multisamplingSupportChecked) {
-            QList<QByteArray> extensions = QByteArray((const char *)glGetString(GL_EXTENSIONS)).split(' ');
-            m_multisampling = extensions.contains("GL_EXT_framebuffer_multisample")
-                            && extensions.contains("GL_EXT_framebuffer_blit");
-            m_multisamplingSupportChecked = true;
+        if (!m_multisamplingChecked) {
+            if (m_context->glContext()->format().samples() <= 1) {
+                m_multisampling = false;
+            } else {
+                QList<QByteArray> extensions = QByteArray((const char *)glGetString(GL_EXTENSIONS)).split(' ');
+                m_multisampling = extensions.contains("GL_EXT_framebuffer_multisample")
+                                && extensions.contains("GL_EXT_framebuffer_blit");
+            }
+            m_multisamplingChecked = true;
         }
         if (m_multisampling) {
             // Don't delete the FBO right away in case it is used recursively.
@@ -329,7 +333,7 @@ void QQuickShaderEffectTexture::grab()
             QOpenGLFramebufferObjectFormat format;
 
             format.setInternalTextureFormat(m_format);
-            format.setSamples(8);
+            format.setSamples(m_context->glContext()->format().samples());
             m_secondaryFbo = new QOpenGLFramebufferObject(m_size, format);
             m_depthStencilBuffer = m_context->depthStencilBufferForFbo(m_secondaryFbo);
         } else {
index 3fae06f..7c339a2 100644 (file)
@@ -147,7 +147,7 @@ private:
     uint m_live : 1;
     uint m_recursive : 1;
     uint m_dirtyTexture : 1;
-    uint m_multisamplingSupportChecked : 1;
+    uint m_multisamplingChecked : 1;
     uint m_multisampling : 1;
     uint m_grab : 1;
 };