summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Roberts <neil@linux.intel.com>2012-10-01 11:30:50 +0100
committerNeil Roberts <neil@linux.intel.com>2012-10-01 14:04:16 +0100
commit624dea207cf76ae9ccd7f57c4ebd15d3bd65bff0 (patch)
treebeaa55eb54454d68a55d05de65ef33866ac1daba
parent66c9db993595b3a22e63f4c201ea468bc9b88cb6 (diff)
downloadcogl-624dea207cf76ae9ccd7f57c4ebd15d3bd65bff0.tar.gz
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>
-rw-r--r--cogl/winsys/cogl-winsys-egl.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/cogl/winsys/cogl-winsys-egl.c b/cogl/winsys/cogl-winsys-egl.c
index 2ff7687e..91f247d1 100644
--- a/cogl/winsys/cogl-winsys-egl.c
+++ b/cogl/winsys/cogl-winsys-egl.c
@@ -489,7 +489,8 @@ _cogl_winsys_context_init (CoglContext *context, CoglError **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);