diff options
-rw-r--r-- | progs/egl/segl/Makefile | 21 | ||||
-rw-r--r-- | progs/egl/segl/segl.c | 167 | ||||
-rw-r--r-- | progs/egl/segl/segl.h | 60 | ||||
-rw-r--r-- | progs/egl/segl/segl_kms.c | 59 | ||||
-rw-r--r-- | progs/egl/segl/segl_x11.c | 117 |
5 files changed, 0 insertions, 424 deletions
diff --git a/progs/egl/segl/Makefile b/progs/egl/segl/Makefile deleted file mode 100644 index c5f13f6..0000000 --- a/progs/egl/segl/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# progs/egl/segl/Makefile - -TOP = ../../.. -include $(TOP)/configs/current - -SEGL_LIBS := $(foreach dpy, $(EGL_DISPLAYS), libsegl-$(dpy).a) - -all: $(SEGL_LIBS) - -x11_OBJECTS := segl.o segl_x11.o -kms_OBJECTS := segl.o segl_kms.o - -libsegl-x11.a: $(x11_OBJECTS) - $(MKLIB) -o segl-x11 -static $(x11_OBJECTS) - -libsegl-kms.a: $(kms_OBJECTS) - $(MKLIB) -o segl-kms -static $(kms_OBJECTS) - -clean: - rm -f $(sort $(x11_OBJECTS) $(kms_OBJECTS)) - rm -f $(SEGL_LIBS) diff --git a/progs/egl/segl/segl.c b/progs/egl/segl/segl.c deleted file mode 100644 index b1df71a..0000000 --- a/progs/egl/segl/segl.c +++ /dev/null @@ -1,167 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <stdarg.h> -#include <EGL/egl.h> - -#include "segl.h" - -static void -segl_log(struct segl *segl, const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - - if (segl->winsys->vlog) - segl->winsys->vlog(segl->winsys, format, ap); - else - vfprintf(stdout, format, ap); - - va_end(ap); -} - -static EGLBoolean -segl_init_egl(struct segl *segl, const EGLint *attribs) -{ - EGLint num_conf; - - segl->dpy = eglGetDisplay(segl->winsys->dpy); - if (!segl->dpy) - return EGL_FALSE; - - if (!eglInitialize(segl->dpy, &segl->major, &segl->minor)) - return EGL_FALSE; - - if (segl->verbose) { - const char *ver = eglQueryString(segl->dpy, EGL_VERSION); - segl_log(segl, "EGL_VERSION = %s\n", ver); - } - - if (!eglChooseConfig(segl->dpy, attribs, &segl->conf, 1, &num_conf) || - !num_conf) { - segl_log(segl, "failed to choose a config\n"); - eglTerminate(segl->dpy); - return EGL_FALSE; - } - - return EGL_TRUE; -} - -struct segl * -segl_new(struct segl_winsys *winsys, const EGLint *attribs) -{ - struct segl *segl; - - segl = calloc(1, sizeof(*segl)); - if (segl) { - segl->verbose = EGL_TRUE; - segl->winsys = winsys; - - if (!segl_init_egl(segl, attribs)) { - free(segl); - return NULL; - } - } - - return segl; -} - -void -segl_destroy(struct segl *segl) -{ - free(segl); -} - -EGLBoolean -segl_create_window(struct segl *segl, const char *name, - EGLint width, EGLint height, const EGLint *attribs, - EGLNativeWindowType *win_ret, EGLSurface *surf_ret) -{ - EGLNativeWindowType win; - EGLSurface surf; - EGLint visual; - - if (!win_ret) { - if (surf_ret) - *surf_ret = EGL_NO_SURFACE; - return EGL_TRUE; - } - - if (!eglGetConfigAttrib(segl->dpy, segl->conf, EGL_NATIVE_VISUAL_ID, &visual)) - return EGL_FALSE; - - win = segl->winsys->create_window(segl->winsys, - name, width, height, visual); - if (surf_ret) { - surf = eglCreateWindowSurface(segl->dpy, segl->conf, win, attribs); - if (!surf) { - segl_log(segl, "failed to create a window surface\n"); - segl->winsys->destroy_window(segl->winsys, win); - return EGL_FALSE; - } - - *surf_ret = surf; - } - - *win_ret = win; - - return EGL_TRUE; -} - -EGLBoolean -segl_create_pixmap(struct segl *segl, - EGLint width, EGLint height, const EGLint *attribs, - EGLNativePixmapType *pix_ret, EGLSurface *surf_ret) -{ - EGLNativePixmapType pix; - EGLSurface surf; - EGLint depth; - - if (!pix_ret) { - if (surf_ret) - *surf_ret = EGL_NO_SURFACE; - return EGL_TRUE; - } - - if (!eglGetConfigAttrib(segl->dpy, segl->conf, EGL_BUFFER_SIZE, &depth)) - return EGL_FALSE; - - pix = segl->winsys->create_pixmap(segl->winsys, width, height, depth); - if (surf_ret) { - surf = eglCreatePixmapSurface(segl->dpy, segl->conf, pix, attribs); - if (!surf) { - segl_log(segl, "failed to create a pixmap surface\n"); - segl->winsys->destroy_pixmap(segl->winsys, pix); - return EGL_FALSE; - } - - *surf_ret = surf; - } - - *pix_ret = pix; - - return EGL_TRUE; -} - -void -segl_benchmark(struct segl *segl, double seconds, - void (*draw_frame)(void *), void *draw_data) -{ - double begin, end, last_frame, duration; - EGLint num_frames = 0; - - begin = segl->winsys->now(segl->winsys); - end = begin + seconds; - - last_frame = begin; - while (last_frame < end) { - draw_frame(draw_data); - last_frame = segl->winsys->now(segl->winsys); - num_frames++; - } - - duration = last_frame - begin; - segl_log(segl, "%d frames in %3.1f seconds = %6.3f FPS\n", - num_frames, duration, (double) num_frames / duration); -} diff --git a/progs/egl/segl/segl.h b/progs/egl/segl/segl.h deleted file mode 100644 index 20faf6e..0000000 --- a/progs/egl/segl/segl.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef _SEGL_H_ -#define _SEGL_H_ - -#include <stdarg.h> -#include <EGL/egl.h> - -struct segl_winsys { - EGLNativeDisplayType dpy; - - EGLNativeWindowType (*create_window)(struct segl_winsys *winsys, - const char *name, - EGLint width, EGLint height, - EGLint visual); - void (*destroy_window)(struct segl_winsys *winsys, EGLNativeWindowType win); - - EGLNativePixmapType (*create_pixmap)(struct segl_winsys *winsys, - EGLint width, EGLint height, - EGLint depth); - void (*destroy_pixmap)(struct segl_winsys *winsys, EGLNativePixmapType pix); - - /* get current time in seconds */ - double (*now)(struct segl_winsys *winsys); - /* log a message. OPTIONAL */ - void (*vlog)(struct segl_winsys *winsys, const char *format, va_list ap); -}; - -struct segl { - EGLBoolean verbose; - - struct segl_winsys *winsys; - - EGLint major, minor; - EGLDisplay dpy; - EGLConfig conf; -}; - -struct segl_winsys * -segl_get_winsys(EGLNativeDisplayType dpy); - -struct segl * -segl_new(struct segl_winsys *winsys, const EGLint *attribs); - -void -segl_destroy(struct segl *segl); - -EGLBoolean -segl_create_window(struct segl *segl, const char *name, - EGLint width, EGLint height, const EGLint *attribs, - EGLNativeWindowType *win_ret, EGLSurface *surf_ret); - -EGLBoolean -segl_create_pixmap(struct segl *segl, - EGLint width, EGLint height, const EGLint *attribs, - EGLNativePixmapType *pix_ret, EGLSurface *surf_ret); - -void -segl_benchmark(struct segl *segl, double seconds, - void (*draw_frame)(void *), void *draw_data); - -#endif /* _SEGL_H_ */ diff --git a/progs/egl/segl/segl_kms.c b/progs/egl/segl/segl_kms.c deleted file mode 100644 index bb4fcfc..0000000 --- a/progs/egl/segl/segl_kms.c +++ /dev/null @@ -1,59 +0,0 @@ -#include <stdlib.h> -#include <sys/time.h> - -#include "segl.h" - -static EGLNativeWindowType -kms_create_window(struct segl_winsys *winsys, const char *name, - EGLint width, EGLint height, EGLint visual) -{ - return 0; -} - -static void -kms_destroy_window(struct segl_winsys *winsys, EGLNativeWindowType win) -{ -} - - -static EGLNativePixmapType -kms_create_pixmap(struct segl_winsys *winsys, EGLint width, EGLint height, - EGLint depth) -{ - return 0; -} - -static void -kms_destroy_pixmap(struct segl_winsys *winsys, EGLNativePixmapType pix) -{ -} - -static double -kms_now(struct segl_winsys *winsys) -{ - struct timeval tv; - - gettimeofday(&tv, NULL); - - return (double) tv.tv_sec + tv.tv_usec / 1000000.0; -} - -struct segl_winsys * -segl_get_winsys(EGLNativeDisplayType dpy) -{ - struct segl_winsys *winsys; - - winsys = calloc(1, sizeof(*winsys)); - if (winsys) { - winsys->dpy = dpy; - - winsys->create_window = kms_create_window; - winsys->destroy_window = kms_destroy_window; - winsys->create_pixmap = kms_create_pixmap; - winsys->destroy_pixmap = kms_destroy_pixmap; - - winsys->now = kms_now; - } - - return winsys; -} diff --git a/progs/egl/segl/segl_x11.c b/progs/egl/segl/segl_x11.c deleted file mode 100644 index 7b26917..0000000 --- a/progs/egl/segl/segl_x11.c +++ /dev/null @@ -1,117 +0,0 @@ -#include <stdlib.h> -#include <sys/time.h> -#include <X11/Xlib.h> -#include <X11/Xutil.h> - -#include "segl.h" - -static Window -x11_create_window(struct segl_winsys *winsys, const char *name, - EGLint width, EGLint height, EGLint visual) -{ - XVisualInfo vinfo_template, *vinfo = NULL; - EGLint val, num_vinfo; - Window root, win; - XSetWindowAttributes attrs; - unsigned long mask; - EGLint x = 0, y = 0; - - vinfo_template.visualid = (VisualID) val; - vinfo = XGetVisualInfo(winsys->dpy, VisualIDMask, &vinfo_template, &num_vinfo); - if (!num_vinfo) { - if (vinfo) - XFree(vinfo); - return None; - } - - root = DefaultRootWindow(winsys->dpy); - - /* window attributes */ - attrs.background_pixel = 0; - attrs.border_pixel = 0; - attrs.colormap = XCreateColormap(winsys->dpy, root, vinfo->visual, AllocNone); - attrs.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask; - attrs.override_redirect = False; - mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask | CWOverrideRedirect; - - win = XCreateWindow(winsys->dpy, root, x, y, width, height, 0, - vinfo->depth, InputOutput, vinfo->visual, mask, &attrs); - XFree(vinfo); - - if (!win) - return None; - - /* set hints and properties */ - { - XSizeHints sizehints; - sizehints.x = x; - sizehints.y = y; - sizehints.width = width; - sizehints.height = height; - sizehints.flags = USSize | USPosition; - XSetNormalHints(winsys->dpy, win, &sizehints); - XSetStandardProperties(winsys->dpy, win, name, name, - None, (char **)NULL, 0, &sizehints); - } - - XMapWindow(winsys->dpy, win); - - return win; -} - -static void -x11_destroy_window(struct segl_winsys *winsys, Window win) -{ - if (win) - XDestroyWindow(winsys->dpy, win); -} - - -static Pixmap -x11_create_pixmap(struct segl_winsys *winsys, EGLint width, EGLint height, - EGLint depth) -{ - Window root = DefaultRootWindow(winsys->dpy); - Pixmap pix; - - pix = XCreatePixmap(winsys->dpy, (Drawable) root, width, height, depth); - - return pix; -} - -static void -x11_destroy_pixmap(struct segl_winsys *winsys, Pixmap pix) -{ - if (pix) - XFreePixmap(winsys->dpy, pix); -} - -static double -x11_now(struct segl_winsys *winsys) -{ - struct timeval tv; - - gettimeofday(&tv, NULL); - - return (double) tv.tv_sec + tv.tv_usec / 1000000.0; -} - -struct segl_winsys * -segl_get_winsys(EGLNativeDisplayType dpy) -{ - struct segl_winsys *winsys; - - winsys = calloc(1, sizeof(*winsys)); - if (winsys) { - winsys->dpy = dpy; - - winsys->create_window = x11_create_window; - winsys->destroy_window = x11_destroy_window; - winsys->create_pixmap = x11_create_pixmap; - winsys->destroy_pixmap = x11_destroy_pixmap; - - winsys->now = x11_now; - } - - return winsys; -} |