static void *libgl = NULL;
if(!libgl)
{
- libgl = dlopen("libGL.so", RTLD_NOW);
+ const char *libgl_name = getenv("GLWRAP_LIBGL");
+ if(!libgl_name)
+ libgl_name = "libGL.so";
+ libgl = dlopen(libgl_name, RTLD_NOW);
if(!libgl)
{
- fprintf(stderr, "Could not open libGL: %s\n", dlerror());
+ fprintf(stderr, "Could not open %s: %s\n", libgl_name, dlerror());
abort();
}
}
void (*glXGetProcAddress(const GLubyte *procname))(void)
{
- void *handle = dlopen(NULL, RTLD_LAZY);
- void (*ret)() = dlsym(handle, (const char *)procname);
+ void *handle = 0;
+ void (*ret)() = 0;
+
+ if(glsym((const char *)procname))
+ {
+ handle = dlopen(NULL, RTLD_LAZY);
+ ret = dlsym(handle, (const char *)procname);
+ }
+
begin_packet(FUNC_GLXGETPROCADDRESS);
write_pointer(ret);
- write_string(procname);
+ write_string((const char *)procname);
send_packet();
+
return ret;
}