From 13642424bb58fefff9d1439dbf6d17244a2ad6f5 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Mon, 26 May 2014 15:25:23 +0300 Subject: QOpenGLFramebufferObject: correct the internal format when using ANGLE As ANGLE doesn't support GL_RGBA as the internal format for its multisampled framebuffer extension, use GL_RGB8_OES to ensure a working out-of-the-box experience. Task-number: QTBUG-39283 Change-Id: Icb364225e74e5d3480a8617131a56e9f65f04ba5 Reviewed-by: Friedemann Kleint Reviewed-by: Andrew Knight --- src/gui/opengl/qopenglframebufferobject.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index 7fb6815120..7d91d2c497 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -453,10 +453,19 @@ void QOpenGLFramebufferObjectPrivate::init(QOpenGLFramebufferObject *, const QSi if (samples == 0) { initTexture(texture_target, internal_format, size, mipmap); } else { + GLenum storageFormat = internal_format; +#ifdef GL_RGBA8_OES + // Correct the internal format used by the render buffer when using ANGLE + if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES && internal_format == GL_RGBA + && strstr((const char *)funcs.glGetString(GL_RENDERER), "ANGLE") != 0) { + storageFormat = GL_RGBA8_OES; + } +#endif + mipmap = false; funcs.glGenRenderbuffers(1, &color_buffer); funcs.glBindRenderbuffer(GL_RENDERBUFFER, color_buffer); - funcs.glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, internal_format, size.width(), size.height()); + funcs.glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, storageFormat, size.width(), size.height()); funcs.glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_buffer); QT_CHECK_GLERROR(); -- cgit v1.2.3