From 16c47c3b343e2024cce3acd50f2dfe10ae5c40c7 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Wed, 18 Sep 2013 06:55:33 +0000 Subject: Don't try to allocate a msaa FBO when it is not supported. Change-Id: Ib4bdabcfa4e9b76156d7188da82fe2173b4b997e Reviewed-by: Giuseppe D'Angelo Reviewed-by: Sean Harmer --- src/gui/opengl/qopenglframebufferobject.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src/gui/opengl/qopenglframebufferobject.cpp') diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index 247ecf7351..8d7b525929 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -425,6 +425,17 @@ void QOpenGLFramebufferObjectPrivate::init(QOpenGLFramebufferObject *, const QSi if (!funcs.hasOpenGLFeature(QOpenGLFunctions::Framebuffers)) return; + + // Fall back to using a normal non-msaa FBO if we don't have support for MSAA + if (!funcs.hasOpenGLExtension(QOpenGLExtensions::FramebufferMultisample) + || !funcs.hasOpenGLExtension(QOpenGLExtensions::FramebufferBlit)) { + samples = 0; + } + + GLint maxSamples; + glGetIntegerv(GL_MAX_SAMPLES, &maxSamples); + samples = qBound(0, int(samples), int(maxSamples)); + size = sz; target = texture_target; // texture dimensions @@ -473,25 +484,11 @@ void QOpenGLFramebufferObjectPrivate::init(QOpenGLFramebufferObject *, const QSi color_buffer = 0; } else { mipmap = false; - GLint maxSamples; - glGetIntegerv(GL_MAX_SAMPLES, &maxSamples); - - samples = qBound(0, int(samples), int(maxSamples)); - funcs.glGenRenderbuffers(1, &color_buffer); funcs.glBindRenderbuffer(GL_RENDERBUFFER, color_buffer); - if (funcs.hasOpenGLExtension(QOpenGLExtensions::FramebufferMultisample) && samples > 0) { - funcs.glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, - internal_format, size.width(), size.height()); - } else { - samples = 0; - funcs.glRenderbufferStorage(GL_RENDERBUFFER, internal_format, - size.width(), size.height()); - } - + funcs.glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, internal_format, size.width(), size.height()); funcs.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_buffer); - QT_CHECK_GLERROR(); valid = checkFramebufferStatus(ctx); -- cgit v1.2.3