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
parent
06ff9c9ec0
commit
7b6253efbf
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue