]> git.cworth.org Git - fips/blobdiff - eglwrap.c
Add explicit link to libpthread, to work around debugging issues
[fips] / eglwrap.c
index 6f009c35c53f3017d49cf8e22caa5a8725ca0966..913532ef023df21c7b6765a82f25649a7f0de237 100644 (file)
--- a/eglwrap.c
+++ b/eglwrap.c
 
 #include "fips.h"
 
+#include "fips-dispatch.h"
+
 #include <EGL/egl.h>
 
+#include "context.h"
+#include "eglwrap.h"
 #include "dlwrap.h"
 #include "metrics.h"
 
 } 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_end_frame ();
+
+       context_counter_stop ();
+
+       context_end_frame ();
+
+       context_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;
 }