X-Git-Url: https://git.cworth.org/git?p=fips;a=blobdiff_plain;f=eglwrap.c;h=fe7f736243195c0c51eaaedfa007dac30ed07e08;hp=6f009c35c53f3017d49cf8e22caa5a8725ca0966;hb=158a5862aeea9224fcd60c28b0bb19cb6b9f9381;hpb=b1a31412b687419fc177fa6f09ff12c3df81ef59 diff --git a/eglwrap.c b/eglwrap.c index 6f009c3..fe7f736 100644 --- a/eglwrap.c +++ b/eglwrap.c @@ -21,8 +21,12 @@ #include "fips.h" +#include "fips-dispatch.h" + #include +#include "context.h" +#include "eglwrap.h" #include "dlwrap.h" #include "metrics.h" @@ -46,7 +50,12 @@ } while (0); -static void * +/* Note: We only need to perform a lookup in libEGL.so.1, (not + * libGLESv2.so.2). This is because the functions we wrap, (currently + * eglSwapBufers, eglGetProcAddress, and eglMakeCurrent), exist only + * in libEGL.so.1. + */ +void * eglwrap_lookup (char *name) { const char *libegl_filename = "libEGL.so.1"; @@ -70,7 +79,42 @@ eglSwapBuffers (EGLDisplay dpy, EGLSurface surface) EGLBoolean ret; EGLWRAP_DEFER_WITH_RETURN (ret, eglSwapBuffers, dpy, surface); + + metrics_counter_stop (); + metrics_end_frame (); + metrics_counter_start (); + + return ret; +} + +void (*eglGetProcAddress (char const *func))(void) +{ + void *ret; + + /* If our library has this symbol, that's what we want to give. */ + ret = dlwrap_real_dlsym (NULL, (const char *) func); + if (ret) + return ret; + + /* Otherwise, just defer to the real eglGetProcAddress */ + EGLWRAP_DEFER_WITH_RETURN (ret, eglGetProcAddress, func); + + return ret; +} + +EGLBoolean +eglMakeCurrent (EGLDisplay display, EGLSurface draw, EGLSurface read, + EGLContext context) +{ + EGLBoolean ret; + + context_leave (); + + EGLWRAP_DEFER_WITH_RETURN (ret, eglMakeCurrent, display, draw, read, context); + + context_enter (FIPS_API_EGL, context); + return ret; }