X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=fips-dispatch.c;h=12b0bcb21b3aec757a0787c346a993c5a4162d83;hb=dfb96c9b64def8674a38dda2bc2276d4e2cdd58e;hp=beb0fa771188ace238d6e749196fada531a0df51;hpb=6475596e655063624dbf54359bd2a45de6a17dd1;p=fips diff --git a/fips-dispatch.c b/fips-dispatch.c index beb0fa7..12b0bcb 100644 --- a/fips-dispatch.c +++ b/fips-dispatch.c @@ -27,6 +27,9 @@ #include +#include "glwrap.h" +#include "eglwrap.h" + bool fips_dispatch_initialized; fips_api_t fips_dispatch_api; @@ -38,11 +41,21 @@ fips_dispatch_init (fips_api_t api) fips_dispatch_initialized = true; } +typedef void (*generic_function_pointer)(void); + void * fips_dispatch_lookup (const char *name) { - if (fips_dispatch_api == FIPS_API_GLX) - return glXGetProcAddressARB ((const GLubyte *)name); - else - return eglGetProcAddress (name); + static PFNGLXGETPROCADDRESSPROC glx_gpa = NULL; + static generic_function_pointer (*egl_gpa)(const char *name) = NULL; + + if (fips_dispatch_api == FIPS_API_GLX) { + if (glx_gpa == NULL) + glx_gpa = glwrap_lookup ("glXGetProcAddressARB"); + return glx_gpa ((const GLubyte *)name); + } else { + if (egl_gpa == NULL) + egl_gpa = eglwrap_lookup ("eglGetProcAddress"); + return egl_gpa (name); + } }