diff options
| author | Bryce Harrington <b.harrington@samsung.com> | 2013-11-20 18:33:39 -0800 |
|---|---|---|
| committer | Bryce Harrington <b.harrington@samsung.com> | 2013-11-20 18:33:39 -0800 |
| commit | a420122ab0081b7491a2c4c32256ab09fe961e15 (patch) | |
| tree | fe9630238f26c77403f5f08cf84d9e6496cef62c /src/surface-egl.cpp | |
| parent | 65f82c82751bbc7871229a4d6654a060874f4e46 (diff) | |
Rename the cairo surface modules to permit adding skia surface modules too
Diffstat (limited to 'src/surface-egl.cpp')
| -rw-r--r-- | src/surface-egl.cpp | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/src/surface-egl.cpp b/src/surface-egl.cpp deleted file mode 100644 index 4676546..0000000 --- a/src/surface-egl.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include <err.h> -#include <stdlib.h> -#include <cairo.h> -#include <cairo-gl.h> - -#include <EGL/egl.h> -#include <GLES3/gl3.h> - -struct graphics_state { - Display *dpy; - Window window; - - EGLDisplay egl_display; - EGLContext egl_context; - EGLSurface egl_surface; -}; - -static void -cleanup (void *data) -{ - struct graphics_state *state = (graphics_state*)data; - - eglDestroyContext (state->egl_display, state->egl_context); - eglDestroySurface (state->egl_display, state->egl_surface); - eglTerminate (state->egl_display); - - XCloseDisplay (state->dpy); - - free (state); -} - -cairo_surface_t * -create_source_surface_egl (int width, int height) -{ - struct graphics_state *state; - cairo_device_t *cairo_device; - cairo_surface_t *cairo_surface; - - EGLint attr[] = { - EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_RED_SIZE, 1, - EGL_GREEN_SIZE, 1, - EGL_BLUE_SIZE, 1, - EGL_ALPHA_SIZE, 1, - EGL_STENCIL_SIZE, 1, - EGL_SAMPLES, 4, - EGL_SAMPLE_BUFFERS, 1, - EGL_NONE - }; - EGLint ctx_attr[] = { - EGL_CONTEXT_CLIENT_VERSION, 3, - EGL_NONE - }; - EGLConfig config; - EGLint num; - EGLint major, minor; - - state = (graphics_state*) malloc (sizeof (struct graphics_state)); - if (!state) { - warnx ("Out of memory\n"); - return NULL; - } - - state->dpy = XOpenDisplay (NULL); - if (state->dpy == NULL) { - warnx ("Failed to open display: %s\n", XDisplayName (0)); - return NULL; - } - - state->window = XCreateSimpleWindow (state->dpy, DefaultRootWindow (state->dpy), - 0, 0, - width, height, - 0, - BlackPixel (state->dpy, DefaultRootWindow (state->dpy)), - BlackPixel (state->dpy, DefaultRootWindow (state->dpy))); - XMapWindow (state->dpy, state->window); - - state->egl_display = eglGetDisplay ((EGLNativeDisplayType) state->dpy); - if (state->egl_display == EGL_NO_DISPLAY) { - warnx ("Cannot get egl display\n"); - return NULL; - } - - if (! eglInitialize (state->egl_display, &major, &minor)) { - warnx ("Cannot initialize egl\n"); - return NULL; - } - - if (! eglBindAPI (EGL_OPENGL_ES_API)) { - warnx ("Cannot bind egl to gles2 API\n"); - return NULL; - } - - if (! eglChooseConfig (state->egl_display, attr, &config, 1, &num)) { - warnx ("Cannot get egl configuration\n"); - return NULL; - } - - state->egl_context = eglCreateContext (state->egl_display, config, NULL, ctx_attr); - if (state->egl_context == EGL_NO_CONTEXT) { - warnx ("Cannot create egl context\n"); - return NULL; - } - - state->egl_surface = eglCreateWindowSurface (state->egl_display, config, state->window, NULL); - if (state->egl_surface == EGL_NO_SURFACE) { - warnx ("Cannot create egl window surface\n"); - return NULL; - } - - cairo_device = cairo_egl_device_create (state->egl_display, state->egl_context); - cairo_gl_device_set_thread_aware (cairo_device, 0); - cairo_surface = cairo_gl_surface_create_for_egl (cairo_device, - state->egl_surface, - width, height); - - if (cairo_device_set_user_data (cairo_device, - (cairo_user_data_key_t *) cleanup, - state, - cleanup)) - { - warnx ("Failed to setup cleanup callback closure\n"); - cleanup (state); - return NULL; - } - - cairo_device_destroy (cairo_device); - - return cairo_surface; -} |