From e65371caf9d067a28566bfcf361ead445194b955 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 18 Jul 2018 14:48:05 +0200 Subject: [PATCH] Fixup GL_RGB10 FBO on OpenGL/ES3 Turns out on OpenGL ES, only the GL_RGB10_A2 form is allowed as a render buffer storage format. Change-Id: I42915b61835167ae457aae91da7e75065dd3eb21 Reviewed-by: Laszlo Agocs --- src/gui/opengl/qopenglframebufferobject.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gui/opengl/qopenglframebufferobject.cpp b/src/gui/opengl/qopenglframebufferobject.cpp index 91c25184b6..21ed029dfc 100644 --- a/src/gui/opengl/qopenglframebufferobject.cpp +++ b/src/gui/opengl/qopenglframebufferobject.cpp @@ -559,11 +559,16 @@ void QOpenGLFramebufferObjectPrivate::initColorBuffer(int idx, GLint *samples) GLenum storageFormat = color.internalFormat; // ES requires a sized format. The older desktop extension does not. Correct the format on ES. - if (ctx->isOpenGLES() && color.internalFormat == GL_RGBA) { - if (funcs.hasOpenGLExtension(QOpenGLExtensions::Sized8Formats)) - storageFormat = GL_RGBA8; - else - storageFormat = GL_RGBA4; + if (ctx->isOpenGLES()) { + if (color.internalFormat == GL_RGBA) { + if (funcs.hasOpenGLExtension(QOpenGLExtensions::Sized8Formats)) + storageFormat = GL_RGBA8; + else + storageFormat = GL_RGBA4; + } else if (color.internalFormat == GL_RGB10) { + // GL_RGB10 is not allowed in ES for glRenderbufferStorage. + storageFormat = GL_RGB10_A2; + } } funcs.glGenRenderbuffers(1, &color_buffer);