EGL convenience: deal with DefaultRenderableType when appropriate

When encountering QSurfaceFormat::DefaultRenderableType, the surface
format choosers should not default to OpenGL ES, but rather desktop
OpenGL when Qt has been configured without ES2 support.

Change-Id: I57aa7cfe63ebe0ffb32f4ba32808e62b0a4589f8
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
bb10
Andrew Knight 2013-11-20 16:56:07 +02:00 committed by The Qt Project
parent 06ff9c9ec0
commit 7b6253efbf
2 changed files with 34 additions and 10 deletions

View File

@ -232,17 +232,28 @@ EGLConfig QEglConfigChooser::chooseConfig()
configureAttributes.append(surfaceType());
configureAttributes.append(EGL_RENDERABLE_TYPE);
if (m_format.renderableType() == QSurfaceFormat::OpenVG)
switch (m_format.renderableType()) {
case QSurfaceFormat::OpenVG:
configureAttributes.append(EGL_OPENVG_BIT);
break;
#ifdef EGL_VERSION_1_4
else if (m_format.renderableType() == QSurfaceFormat::OpenGL)
# if !defined(QT_OPENGL_ES_2)
case QSurfaceFormat::DefaultRenderableType:
# endif
case QSurfaceFormat::OpenGL:
configureAttributes.append(EGL_OPENGL_BIT);
break;
#endif
else if (m_format.majorVersion() == 1)
configureAttributes.append(EGL_OPENGL_ES_BIT);
else
case QSurfaceFormat::OpenGLES:
if (m_format.majorVersion() == 1) {
configureAttributes.append(EGL_OPENGL_ES_BIT);
break;
}
// fall through
default:
configureAttributes.append(EGL_OPENGL_ES2_BIT);
break;
}
configureAttributes.append(EGL_NONE);
EGLConfig cfg = 0;
@ -336,7 +347,11 @@ QSurfaceFormat q_glFormatFromConfig(EGLDisplay display, const EGLConfig config,
if (referenceFormat.renderableType() == QSurfaceFormat::OpenVG && (renderableType & EGL_OPENVG_BIT))
format.setRenderableType(QSurfaceFormat::OpenVG);
#ifdef EGL_VERSION_1_4
else if (referenceFormat.renderableType() == QSurfaceFormat::OpenGL && (renderableType & EGL_OPENGL_BIT))
else if ((referenceFormat.renderableType() == QSurfaceFormat::OpenGL
# if !defined(QT_OPENGL_ES_2)
|| referenceFormat.renderableType() == QSurfaceFormat::DefaultRenderableType
# endif
) && (renderableType & EGL_OPENGL_BIT))
format.setRenderableType(QSurfaceFormat::OpenGL);
#endif
else

View File

@ -49,14 +49,23 @@
static inline void bindApi(const QSurfaceFormat &format)
{
if (format.renderableType() == QSurfaceFormat::OpenVG)
switch (format.renderableType()) {
case QSurfaceFormat::OpenVG:
eglBindAPI(EGL_OPENVG_API);
break;
#ifdef EGL_VERSION_1_4
else if (format.renderableType() == QSurfaceFormat::OpenGL)
# if !defined(QT_OPENGL_ES_2)
case QSurfaceFormat::DefaultRenderableType:
# endif
case QSurfaceFormat::OpenGL:
eglBindAPI(EGL_OPENGL_API);
break;
#endif
else
case QSurfaceFormat::OpenGLES:
default:
eglBindAPI(EGL_OPENGL_ES_API);
break;
}
}
QEGLPlatformContext::QEGLPlatformContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display,