[cogl/cogl-1.12] egl: Only allow GLES2 context creation for the GLES2 driver

commit 07a50012b9ec69999d752ae6b87cce1e49b6542e
Author: Neil Roberts <neil linux intel com>
Date:   Mon Oct 1 11:30:50 2012 +0100

    egl: Only allow GLES2 context creation for the GLES2 driver
    Previously, Cogl was advertising the GLES2 context feature whenever
    the EGL winsys was used, even if the winsys was used with the GL
    driver. This wasn't working because when the GL context is created the
    API is set to GL with eglBindAPI and it is never changed back to GLES
    when the GLES2 context is created. That meant that the created context
    is actually GL not GLES2. Any rendering would then fail because the GL
    context does not understand the precision statement.
    It could be possible to fix it so that it will set the API correctly
    before creating the context. It would then also need to reset the API
    and unbind the previous context whenever switching between GLES2 and
    GL contexts. If the context isn't unbound first then eglMakeCurrent
    will actually try to bind both contexts at the same time and at least
    Mesa detects this situation and reports that the two contexts
    conflict. Presumably we would also need to do something more clever
    when we retrieve the function pointers for the GLES2 context.
    Currently we just copy them from the CoglContext but if the context is
    using the GL driver then this would mean the functions came from libGL
    not libGLESv2.
    Reviewed-by: Robert Bragg <robert linux intel com>
    (cherry picked from commit 624dea207cf76ae9ccd7f57c4ebd15d3bd65bff0)

 cogl/winsys/cogl-winsys-egl.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/cogl/winsys/cogl-winsys-egl.c b/cogl/winsys/cogl-winsys-egl.c
index 800ebce..b87cdf9 100644
--- a/cogl/winsys/cogl-winsys-egl.c
+++ b/cogl/winsys/cogl-winsys-egl.c
@@ -483,7 +483,8 @@ _cogl_winsys_context_init (CoglContext *context, GError **error)
   /* NB: We currently only support creating standalone GLES2 contexts
    * for offscreen rendering and so we need a dummy (non-visible)
    * surface to be able to bind those contexts */
-  if (egl_display->dummy_surface != EGL_NO_SURFACE)
+  if (egl_display->dummy_surface != EGL_NO_SURFACE &&
+      context->driver == COGL_DRIVER_GLES2)
     COGL_FLAGS_SET (context->features,
                     COGL_FEATURE_ID_GLES2_CONTEXT, TRUE);

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]