X-Git-Url: https://git.cworth.org/git?p=fips;a=blobdiff_plain;f=fips-dispatch.c;fp=fips-dispatch.c;h=12b0bcb21b3aec757a0787c346a993c5a4162d83;hp=beb0fa771188ace238d6e749196fada531a0df51;hb=67c01d9b406d07b558255f35872cc549e4493e05;hpb=3b579d69622d53b95c6259daf0ecb4f5d2b1798b 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); + } }