[cairo] [PATCH 2/3] egl: Ensure that the dummy pbuffer surface is compatible with the supplied context
alexandros.frantzis at linaro.org
alexandros.frantzis at linaro.org
Fri Feb 11 10:05:54 PST 2011
From: Alexandros Frantzis <alexandros.frantzis at linaro.org>
In order to be able to make an egl context current when using a
pbuffer surface, that surface must have been created with a config
that is compatible with the context config. For Mesa, this means that
the configs must be the same.
---
src/cairo-egl-context.c | 26 ++++++++++++++++----------
1 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/src/cairo-egl-context.c b/src/cairo-egl-context.c
index 9f14633..ec23852 100644
--- a/src/cairo-egl-context.c
+++ b/src/cairo-egl-context.c
@@ -140,7 +140,7 @@ cairo_egl_device_create (EGLDisplay dpy, EGLContext egl)
EGL_HEIGHT, 1,
EGL_NONE,
};
- EGLConfig *configs;
+ EGLConfig config;
EGLint numConfigs;
ctx = calloc (1, sizeof (cairo_egl_context_t));
@@ -158,15 +158,21 @@ cairo_egl_device_create (EGLDisplay dpy, EGLContext egl)
if (!_egl_make_current_surfaceless (ctx)) {
/* Fall back to dummy surface, meh. */
- eglGetConfigs (dpy, NULL, 0, &numConfigs);
- configs = malloc (sizeof(*configs) *numConfigs);
- if (configs == NULL) {
- free (ctx);
- return _cairo_gl_context_create_in_error (CAIRO_STATUS_NO_MEMORY);
- }
- eglGetConfigs (dpy, configs, numConfigs, &numConfigs);
- ctx->dummy_surface = eglCreatePbufferSurface (dpy, configs[0], attribs);
- free (configs);
+ EGLint config_attribs[] = {
+ EGL_CONFIG_ID, 0,
+ EGL_NONE
+ };
+
+ /*
+ * In order to be able to make an egl context current when using a
+ * pbuffer surface, that surface must have been created with a config
+ * that is compatible with the context config. For Mesa, this means
+ * that the configs must be the same.
+ */
+ eglQueryContext (dpy, egl, EGL_CONFIG_ID, &config_attribs[1]);
+ eglChooseConfig (dpy, config_attribs, &config, 1, &numConfigs);
+
+ ctx->dummy_surface = eglCreatePbufferSurface (dpy, config, attribs);
if (ctx->dummy_surface == NULL) {
free (ctx);
--
1.7.2.3
More information about the cairo
mailing list