diff options
Diffstat (limited to 'src/egl.c')
-rw-r--r-- | src/egl.c | 51 |
1 files changed, 25 insertions, 26 deletions
@@ -15,9 +15,14 @@ #include <epoxy/glx.h> #include <gbm.h> +#include "egl.h" +void setup_egl_draw_loop(struct egl *egl, void (*draw_func)()) +{ + egl->draw = draw_func; +} -void init_egl(struct display * d) +void init_egl(struct egl *egl, const struct gbm *gbm) { EGLBoolean b; EGLint major, minor, n; @@ -38,63 +43,57 @@ void init_egl(struct display * d) EGL_NONE }; - /* sanity checking */ - assert(d); - if (eglGetPlatformDisplayEXT) - d->egl.display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR, d->dev->gbm_dev, NULL); + egl->display = eglGetPlatformDisplayEXT(EGL_PLATFORM_GBM_KHR, gbm->dev, NULL); else - d->egl.display = eglGetDisplay((void *) d->dev->gbm_dev); + egl->display = eglGetDisplay((void *) gbm->dev); - if (!d->egl.display) + if (!egl->display) fprintf(stderr, "cannot create EGL display\n"); - b = eglInitialize(d->egl.display, &major, &minor); + b = eglInitialize(egl->display, &major, &minor); if (!b) fprintf(stderr, "Cannot initialise EGL\n"); fprintf(stderr, "EGL major/minor: %d.%d\n", major, minor); fprintf(stderr, "EGL version: %s\n", - eglQueryString(d->egl.display, EGL_VERSION)); + eglQueryString(egl->display, EGL_VERSION)); fprintf(stderr, "EGL vendor: %s\n", - eglQueryString(d->egl.display, EGL_VENDOR)); + eglQueryString(egl->display, EGL_VENDOR)); fprintf(stderr, "EGL extensions: %s\n", - eglQueryString(d->egl.display, EGL_EXTENSIONS)); + eglQueryString(egl->display, EGL_EXTENSIONS)); if (!eglBindAPI(EGL_OPENGL_API)) fprintf(stderr, "cannot bind OpenGL API\n"); - b = eglChooseConfig(d->egl.display, conf_att, &d->egl.config, 1, &n); + b = eglChooseConfig(egl->display, conf_att, &egl->config, 1, &n); if (!b || n != 1) { fprintf(stderr, "cannot find suitable EGL config\n"); abort(); } - d->egl.context = eglCreateContext(d->egl.display, d->egl.config, + egl->context = eglCreateContext(egl->display, egl->config, EGL_NO_CONTEXT, ctx_att); - if (!d->egl.context) + if (!egl->context) fprintf(stderr, "cannot create EGL context\n"); - assert(d->dev->gbm_surface); - EGLNativeWindowType native_surface = (EGLNativeWindowType) d->dev->gbm_surface; - d->egl.surface = eglCreateWindowSurface(d->egl.display, d->egl.config, native_surface, NULL); - if (d->egl.surface == EGL_NO_SURFACE) { + assert(gbm->surface); + EGLNativeWindowType native_surface = (EGLNativeWindowType) gbm->surface; + egl->surface = eglCreateWindowSurface(egl->display, egl->config, native_surface, NULL); + if (egl->surface == EGL_NO_SURFACE) { fprintf(stderr, "cannot create EGL surface\n"); assert(0); } /* connect the context to the surface */ - eglMakeCurrent(d->egl.display, d->egl.surface, d->egl.surface, d->egl.context); + eglMakeCurrent(egl->display, egl->surface, egl->surface, egl->context); printf("GL Extensions: \"%s\"\n", glGetString(GL_EXTENSIONS)); } -void deinit_egl(struct display * d) +void deinit_egl(struct egl * egl) { - /* sanity checks */ - assert(d); - - eglMakeCurrent(d->egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - eglDestroyContext(d->egl.display, d->egl.context); - eglTerminate(d->egl.display); + eglMakeCurrent(egl->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglDestroyContext(egl->display, egl->context); + eglTerminate(egl->display); } |