summaryrefslogtreecommitdiff
path: root/src/egl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/egl.c')
-rw-r--r--src/egl.c51
1 files changed, 25 insertions, 26 deletions
diff --git a/src/egl.c b/src/egl.c
index 0986ff6..eec2ced 100644
--- a/src/egl.c
+++ b/src/egl.c
@@ -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);
}