/* the errors I get are: bash-3.2$ make gcc -o testdyngl.exe testdyngl.cpp -g -O2 -I/usr/local/include/SDL -I/usr/include/mingw -mno-cygwin -Dmain=SDL_main -DHAVE_OPENGL -L/usr/local/lib -lmingw32 -lSDLmain -lSDL -mno-cygwin -mwindows testdyngl.cpp: In function `void init_glfuncs(glfuncs*)': testdyngl.cpp:76: error: invalid conversion from `void*' to `void (*)(GLenum)' testdyngl.cpp:77: error: invalid conversion from `void*' to `void (*)()' testdyngl.cpp:78: error: invalid conversion from `void*' to `void (*)(GLfloat, GLfloat, GLfloat)' testdyngl.cpp:79: error: invalid conversion from `void*' to `void (*)(GLfloat, GLfloat, GLfloat, GLfloat)' testdyngl.cpp:80: error: invalid conversion from `void*' to `void (*)(GLbitfield)' testdyngl.cpp:81: error: invalid conversion from `void*' to `void (*)(GLenum)' testdyngl.cpp:82: error: invalid conversion from `void*' to `void (*)(GLenum)' testdyngl.cpp:83: error: invalid conversion from `void*' to `void (*)(GLubyte, GLubyte, GLubyte, GLubyte)' testdyngl.cpp:84: error: invalid conversion from `void*' to `void (*)(GLfloat)' testdyngl.cpp:85: error: invalid conversion from `void*' to `void (*)(GLenum, GLenum)' testdyngl.cpp:86: error: invalid conversion from `void*' to `void (*)(GLenum, GLenum)' testdyngl.cpp:87: error: invalid conversion from `void*' to `void (*)(GLenum)' testdyngl.cpp:88: error: invalid conversion from `void*' to `void (*)()' testdyngl.cpp:89: error: invalid conversion from `void*' to `void (*)(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble)' testdyngl.cpp:90: error: invalid conversion from `void*' to `void (*)(GLfloat, GLfloat, GLfloat, GLfloat)' testdyngl.cpp:91: error: invalid conversion from `void*' to `void (*)(GLint, GLint, GLsizei, GLsizei)' testdyngl.cpp:92: error: invalid conversion from `void*' to `void (*)(GLenum, GLfloat)' make: *** [testdyngl.exe] Error 1 --- next line is line #37 in reality too --- */ void* get_funcaddr(const char* p) { void* f=SDL_GL_GetProcAddress(p); if (f) { return f; } else { fprintf(stderr,"Unable to get function pointer for %s\n",p); quit(1); } return NULL; } typedef struct { void(APIENTRY*glBegin)(GLenum); void(APIENTRY*glEnd)(); void(APIENTRY*glVertex3f)(GLfloat, GLfloat, GLfloat); void(APIENTRY*glClearColor)(GLfloat, GLfloat, GLfloat, GLfloat); void(APIENTRY*glClear)(GLbitfield); void(APIENTRY*glDisable)(GLenum); void(APIENTRY*glEnable)(GLenum); void(APIENTRY*glColor4ub)(GLubyte,GLubyte,GLubyte,GLubyte); void(APIENTRY*glPointSize)(GLfloat); void(APIENTRY*glHint)(GLenum,GLenum); void(APIENTRY*glBlendFunc)(GLenum,GLenum); void(APIENTRY*glMatrixMode)(GLenum); void(APIENTRY*glLoadIdentity)(); void(APIENTRY*glOrtho)(GLdouble,GLdouble,GLdouble,GLdouble,GLdouble,GLdouble); void(APIENTRY*glRotatef)(GLfloat,GLfloat,GLfloat,GLfloat); void(APIENTRY*glViewport)(GLint,GLint,GLsizei,GLsizei); void(APIENTRY*glFogf)(GLenum,GLfloat); } glfuncs; void init_glfuncs(glfuncs* f) { f->glBegin=get_funcaddr("glBegin"); f->glEnd=get_funcaddr("glEnd"); f->glVertex3f=get_funcaddr("glVertex3f"); f->glClearColor=get_funcaddr("glClearColor"); f->glClear=get_funcaddr("glClear"); f->glDisable=get_funcaddr("glDisable"); f->glEnable=get_funcaddr("glEnable"); f->glColor4ub=get_funcaddr("glColor4ub"); f->glPointSize=get_funcaddr("glPointSize"); f->glHint=get_funcaddr("glHint"); f->glBlendFunc=get_funcaddr("glBlendFunc"); f->glMatrixMode=get_funcaddr("glMatrixMode"); f->glLoadIdentity=get_funcaddr("glLoadIdentity"); f->glOrtho=get_funcaddr("glOrtho"); f->glRotatef=get_funcaddr("glRotatef"); f->glViewport=get_funcaddr("glViewport"); f->glFogf=get_funcaddr("glFogf"); }