void *libgl_handle;
void *wrapper_handle;
+#define STRNCMP_LITERAL(str, literal) strncmp (str, literal, sizeof (literal) - 1)
+
static void
open_libgl_handle (void)
{
static void *
resolve (const char *name)
{
+ static int before_first_gl_call = 1;
void *symbol;
+ if (before_first_gl_call &&
+ STRNCMP_LITERAL (name, "gl") == 0 &&
+ STRNCMP_LITERAL (name, "glX") != 0)
+ {
+ char *callback_name = getenv ("GLAZE_FIRST_GL_CALL_CALLBACK");
+ if (callback_name) {
+ void (*callback) (void) = dlsym (wrapper_handle,
+ callback_name);
+ if (callback) {
+ (callback) ();
+ } else {
+ fprintf (stderr,
+ "Error: Failed to find function %s "
+ "in GLAZE_WRAPPER library.\n",
+ callback_name);
+ }
+ }
+ before_first_gl_call = 0;
+ }
+
/* The wrapper gets first choice on all symbols. */
symbol = dlsym (wrapper_handle, name);
if (symbol)