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();
}
}
write_bytes((char *)&v, sizeof(long));
}
-static inline void write_ulong(unsigned long v)
-{
- write_bytes((char *)&v, sizeof(unsigned long));
-}
-
-static inline void write_longlong(long long v)
+static inline void write_long_long(long long v)
{
write_bytes((char *)&v, sizeof(long long));
}
write_int(0);
}
-static inline void write_string(const unsigned char *s)
+static inline void write_string(const char *s)
{
write_data(s, strlen(s)+1);
}
-static inline void write_string_array(const unsigned char **sa, unsigned size)
+static inline void write_string_array(const char **sa, unsigned size)
{
unsigned i;
- size /= sizeof(const unsigned char *);
+ size /= sizeof(const char *);
write_int(size);
for(i=0; i<size; ++i)
write_string(sa[i]);
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;
}