From 1619401a12d5365a754a85031922c8c2ff6229ee Mon Sep 17 00:00:00 2001 From: Eleni Maria Stea Date: Wed, 13 Mar 2013 01:35:12 +0200 Subject: [PATCH] I couldn't override dlsym but I managed to fake the glGetProgramiv results by overriding the glxGetProcAddress (glx.h) --- src/gliar.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/gliar.c b/src/gliar.c index e83d5cd..7ba60d9 100644 --- a/src/gliar.c +++ b/src/gliar.c @@ -42,6 +42,7 @@ static const GLubyte* (*gl_get_string)(GLenum); static const GLubyte* (*gl_get_stringi)(GLenum, GLuint); static void (*gl_get_integerv)(GLenum, GLint*); static void (*gl_get_programiv)(GLuint, GLenum, GLint*); +static void *(*glx_get_proc_address)(const unsigned char*); /*static const void* (*gl_get_booleanv)(GLenum, GLboolean*); static const void* (*gl_get_doublev)(GLenum, GLdouble*); @@ -65,6 +66,7 @@ static int init(void) gl_get_stringi = dlsym(RTLD_NEXT, "glGetStringi"); gl_get_integerv = dlsym(RTLD_NEXT, "glGetIntegerv"); gl_get_programiv = dlsym(RTLD_NEXT, "glGetProgramivARB"); + glx_get_proc_address = dlsym(RTLD_NEXT, "glXGetProcAddress"); if(init_valid_extensions() == -1) { fprintf(stderr, "GLIAR: failed to initialize the valid extension list, might end up with unavailable extensions!\n"); @@ -406,3 +408,20 @@ void glGetProgramivARB(GLuint program, GLenum pname, GLint *params) gl_get_programiv(program, pname, params); } + +void *glXGetProcAddress(const unsigned char *procname) +{ + if(!glx_get_proc_address) { + glx_get_proc_address = dlsym(RTLD_NEXT, "glXGetProcAddress"); + if(!glx_get_proc_address) { + return 0; + } + } + + if(!strcmp((char*)procname, "glGetProgramivARB")) { + char *overr_name = "gl_get_programiv"; + return glx_get_proc_address((unsigned char*)overr_name); + } + + return glx_get_proc_address(procname); +} -- 1.7.10.4